最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

話不多說

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

直接開始吧

首先是我們用二維數(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++) 
		{
			//算貼圖的坐標(biāo)
			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 復(fù)合賦值運(yùn)算符
			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é)果

//勝負(fù)的判斷:
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;
}

最后運(yùn)行我們的主函數(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;
}

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

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

相關(guān)文章

  • 舉例講解C語言鏈接器的符號解析機(jī)制

    舉例講解C語言鏈接器的符號解析機(jī)制

    鏈接器的工作主要分為兩個階段:符號解析和重定位,符號解析的功能是將每個模塊符號引用綁定到一個確切的符號定義,這里我們就來舉例講解C語言鏈接器的符號解析機(jī)制
    2016-05-05
  • C++17之std::visit的具體使用

    C++17之std::visit的具體使用

    本文主要介紹了C++17之std::visit的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++保存txt文件實現(xiàn)方法代碼實例

    C++保存txt文件實現(xiàn)方法代碼實例

    這篇文章主要介紹了C++保存txt文件實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 使用C++中的ADO對SQLite進(jìn)行增刪改查

    使用C++中的ADO對SQLite進(jìn)行增刪改查

    本文將介紹如何使用C++的ADO (ActiveX Data Objects)對SQLite數(shù)據(jù)庫進(jìn)行增刪改查操作,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-06-06
  • C++基于對話框的程序的框架實例

    C++基于對話框的程序的框架實例

    這篇文章主要介紹了C++基于對話框的程序的框架,以實例形式講述了C++對話框程序框架,有助于深入理解基于C++的Windows程序設(shè)計,需要的朋友可以參考下
    2014-10-10
  • OpenCV實現(xiàn)摳圖工具

    OpenCV實現(xiàn)摳圖工具

    這篇文章主要為大家詳細(xì)介紹了OpenCV實現(xiàn)摳圖工具,文中示例代碼介紹的非常詳細(xì),具有一定為大家詳細(xì)的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ 多重繼承和虛擬繼承對象模型、效率分析

    C++ 多重繼承和虛擬繼承對象模型、效率分析

    本文簡單介紹多態(tài)和多重繼承、虛擬繼承的基本概念。隨后重點分析了C++中對象模型之間的差異和運(yùn)行效率
    2014-08-08
  • 基于linux下獲取時間函數(shù)的詳解

    基于linux下獲取時間函數(shù)的詳解

    本篇文章是對linux下獲取時間的函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • opengl繪制五星紅旗

    opengl繪制五星紅旗

    這篇文章主要為大家詳細(xì)介紹了opengl繪制五星紅旗的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C++實現(xiàn)LeetCode(111.二叉樹的最小深度)

    C++實現(xiàn)LeetCode(111.二叉樹的最小深度)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(111.二叉樹的最小深度),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

乳山市| 宜黄县| 新郑市| 曲水县| 绥宁县| 茂名市| 东宁县| 康乐县| 琼海市| 濮阳县| 林芝县| 临猗县| 长汀县| 伊吾县| 遂川县| 汝南县| 灵武市| 永新县| 松溪县| 牙克石市| 巫山县| 宜兴市| 重庆市| 汉沽区| 湾仔区| 中江县| 普兰县| 佛山市| 阜宁县| 新丰县| 蒙自县| 庆城县| 灵山县| 乌拉特后旗| 庆云县| 张北县| 当雄县| 徐州市| 错那县| 大冶市| 平顶山市|