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

基于C++寫一個推箱子小游戲

 更新時間:2023年09月14日 09:16:36   作者:強國豪,林中霖  
這篇文章主要為大家詳細介紹了基于C++寫一個推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

上代碼:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int  map[2][7][8] =
{
	//0:空的 1:■ :墻
	//3:☆ 4:★  //目的地和箱子
	//5:※		  //人
	//7:⊙		  //目的(3)和箱子(4)在一起
	//8:※		  //人(5)和目的(3)在一起
	//為讓多種情況使用一種算法
	{
	1, 1, 1, 1, 1, 1, 1, 1,
	1, 0, 0, 0, 0, 0, 0, 1,
	1, 3, 1, 0, 1, 1, 3, 1,
	1, 4, 0, 0, 4, 0, 3, 1,
	1, 0, 1, 0, 1, 1, 4, 1,
	1, 0, 0, 5, 0, 0, 0, 1,
	1, 1, 1, 1, 1, 1, 1, 1
	},
	{
		1, 1, 1, 1, 1, 1, 1, 1,
		1, 0, 0, 0, 0, 0, 0, 1,
		1, 3, 1, 0, 1, 1, 3, 1,
		1, 3, 4, 5, 4, 0, 3, 1,
		1, 4, 1, 0, 1, 1, 4, 1,
		1, 0, 0, 0, 0, 0, 0, 1,
		1, 1, 1, 1, 1, 1, 1, 1
	}
};
int cas = 0;	//為0表示第一關
//記錄每一關的箱子數(shù) 或者是項目和目的在一起的總數(shù)
int boxSum[2] = {3,4};
//地圖繪圖
void drawMap()
{
	for (int i = 0; i < 7; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			if (j == 0)
				printf("\t\t");
			switch (map[cas][i][j])
			{
				//	//0:空的 1:■ :墻
			case 0:
				printf("  ");
				break;
			case 1:
				printf("■");
				break;
				//3:☆ 4:★  //目的地和箱子
			case 3:
				printf("☆");
				break;
			case 4:
				printf("★");
				break;
				//5:※		  //人
			case 5:
			case 8:
				printf("※");
				break;
			case 7:
				printf("⊙");
				break;
				//7:⊙		  //目的(3)和箱子(4)在一起
				//8:※		  //人(5)和目的(3)在一起
			}
		}
		printf("\n");
	}
}
//按鍵處理
void keyDown()
{
	//分析按鍵過程
	//定位人在哪里
	//人有兩種情況:第一個是:人,第二個:人站在目的上
	int i, j;
	for (i = 0; i < 7; i++)
	{
		for (j = 0; j < 8; j++)
		{
			if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
			{
				break;
			}
		}
		if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
		{
			break;
		}
	}
	char ch = _getch();	//看不見的字符輸入,+頭文件 conio.h
	switch (ch)
	{
		//72 80   75 77
	case 'w':
	case 'W':
	case 72:
		//下一個地方等于空地或者是目的 能走
		if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)來了
			map[cas][i - 1][j] += 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] -= 5;
		}
		//如果下一個是箱子,要進一步判斷能走
		//注意點:箱子兩種狀態(tài):箱子,箱子和目的在一起
		else 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 - 2][j] += 4;
				//箱子的位置:箱子(-4)走了 人來(+5)
				map[cas][i - 1][j] += 1;
				//原來的地方人走了
				map[cas][i][j] -= 5;
			}
		}
		break;
	case 's':
	case 'S':
	case 80:
		//下一個地方等于空地或者是目的 能走
		if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)來了
			map[cas][i + 1][j] += 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] -= 5;
		}
		else 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 + 2][j] += 4;
				//箱子的位置:箱子(-4)走了 人來(+5)
				map[cas][i + 1][j] += 1;
				//原來的地方人走了
				map[cas][i][j] -= 5;
			}
		}
		break;
	case 'a':
	case 'A':
	case 75:
		//下一個地方等于空地或者是目的 能走
		if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)來了
			map[cas][i][j - 1] = map[cas][i][j - 1] + 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] = map[cas][i][j] - 5;
			//j+=5  j=j+5
		}
		else 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 - 2] += 4;
				//箱子的位置:箱子(-4)走了 人來(+5)
				map[cas][i][j - 1] += 1;
				//原來的地方人走了
				map[cas][i][j] -= 5;
			}
		}
		break;
	case 'D':
	case 'd':
	case 77:
		//下一個地方等于空地或者是目的 能走
		if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3)
		{
			//3+5=8 :表示目的和人在一起
			//新地方(map[i-1][j])人(5)來了
			map[cas][i][j + 1] += 5;
			//老地方(map[i][j])人(5)走了
			map[cas][i][j] -= 5;
		}
		//下一個地方是箱子,判斷箱子的下一個地方是不是目的和空地
		else 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 + 2] += 4;
				//箱子的位置:箱子(-4)走了 人來(+5)
				map[cas][i][j + 1] += 1;
				//原來的地方人走了
				map[cas][i][j] -= 5;
			}
		}
		break;
	}
}
//勝負判斷
//用什么判斷勝負: 箱子到達目的的個數(shù)
int gameOver()
{
	int count = 0;
	//所有的地方找一遍
	for (int i = 0; i < 7; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			if (map[cas][i][j] == 7)
				count++;
		}
	}
	return count;
}
//箱子數(shù)是零的時候也是勝利
int gameOver2()
{
	int count = 3;
	//所有的地方找一遍
	for (int i = 0; i < 7; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			if (map[cas][i][j] == 3)
				count--;
		}
	}
	return count;
}
int main()
{
	while (1)
	{
		printf("\n\t用方向鍵或w a s d鍵移動※推動★進入☆\n",cas+1);
		printf("\n\t\t 共兩關 第 %d 關\n",cas+1);
		drawMap();
		if (gameOver() == boxSum[cas])
		{
			cas++;
			if (cas == 2)
				break;
			else
			    printf("\n\t\t 該關 OK!按任一鍵進繼續(xù)\n");	
		}
		keyDown();
		system("cls");
	}
	printf("游戲結束!");
	printf("\n");
	system("pause");
	return 0;
}

到此這篇關于基于C++寫一個推箱子小游戲的文章就介紹到這了,更多相關C++推箱子游戲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言撲克牌游戲示例

    C語言撲克牌游戲示例

    大家好,本篇文章主要講的是C語言撲克牌游戲示例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++超詳細探究new/delete的使用

    C++超詳細探究new/delete的使用

    這篇文章主要介紹了C++中new與deleted關鍵字的使用,new在動態(tài)內存中為對象分配空間并返回一個指向該對象的指針;delete接受一個動態(tài)對象的指針, 銷毀該對象, 并釋放與之關聯(lián)的內存
    2022-07-07
  • vc++實現(xiàn)的tcp socket客戶端和服務端示例

    vc++實現(xiàn)的tcp socket客戶端和服務端示例

    這篇文章主要介紹了vc++實現(xiàn)的tcp socket客戶端和服務端示例,需要的朋友可以參考下
    2014-03-03
  • C語言中傳值與傳指針的介紹與區(qū)別

    C語言中傳值與傳指針的介紹與區(qū)別

    這篇文章主要給大家介紹了關于C語言中傳值與傳指針的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Qt實現(xiàn)右擊菜單項

    Qt實現(xiàn)右擊菜單項

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)右擊菜單項,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++實現(xiàn)將圖片轉換為馬賽克效果的示例代碼

    C++實現(xiàn)將圖片轉換為馬賽克效果的示例代碼

    這篇文章主要為大家詳細介紹了C++如何實現(xiàn)將圖片轉換為馬賽克效果,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-01-01
  • Linux下用Valgrind做檢查(防止內存泄露)

    Linux下用Valgrind做檢查(防止內存泄露)

    Valgrind是一款基于模擬linux下的程序調試器和剖析器的軟件套件,可以運行于x86, amd64和ppc32架構上。valgrind包含一個核心,它提供一個虛擬的CPU運行程序,還有一系列的工具,它們完成調試,剖析和一些類似的任務
    2014-01-01
  • 基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)一個簡單的靜態(tài)通訊錄,文中的示例代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • 詳解C/C++實現(xiàn)各種字符轉換方法合集

    詳解C/C++實現(xiàn)各種字符轉換方法合集

    這篇文章主要為大家詳細介紹了C/C++中實現(xiàn)各種字符轉換的方法,文中的示例代碼講解詳細,對我們學習C++具有一定借鑒價值,需要的可以參考一下
    2022-09-09
  • Qt繪制時鐘效果

    Qt繪制時鐘效果

    這篇文章主要為大家詳細介紹了Qt繪制時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論