欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年11月03日 10:02:10   作者:MAX在碼字  
經(jīng)典的推箱子是一個的古老游戲,目的是在訓練你的邏輯思考能力。在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現(xiàn)箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務

話不多說

我們今天就來創(chuàng)造出屬于我們自己的《推箱子》,GOGOGO?。?!

直接開始吧

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

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");
	}
}

之后就是我們的游戲函數(shù),怎樣去用什么按鍵去控制我們的角色

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;
	}
}

再然后就是我們?nèi)绾稳ヅ袛嘤螒虻慕Y(jié)果

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

最后運行我們的主函數(shù)就行啦

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++;			//變換關(guān)卡
			if(cas==3)
				break;
		}
		keyDown();
		//system("cls");
	}
	closegraph();
	//printf("GameOver!\n");
	return 0;
}

其實代碼并不是很多,當然啦,如果同學們想更加完善,可以增加關(guān)卡設(shè)定,再優(yōu)化一下我們的開始界面以及游戲界面也是可以的,大家快去嘗試吧?。。?希望看完了的同學可以獲得自己想要的知識,也感謝大家的耐心觀看,在這里想得到大家一波關(guān)注,后續(xù)UP主還會發(fā)布更多的項目源碼以及學習資料,有什么問題可以回帖留言,我盡量回答。希望和大家一起學習進步!?。?/p>

到此這篇關(guān)于C語言 完整游戲項目推箱子詳細代碼的文章就介紹到這了,更多相關(guān)C語言 推箱子內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言貪吃蛇經(jīng)典小游戲

    C語言貪吃蛇經(jīng)典小游戲

    這篇文章主要為大家詳細介紹了C語言貪吃蛇經(jīng)典小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C/C++淺析鄰接表拓撲排序算法的實現(xiàn)

    C/C++淺析鄰接表拓撲排序算法的實現(xiàn)

    這篇文章主要介紹了C/C++對于鄰接表拓撲排序算法的實現(xiàn),鄰接表是圖的一種鏈式存儲方法,其數(shù)據(jù)結(jié)構(gòu)包括兩部分:節(jié)點和鄰接點
    2022-07-07
  • c++中深淺拷貝以及寫時拷貝的實現(xiàn)示例代碼

    c++中深淺拷貝以及寫時拷貝的實現(xiàn)示例代碼

    這篇文章主要給大家介紹了關(guān)于c++中深淺拷貝以及寫時拷貝實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • boost.asio框架系列之buffer函數(shù)

    boost.asio框架系列之buffer函數(shù)

    這篇文章介紹了boost.asio框架系列之buffer函數(shù),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C語言實現(xiàn)簡單的推箱子小游戲

    C語言實現(xiàn)簡單的推箱子小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Qt creator中項目的構(gòu)建配置和運行設(shè)置的步驟

    Qt creator中項目的構(gòu)建配置和運行設(shè)置的步驟

    使用 Qt Creator 集成開發(fā)環(huán)境構(gòu)建和運行程序是一件非常簡單的事情,一個按鈕或者一個快捷鍵搞定全部,本文主要介紹了Qt creator中項目的構(gòu)建配置和運行設(shè)置的步驟,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++命名空間using?namespace?std是什么意思

    C++命名空間using?namespace?std是什么意思

    namespace中文意思是命名空間或者叫名字空間,傳統(tǒng)的C++只有一個全局的namespace,下面這篇文章主要給大家介紹了關(guān)于C++命名空間using?namespace?std是什么意思的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 詳解C語言用malloc函數(shù)申請二維動態(tài)數(shù)組的實例

    詳解C語言用malloc函數(shù)申請二維動態(tài)數(shù)組的實例

    這篇文章主要介紹了詳解C語言用malloc函數(shù)申請二維動態(tài)數(shù)組的實例的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • C++二叉搜索樹模擬實現(xiàn)示例

    C++二叉搜索樹模擬實現(xiàn)示例

    本文主要介紹了C++二叉搜索樹模擬實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • C語言實現(xiàn)簡單學生成績管理系統(tǒng)

    C語言實現(xiàn)簡單學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單學生成績管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論