用c++实现推箱子

无聊时编程,推箱子是一个经典的c++题目,用w,a,s,d移动,效果自看

#include <stdio.h>     
#include <stdlib.h>    
#include <conio.h>     
int i,j; 
void draw_map(int map[10][12]); //声明画图函数
int main()
{
	system("title 李柏衡");
	char input;   
	int count=0;   //定义记分变量
	int map[10][12] = {
  {2,2,2,2,2,1,1,1,1,1,2,2},
		{1,1,1,1,2,1,0,0,0,1,1,2},
		{1,0,0,1,1,1,0,1,0,0,1,2},
		{1,0,4,3,3,3,3,3,1,0,1,1},
		{1,0,0,1,1,3,3,3,4,0,0,1},
		{1,0,0,0,0,4,1,1,4,1,0,1},
		{1,0,4,1,4,0,0,0,4,0,0,1},
		{1,1,0,6,0,1,1,1,4,1,0,1},
		{2,1,1,1,1,1,2,1,0,0,0,1},
		{2,2,2,2,2,2,2,1,1,1,1,1}
	};
	while (1)   //死循环,等待用户命令
	{
		system("CLS");
		for (i=0;i<12;i++)
		{
			printf("%d",i);
		}
		printf("\n");
		/*for (i=1;i<10;i++)
		{
			printf("%d\n",i);
		}*/
		printf("\n");
		draw_map(map);
		printf("当前得分:%d\n",count);
		//找初始位置
		for (i=0;i<10;i++)
		{
			for (j=0;j<12;j++)
			{
				if (map[i][j]==6||map[i][j]==9)
					break;
			}
			if (map[i][j]==6||map[i][j]==9)
				break;
		}
		printf("您的当前坐标(%d,%d)",i,j);        
		input = getch();   //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
		switch (input)
		{
		case 'w':
			//如果人前面是空地。  //0代表空地  6代表人  //3代表目的地
			if(map[i-1][j]==0)
			{
				map[i-1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
				if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
					map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
				else
					map[i][j]=0;    //否则原地ID修改为空地ID 。      
			}
			//如果人前面是目的地。
			else if((map[i-1][j]==3)||(map[i-1][j]==9))
			{
				map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
				if(map[i][j]==9) //如果原地也是目的地(ID为)。
					map[i][j]=3; //人走后把原地ID修改回目的地ID。
				else
					map[i][j]=0; //否则原地ID修改为为空地ID
			}
			//如果人前面是箱子。//4代表箱子   //7箱子进入目的地
			else if(map[i-1][j]==4)
			{
				//如果人前面是箱子,而箱子前面是空地。
				if (map[i-2][j]==0)
				{ 
					map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
					//下面是对箱子原地进行判断
					if(map[i-1][j]==7) //如果箱子原地为目的地。
						map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
					else
						map[i-1][j]=6; //否则&
C++ 推箱子游戏功能分析》 推箱子游戏是一种经典的益智游戏,通常包含一系列的方块和一个目标位置,玩家需要通过移动箱子到目标位置来完成关卡。在C++实现这个游戏,主要涉及以下几个关键功能: 1. **游戏界面与用户交互**: - 创建图形用户界面(GUI)或命令行接口,显示游戏地图、箱子、玩家角色以及目标位置。 - 用户输入处理,接收玩家对角色和箱子的移动指令。 2. **地图管理**: - 数据结构用于表示游戏地图,可能包括二维数组或邻接矩阵,记录每个格子的状态(空地、箱子、墙等)。 - 地图操作,如加载地图、更新地图状态和边界检查。 3. **角色和箱子模型**: - 实体类(如Player和Box)定义它们的行为和属性,如位置、方向等。 - 物理引擎模拟角色和箱子的移动,考虑碰撞检测和重力影响。 4. **逻辑与规则**: - 玩家不能直接推动箱子到障碍物上,只能放在空地上。 - 箱子只能被推到没有其他箱子的位置,不能挡住玩家或其他箱子的去路。 - 规定特定情况下,比如多个箱子叠在一起时,如何正确地推动它们。 5. **路径寻找算法**: - 使用搜索算法(如A*搜索、广度优先搜索)来找到从当前位置到目标位置的最优路径。 - 在有限步数内找到解决方案,防止无限循环。 6. **关卡设计与难度控制**: - 设计不同难度级别的关卡,根据地图大小、箱子数量和位置等因素变化。 - 随机生成关卡以增加挑战性和可玩性。 7. **游戏流程与循环**: - 游戏主循环,处理用户输入、更新游戏状态并绘制新界面。 - 结束条件,当所有箱子都被推到目标位置时,或者游戏失败(如无解、超时等)。 相关问题--: 1. 推箱子游戏中如何实现碰撞检测? 2. 如何用C++实现路径寻找算法? 3. 如何设计一个可扩展的关卡系统?
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值