C語言 完整遊戲項目推箱子詳細代碼

話不多說

我們今天就來創造出屬於我們自己的《推箱子》,GOGOGO!!!

直接開始吧

首先是我們用二維數組特定的數字描繪出這個地圖

int cas = 0;
int map[3][8][8] =
{
	1,1,1,1,1,1,1,1,
	1,3,4,0,0,4,3,1,
	1,0,1,3,0,1,0,1,
	1,0,1,4,0,1,0,1,
	1,0,0,5,0,0,0,1,
	1,0,1,0,0,1,0,1,
	1,3,4,0,0,4,3,1,
	1,1,1,1,1,1,1,1,
 
	1,1,1,1,1,1,1,1,
	1,3,4,0,0,4,3,1,
	1,0,1,3,0,1,0,1,
	1,0,1,4,0,1,0,1,
	1,3,4,5,0,0,0,1,
	1,0,1,0,0,1,0,1,
	1,3,4,0,0,4,3,1,
	1,1,1,1,1,1,1,1,
 
	1,1,1,1,1,1,1,1,
	1,3,4,0,0,4,3,1,
	1,0,1,3,0,1,0,1,
	1,0,1,4,0,1,0,1,
	1,3,4,5,0,4,3,1,
	1,0,1,0,0,1,0,1,
	1,3,4,0,0,4,3,1,
	1,1,1,1,1,1,1,1
};

然後來繪制我們的推箱子地圖

void  drawGraph() 
{
	for (int i = 0; i < 8; i++) 
	{
		for (int j = 0; j < 8; j++) 
		{
			//算貼圖的坐標
			int x = 50 * j;
			int y = 50 * i;
			switch (map[cas][i][j]) 
			{
			case 0:
				//一個漢字符號占用兩個位置
				//printf("  ");
				putimage(x, y, img + 0);
				break;
			case 1:
				putimage(x, y, img + 1);
				//printf("■");
				break;
			case 3:
				putimage(x, y, img + 2);
				//printf("☆");
				break;
			case 4:
				putimage(x, y, img + 3);
				//printf("★");
				break;
			case 5:
			case 8:
				putimage(x, y, img + 4);
				//printf("人");
				break;
			case 7:
				putimage(x, y, img + 5);
				//printf("●");
				break;
			}
		}
		//printf("\n");
	}
}

之後就是我們的遊戲函數,怎樣去用什麼按鍵去控制我們的角色

void keyDown() 
{
	int userKey = _getch();	//不可見輸入
	//定位:找到人的位置
	int i = 0;
	int j = 0;
	for (i = 1; i < 8; i++) 
	{
		for (j = 1; j < 8; j++) 
		{
			if (map[cas][i][j] == 5 || map[cas][i][j] == 8) 
			{
				goto NEXT;
			}
		}
	}
	NEXT:
 
	//我們這個遊戲用什麼按鍵去玩
	switch (userKey) 
	{
	case 'W':
	case 'w':
	case 72:
		if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3) 
		{
			map[cas][i][j] -= 5;
			map[cas][i - 1][j] += 5;
		}
		if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7) 
		{
			if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3) 
			{
				map[cas][i][j] -= 5;
				map[cas][i - 1][j] += 1;
				map[cas][i - 2][j] += 4;
			}
		}
		break;
	case 's':
	case 'S':
	case 80:
		if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3)
		{
			map[cas][i][j] -= 5;
			map[cas][i + 1][j] += 5;
		}
		if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7)
		{
			if (map[cas][i + 2][j] == 0 || map[cas][i +2][j] == 3)
			{
				map[cas][i][j] -= 5;
				map[cas][i + 1][j] += 1;
				map[cas][i + 2][j] += 4;
			}
		}
		break;
	case 'a':
	case 'A':
	case 75:
		if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3)
		{
			//a+=1  a=a+1 復合賦值運算符
			map[cas][i][j] -= 5;
			map[cas][i][j - 1] += 5;
		}
		if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7)
		{
			if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3)
			{
				map[cas][i][j] -= 5;
				map[cas][i][j - 1] += 1;
				map[cas][i][j - 2] += 4;
			}
		}
		break;
	case 'd':
	case 'D':
	case 77:
		if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3)
		{
			map[cas][i][j] -= 5;
			map[cas][i][j + 1] += 5;
		}
		if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7)
		{
			if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3)
			{
				map[cas][i][j] -= 5;
				map[cas][i][j + 1] += 1;
				map[cas][i][j + 2] += 4;
			}
		}
		break;
	}
}

再然後就是我們如何去判斷遊戲的結果

//勝負的判斷:
int gameOver() 
{
	//地圖上沒有箱子就可以結束
	for (int i = 0; i < 8; i++) 
	{
		for (int j = 0; j < 8; j++) 
		{
			if (map[cas][i][j] == 4) 
			{
				return 0;
			}
		}
	}
	return 1;
}

最後運行我們的主函數就行啦

int main() 
{
	loadResource();
	mciSendString("open 1.mp3", 0, 0, 0);
	mciSendString("play 1.mp3 repeat", 0, 0, 0);
	initgraph(50 * 8, 50 * 8);
	while (1) 
	{
		drawGraph();
		if (gameOver())
		{
			cas++;			//變換關卡
			if(cas==3)
				break;
		}
		keyDown();
		//system("cls");
	}
	closegraph();
	//printf("GameOver!\n");
	return 0;
}

其實代碼並不是很多,當然啦,如果同學們想更加完善,可以增加關卡設定,再優化一下我們的開始界面以及遊戲界面也是可以的,大傢快去嘗試吧!!! 希望看完瞭的同學可以獲得自己想要的知識,也感謝大傢的耐心觀看,在這裡想得到大傢一波關註,後續UP主還會發佈更多的項目源碼以及學習資料,有什麼問題可以回帖留言,我盡量回答。希望和大傢一起學習進步!!!

到此這篇關於C語言 完整遊戲項目推箱子詳細代碼的文章就介紹到這瞭,更多相關C語言 推箱子內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: