推箱子(c++)

 一共设计了三关

所有图像全部是用图片搞出来的

 

 

 

 

#include<stdio.h>
#include<easyx.h>
#include<conio.h>
#include<graphics.h>
#include<cstring>
#define _CRT_SECURE_NO_WARNINGS
/*1.地图打印
* 2.角色移动
*	1.按键处理 (动的只能是人和被人推动的箱子)
*	2.找到人的位置,人怎么动(数组操作)
* 3.多关卡设置
*	1.关卡完成设置
*	2.进入下一关卡设置
* 4.图片设计
*	1.角色设置    4
*	2.箱子        2
*	3.目的        3
*	4.墙          1
*	5.地板        0
*/
IMAGE img[6];//全局变量
HWND hnd = NULL;
int cos = 0,grade=0;//关卡设置
int map[3][10][10]//地图
{
	1,1,1,1,1,1,1,1,1,1,
	1,0,0,0,3,0,0,0,0,1,
	1,0,0,0,0,0,0,1,0,1,
	1,0,1,0,0,0,1,0,0,1,
	1,0,0,0,4,0,0,0,0,1,
	1,0,1,0,0,0,0,1,0,1,
	1,0,1,1,0,1,0,1,0,1,
	1,0,2,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,1,
	1,1,1,1,1,1,1,1,1,1,

	1,1,1,1,1,1,1,1,1,1,
	1,0,0,0,3,0,0,0,0,1,
	1,0,2,0,0,0,0,1,0,1,
	1,0,1,1,0,0,1,0,0,1,
	1,0,0,0,4,0,0,0,0,1,
	1,0,1,0,0,0,1,1,0,1,
	1,0,1,1,0,1,1,1,0,1,
	1,0,0,0,2,0,0,0,0,1,
	1,3,0,0,0,0,0,0,0,1,
	1,1,1,1,1,1,1,1,1,1,

	1,1,1,1,1,1,1,1,1,1,
	1,0,0,0,0,0,0,0,0,1,
	1,0,0,2,0,0,0,1,3,1,
	1,0,1,0,0,0,1,0,0,1,
	1,3,0,0,4,0,0,0,0,1,
	1,0,1,0,0,0,0,1,0,1,
	1,0,1,1,0,1,2,1,0,1,
	1,0,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,0,0,0,1,
	1,1,1,1,1,1,1,1,1,1
};
void load()//加载图像
{
	for (int i = 0; i < 6; i++)
	{
		char s[20] = "";
		sprintf(s, "%d.jpg", i);//强制类型转换,只能读取字符串
		loadimage(img+i,s,64,64);//64,64是缩放
	}
}
void drawmap()//画地图
{
	int x, y;
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			//贴照片与坐标有关
			x = 64 * j;
			y = 64 * i;
			switch (map[cos][i][j])
			{
			case 0://地板
				putimage(x, y, img + 0);
				break;
			case 1://墙
				putimage(x, y, img + 1);
				break;
			case 2://箱子
				putimage(x, y, img + 2);
				break;
			case 3://目的地
				putimage(x, y, img + 3);
				break;
			case 4://人物
				putimage(x, y, img + 4);
				break;
			case 7://人站在目的地
				putimage(x, y, img + 4);
				break;
			case 5://箱子到达目的地
				putimage(x, y, img + 5);
				break;
			}
		}
	}
}
void keydown()
{
	int x, y,i,j;//每一次都要找,找到人的坐标
	for (x = 0; x < 10; x++)
	{
		for (y = 0; y < 10; y++)
		{
			if (map[cos][x][y] == 4||map[cos][x][y]==7)
			{
				i = x;
				j = y;
				break;
			}
			if (map[cos][x][y] == 4 || map[cos][x][y] == 7)
				break;
		}
	}
	//按键处理
	char userkey=0;
	userkey=_getch();//不可见输入
	switch (userkey)//是地板或者是目的地的情况可以移动
		{
		case 'w':
		case 'W':
		case 72:
			if (map[cos][i - 1][j] == 0 || map[cos][i - 1][j] == 3)
			{
				map[cos][i][j] -= 4;
				map[cos][i - 1][j] += 4;
				grade++;
			}
			if (map[cos][i - 1][j] == 2 )//移动箱子
			{
				if (map[cos][i - 2][j] == 0)//旁边是地板的情况
				{
					map[cos][i - 2][j] += 2;
					map[cos][i - 1][j] += 2;//变成人
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
				if (map[cos][i - 2][j] == 3)//旁边是目的地
				{
					map[cos][i - 2][j] = 5;
					map[cos][i - 1][j] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
			}
			break;
		case 's':
		case 'S':
		case 80:
			if (map[cos][i + 1][j] == 0 || map[cos][i + 1][j] == 3)//人移动
			{
				map[cos][i][j] -= 4;
				map[cos][i + 1][j] += 4;
				grade++;
			}
			if (map[cos][i + 1][j] == 2)//移动箱子
			{
				if (map[cos][i + 2][j] == 0)//旁边是地板的情况
				{
					map[cos][i + 2][j] += 2;
					map[cos][i + 1][j] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
				if (map[cos][i+2][j ] == 3)//旁边是目的地
				{
					map[cos][i+2][j] = 5;
					map[cos][i+1][j] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
			}
			break;
		case 'a':
		case 'A':
		case 75:
			if (map[cos][i][j - 1] == 0 || map[cos][i][j - 1] == 3)
			{
				map[cos][i][j] -= 4;
				map[cos][i][j - 1] += 4;
				grade++;
			}
			if (map[cos][i ][j-1] == 2)//移动箱子
			{
				if (map[cos][i ][j-2] == 0)//旁边是地板的情况
				{
					map[cos][i][j-2] += 2;
					map[cos][i][j-1] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
				if (map[cos][i][j - 2] == 3)//旁边是目的地
				{
					map[cos][i][j - 2] = 5;
					map[cos][i][j - 1] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
			}
			break;
		case 'd':
		case 'D':
		case 77:
			if (map[cos][i][j + 1] == 0 || map[cos][i][j + 1] == 3)
			{
				map[cos][i][j] -= 4;
				map[cos][i][j + 1] += 4;
				grade++;
			}
			if (map[cos][i][j+1] == 2)//移动箱子
			{
				if (map[cos][i][j+2] == 0)//旁边是地板的情况
				{
					map[cos][i][j +2] += 2;
					map[cos][i][j + 1] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
				if (map[cos][i][j + 2] == 3)//旁边是目的地
				{
					map[cos][i][j + 2] = 5;
					map[cos][i][j + 1] += 2;
					map[cos][i][j] -= 4;//人物变成地板
					grade++;
				}
			}
			break;
		}
}
int gameover()
{
	int i, j,sign=0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (map[cos][i][j] == 3)
			{
				sign = 1;
				return 1;
			}
		}
	}
	return 0;
}
void show()//显示分数
{
	char str[10000];//窗口只能展示字符串,将整型转化成字符串
	sprintf(str, "%d", grade);
	setbkmode(TRANSPARENT);//设成透明模式
	settextstyle(15, 10, "宋体");//设置字体
	settextcolor(BLACK);
	SetWindowText(hnd, "推箱子");
	outtextxy(540, 20, "步数:");
	outtextxy(600, 20, str);
}
void show1()//弹出窗口
{
	if (cos < 2)
	{
		MessageBox(NULL, "恭喜你,你赢了,请按空格键继续。", "推箱子", MB_OKCANCEL);
	}
	if (cos == 2)
	{
		MessageBox(NULL, "恭喜你,你通关了", "推箱子", MB_OKCANCEL);
	}
}
int main()
{
	initgraph(640, 640);
	cleardevice();
	while (1)
	{
		load();
		drawmap();
		show();
		if (gameover() == 0)
		{
			show1();
			cos++;
			grade = 0;
			if (cos == 3)
				break;
		}
		keydown();
	}
}

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
DEVC是一种实现推箱子小游戏的开发环境。在引用中,给出了详细介绍和示例代码,可以作为参考。在推箱子游戏中,玩家需要通过移动来推动箱子到目标位置。在引用中提供了一部分代码示例,展示了当玩家移动一步时,箱子和目标位置的变化。具体代码如下: ``` else if(a[x+1][y]=='O') { if(a[x+2][y]==' ') { a[x][y]=' '; x++; a[x][y]='S'; a[x+1][y]='O'; } else if(a[x+2][y]=='*') { a[x][y]=' '; x++; a[x][y]='S'; a[x+1][y]=' '; cnt++; } } ``` 这段代码展示了当玩家向下移动时,如果目标位置是空地,那么箱子和玩家都会向下移动,并且箱子会出现在新的目标位置上。如果目标位置是已经有箱子的地方,那么箱子会被推到下一个空地,并且计数器会增加。而DEVC开发环境可以帮助开发者更方便地实现推箱子游戏的逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [DEVC++实现推箱子小游戏](https://download.csdn.net/download/weixin_38728464/12743680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [如何用DevC++推箱子?(2)](https://blog.csdn.net/xiaohubushihu/article/details/128430031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值