C/C++ 拼圖遊戲 代碼簡單 帶有graphics圖形庫

代碼:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<graphics.h>
#include<string.h>
int map[4][3];
int num = 0;
IMAGE image1, image2, image3, image4, image5, image6, image7, image8, image9, image10, image11, image12, image13;
void Initmap()//初始化數組
{
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			map[i][j] = rand() % 100;
		}
	}
	map[2][3] = 100;

}
void PaintInit()//獲取圖片地址內容
{
	loadimage(&image1, L"./image/1.jpg", 100, 100);
	loadimage(&image2, L"./image/2.jpg", 100, 100);
	loadimage(&image3, L"./image/3.jpg", 100, 100);
	loadimage(&image4, L"./image/4.jpg", 100, 100);
	loadimage(&image5, L"./image/5.jpg", 100, 100);
	loadimage(&image6, L"./image/6.jpg", 100, 100);
	loadimage(&image7, L"./image/7.jpg", 100, 100);
	loadimage(&image8, L"./image/8.jpg", 100, 100);
	loadimage(&image9, L"./image/9.jpg", 100, 100);
	loadimage(&image10, L"./image/10.jpg", 100, 100);
	loadimage(&image11, L"./image/11.jpg", 100, 100);
	loadimage(&image12, L"./image/back.jpg", 400, 200);
	loadimage(&image13, L"./image/border.jpg", 50, 300);

}
int finMin(int a)//找到數組裏面最小的數,然後將設定的圖片給對應的數;
{
	int flag=1;
	
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (a > map[i][j])
			{
				flag++;//如過flag 不加上去不變表示沒有比他大的數
			}
		}
	}
	return flag;
}
void GameInit()//遊戲初始化
{
	
	int min=map[0][0];
	putimage(450, 0, &image12);
	putimage(400, 0, &image13);
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
				if (finMin(map[i][j]) == 1)
				{
					putimage(i * 100, j * 100, &image1);
				}
				if (finMin(map[i][j]) == 2)
				{
					putimage(i * 100, j * 100, &image2);
				}
				if (finMin(map[i][j]) == 3)
				{
					putimage(i * 100, j * 100, &image3);
				}
				if (finMin(map[i][j]) == 4)
				{
					putimage(i * 100, j * 100, &image4);
				}
				if (finMin(map[i][j]) == 5)
				{
					putimage(i * 100, j * 100, &image5);
				}
				if (finMin(map[i][j]) == 6)
				{
					putimage(i * 100, j * 100, &image6);
				}
				if (finMin(map[i][j]) == 7)
				{
					putimage(i * 100, j * 100, &image7);
				}
				if (finMin(map[i][j]) == 8)
				{
					putimage(i * 100, j * 100, &image8);
				}
				if (finMin(map[i][j]) == 9)
				{
					putimage(i * 100, j * 100, &image9);
				}
				if (finMin(map[i][j]) == 10)
				{
					putimage(i * 100, j * 100, &image10);
				}
				if (finMin(map[i][j]) == 11)
				{
					putimage(i * 100, j * 100, &image11);
				}
				
		}
	}
	
}
void PlayGame()
{
	int x, y;
	MOUSEMSG m;
	int newA;
	char ch;
	int r, c;  //找到當前空白塊的下標  //
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (map[i][j] == 100)
			{
				r = i;
				c = j;
			}
		}
	}
	
	
	ch = getch();
	switch (ch)
	{
		
	case 'W':case 'w' :
	{
		
		if (c - 1<0)return;
		newA = map[r][c];
		map[r][c] = map[r][c-1];
		map[r][c-1] = newA;
		num++;
		break;
	}
	case 'S':case 's':
	{
		if (c + 1>2)return;
		newA = map[r][c];
		map[r][c] = map[r][c+1];
		map[r][c+1] = newA;
		num++;
		break;
	}
	case 'A':case 'a':
	{
		if (r - 1<0)return;
		newA = map[r][c];
		map[r][c] = map[r-1][c];
		map[r-1][c] = newA;
		num++;
		break;
	}
	case 'd':case 'D':
	{
		if(r+1>3)return;
		newA = map[r][c];
		map[r][c] = map[r+1][c];
		map[r+1][c] = newA;
		num++;
		break;
	}
	}
}
int main()//最後如果圖像遊戲如果拼完整後,數組的數會是從小到大的,以此來判別是否拼圖完整
{
	TCHAR sql[200];
	initgraph(850, 300);
	Initmap();
	PaintInit();
	
	while (1)
	{
		cleardevice();
		BeginBatchDraw();
		GameInit();
		outtextxy(650, 210, _T("原圖"));
		_stprintf(sql, _T("走了:%d"), num);
		outtextxy(500, 250, sql);
		EndBatchDraw();
		PlayGame();
	}
	getch();
	closegraph();
	system("pause");
	return

}

 


效果圖:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章