精华内容
下载资源
问答
  • C++推箱子游戏代码

    2019-02-11 21:06:21
    C++推箱子完整代码,包含背景音乐播放,退步,跳过本关,更换背景颜色等多种功能,下载绝不会后悔。
  • C++推箱子游戏最全源代码,游戏开发初学者必备可以进行扩展
  • C++ 推箱子代码

    2009-08-14 10:52:30
    提供一个小游戏————推箱子 的源代码 希望大家仔细研究代码 成为自己都东西
  • C++推箱子游戏

    2012-03-01 21:50:50
    这个一个C++控制台推箱子游戏,游戏自动生成地图,做这个游戏必须要懂BFS,因为每次生成地图的时候要用双层BFS去检验这个地图能完成。 不了解BFS的,去查查BFS的相关资料。
  • C++ 推箱子游戏

    2019-10-26 11:02:26
    C语言实现推箱子游戏 更新自上一个文章:https://blog.csdn.net/MeZhangBorui/article/details/102643565 //导入函数库 #include <cstdio> #include <cstdlib> #include <cstring> #include...

    C语言实现推箱子游戏

    更新自上一个文章https://blog.csdn.net/MeZhangBorui/article/details/102643565

    //导入函数库
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <conio.h>
    using namespace std;
    
    //宏定义
    #define WIDTH 10
    #define HEIGHT 11
    
    //定义地图数组,二维数组有两个维度,而地图也是二维的矩形
    int map[HEIGHT][WIDTH] = {
    	{0,0,1,1,1,1,1,1,0,0},
    	{0,0,1,0,0,2,0,1,0,0},
    	{1,1,1,0,0,0,0,1,1,1},
    	{1,4,3,0,3,0,3,0,4,1},
    	{1,1,1,0,0,0,0,0,0,1},
    	{0,0,1,0,0,0,0,0,0,1},
    	{1,1,1,1,0,0,1,0,0,1},
    	{1,4,0,0,0,0,1,3,0,1},
    	{1,1,1,1,1,1,1,0,0,1},
    	{1,4,0,0,0,0,0,0,0,1},
    	{1,1,1,1,1,1,1,1,1,1} 
    };
    
    int start_map[HEIGHT][WIDTH] = {
    	{0,0,1,1,1,1,1,1,0,0},
    	{0,0,1,0,0,2,0,1,0,0},
    	{1,1,1,0,0,0,0,1,1,1},
    	{1,4,3,0,3,0,3,0,4,1},
    	{1,1,1,0,0,0,0,0,0,1},
    	{0,0,1,0,0,0,0,0,0,1},
    	{1,1,1,1,0,0,1,0,0,1},
    	{1,4,0,0,0,0,1,3,0,1},
    	{1,1,1,1,1,1,1,0,0,1},
    	{1,4,0,0,0,0,0,0,0,1},
    	{1,1,1,1,1,1,1,1,1,1} 
    };
    
    //人的位置,在二维地图中,我们可以用坐标表示一个人的位置,就好比经纬度
    int x, y;
    
    //箱子的个数,推箱子肯定要有箱子嘛。
    int boxs;
    
    void initData(){
    	int i, j;
    	
    	//加载数据时让用户等待,一般情况加载数据比较快
    	printf("游戏加载中,请稍后........."); 
    	
    	x = -1;
    	y = -1;
    	boxs = 0;
    	
    	//遍历地图中的数据
    	for(i = 0; i < HEIGHT; i++){
    		for(j = 0; j < WIDTH; j++){
    			//遍历到2(人)时,记录人的坐标。x, y是前面定义的全局变量
    			if(map[i][j] == 2){
    				x = j;
    				y = i;
    			} 
    			//遍历到3时,箱子的数目增加。boxs是前面定义的全局变量 
    			if(map[i][j] == 3){
    				boxs++;
    			}
    		}
    	} 
    }
    
    void drawMap(){
    	int i, j;
    	for(i = 0; i < HEIGHT; i++){
    		for(j = 0; j < WIDTH; j++){
    			switch(map[i][j]){
    				case 0:
    					printf("  ");
    					break;
    				case 1:
    					printf("■");
    					break;
    				case 2:
    					printf("♀");
    					break;
    				case 3:
    					printf("◆");
    					break;
    				case 4:
    					printf("●");
    					break;
    				case 5:
    					printf("★");
    					break; 
    			}
    		}
    		printf("\n");
    	}
    }
    
    void moveUp(){
    	//定义变量存放人物上方的坐标
    	int ux, uy; 
    	
    	//当上方没有元素时,直接return	(其实人不可能在边缘)
    	if(y == 0){
    		return;
    	}
    	
    	//记录上方坐标,x为横,y为纵,所有ux = x, uy = y - 1;
    	ux = x;
    	uy = y - 1; 
    	
    	//上方为已完成的箱子
    	if(map[uy][ux] == 5){
    		return;
    	} 
    	//假设上方为墙,直接return,这个和上面的判断可以合在一起,这里为了看清楚分开写 
    	if(map[uy][ux] == 1){
    		return;
    	}
    	
    	//假设上方为箱子
    	if(map[uy][ux] == 3){
    		//判断箱子上方是否为墙 
    		if(map[uy - 1][ux] == 1){
    			return;
    		}
    		
    		if(map[uy - 1][ux] == 3){
    			//判断箱子上边是否为箱子 
    			return;
    		}
    		
    		//判断箱子上方是否为终点
    		if(map[uy - 1][ux] == 4){
    			//将箱子上面内容赋值为5★ 
    			map[uy - 1][ux] = 5;
    			map[uy][ux] = 0;
    					
    			//箱子的数目减1	
    			boxs--; 
    		}else{
    			//移动箱子
    			map[uy - 1][ux] = 3;
    		}
    	}
    	//当上面几种return的情况都没遇到,人肯定会移动,移动操作如下
    	map[y][x] = 0;
    	map[uy][ux] = 2;
    	//更新人的坐标
    	y = uy; 
    } 
    
    void moveLeft(){
    	//定义变量存放人物左边的坐标
    	int lx, ly; 
    	
    	//当左边没有元素时,直接return	
    	if(x == 0){
    		return;
    	}
    	
    	//记录左边坐标
    	lx = x - 1;
    	ly = y; 
    	
    	//左边为已完成方块
    	if(map[ly][lx] == 5){
    		return;
    	} 
    	
    	//假设左边为墙,直接return 
    	if(map[ly][lx] == 1){
    		return;
    	}
    	
    	//假设左边为箱子
    	if(map[ly][lx] == 3){
    		//判断箱子左边是否为墙 
    		if(map[ly][lx - 1] == 1){
    			return;
    		}
    		
    		if(map[ly][lx - 1] == 3){
    			//判断箱子左边是否为箱子 
    			return;
    		}
    	
    		//判断箱子左边是否为球
    		if(map[ly][lx - 1] == 4){
    			//将箱子左边内容赋值为5★ 
    			map[ly][lx - 1] = 5;
    			map[ly][lx] = 0;
    		
    			//箱子的数目减1 
    			boxs--; 
    		}else{
    			//移动箱子 
    			map[ly][lx - 1] = 3; 
    		}
    	}
    	
    	
    	
    	map[y][x] = 0;
    	map[ly][lx] = 2;
    	x = lx; 
    }
    
    void moveDown(){
    	//定义变量存放人物下方的坐标
    	int dx, dy; 
    	
    	//当下方没有元素时,直接return	
    	if(y == HEIGHT - 1){
    		return;
    	}
    	
    	//记录下方坐标
    	dx = x;
    	dy = y + 1; 
    	
    	//下方为已完成方块
    	if(map[dy][dx] == 5){
    		return;
    	} 
    	
    	//假设下方为墙,直接return 
    	if(map[dy][dx] == 1){
    		return;
    	}
    	
    	//假设下方为箱子
    	if(map[dy][dx] == 3){
    		//判断箱子下方是否为墙 
    		if(map[dy + 1][dx] == 1){
    			return;
    		}
    		
    		if(map[dy + 1][dx] == 3){
    			//判断箱子下边是否为箱子 
    			return;
    		}
    		
    		//判断箱子下方是否为球
    		if(map[dy + 1][dx] == 4){
    			//将箱子下面内容赋值为5★ 
    			map[dy + 1][dx] = 5;
    			map[dy][dx] = 0;
    			
    			//箱子的数目减1 
    			boxs--; 
    		}else{
    			//移动箱子
    			map[dy + 1][dx] = 3; 
    		}
    	}
    	map[y][x] = 0;
    	map[dy][dx] = 2;
    	y = dy; 
    }
    
    void moveRight(){
    	//定义变量存放人物右边的坐标
    	int rx, ry; 
    	
    	//当右边没有元素时,直接return	
    	if(x == WIDTH - 1){
    		return;
    	}
    	
    	//记录右边坐标
    	rx = x + 1;
    	ry = y; 
    	
    	//右边为已完成方块
    	if(map[ry][rx] == 5){
    		return;
    	} 
    	
    	//假设右边为墙,直接return 
    	if(map[ry][rx] == 1){
    		return;
    	}
    	
    	//假设右边为箱子
    	if(map[ry][rx] == 3){
    		//判断箱子右边是否为墙 
    		if(map[ry][rx + 1] == 1){
    			return;
    		}
    		
    		if(map[ry][rx + 1] == 3){
    			//判断箱子右边是否为箱子 
    			return;
    		}
    		
    		//判断箱子左边是否为球
    		if(map[ry][rx + 1] == 4){
    			//将箱子右边内容赋值为5★ 
    			map[ry][rx + 1] = 5;
    			map[ry][rx] = 0;
    			
    			//箱子的数目减1 
    			boxs--; 
    		}else{
    			//移动箱子 
    			map[ry][rx + 1] = 3; 
    		}
    	}
    	map[y][x] = 0;
    	map[ry][rx] = 2;
    	x = rx; 
    }
    
    int main(int argc, char *argv[]) {
    	char direction;		//存储键盘按的方向 
    	initData();			//初始化一些数据
    	
    	//开始游戏的循环,这里是个死循环,每按一次按钮循环一次
    	while(1){
    		//每次循环的开始清除屏幕
    		system("cls");
    		//绘画地图
    		drawMap();
    
    		//判断,当boxs的数量0时,!0为真,然后走break跳出循环(结束游戏) 
    		if(!boxs){
    			break;
    		}
    		
    		//键盘输入方向,这里使用getch,因为getch读取字符不会显示在屏幕上
    		direction = getch();
    		
    		//用switch判断用户输入的方向
    		switch(direction){
    			case 'w':
    				//按w时,调用向上移动函数
    				moveUp();
    				break;
    			case 'a':
    				//按a时,调用向左移动函数
    				moveLeft(); 
    				break;
    			case 's':
    				moveDown();
    				break;
    			case 'd':
    				moveRight();
    				break; 
    			case 'W':
    				moveUp();
    				break;
    			case 'A':
    				moveLeft();
    				break;
    			case 'S':
    				moveDown();
    				break;
    			case 'D':
    				moveRight();
    				break;
    			case 72:
    				//72为上方向键键值
    				moveUp();
    				break;
    			case 80:
    				//80为下方向键值
    				moveDown();
    				break;
    			//75为左,77为右
    			case 75:
    				moveLeft();
    				break;
    			case 77:
    				moveRight();
    				break;
    			case 'R':
    				//因为要重置地图 
    				memcpy(map,start_map,sizeof(start_map));
    				initData();	
    				break;
    			case 'r':
    				//因为要重置地图 
    				memcpy(map,start_map,sizeof(start_map));
    				initData();	
    				break;
    		}
    	}  
    	//当跳出循环时,运行该语句,游戏结束
    	printf("\n** 恭喜你完成游戏!**\n\n** 请按任意键退出!**");
    	system("pause > .tmp");
    	system("del .tmp");
    	return 0;
    }
    

    更新日志

    1、重新写地图。

    2、intData()里的for循环,HEIGHT遍历和WIDTH遍历替换,因为非正方形的地图需要先访问行,再访问行里的列。

    3、moveUpmoveDownmoveRightmoveLeft有BUG。在推箱子的时候,如果把箱子推向箱子,会覆盖箱子。在移动的时候需要先检测是否是箱子。

    4、新添加Rr重置地图。新#include <cstring>导入复制数组的函数memcpy();,并定义数组map用来存储现在的地图,start_map用来定义初始数组。重置时把map赋值为start_map。代码:memcpy(map,start_map,sizeof(start_map));,然后重新载入地图initData();

    5、在游戏成功后等待system("pause > .tmp");会留下临时文件。用system("del .tmp");删除临时文件。

    展开全文
  • C++实现推箱子游戏代码
  • 推箱子游戏c++代码可以直接运行
  • 推箱子游戏C++.net源代码
  • C/C++推箱子游戏

    千次阅读 2019-08-19 17:03:29
    推箱子游戏 项目名称:推箱子 所用知识点:C/C++ 基础知识 所用工具:vs2013&Easyx 程序思路分析 (效果图) 程序思路: 第一步:创建窗口 #include<graphics.h> #include<stdio..h> int main()...

    推箱子游戏

    • 项目名称:推箱子
    • 所用知识点:C/C++ 基础知识
    • 所用工具:vs2013&Easyx

    程序思路分析
    在这里插入图片描述
    (效果图)
    在这里插入图片描述

    程序思路:
    第一步:创建窗口

    #include<graphics.h>
    #include<stdio..h>
    int main()
    {
    initgraph(400, 400);//创建400px * 400px的窗口
    system ("pause");
    return 0;
    }
    
    

    第二步:贴图(贴图三部曲:定义图片,加载图片,显示图片)

    #include<stdio.h>
    #include<graphics.h>
    #include<conio.h>
    int main()
    {
    initgraph(400, 400);//创建400px * 400px的窗口
    IMAGE  b;//定义图片
    loadimage(&b, "b.bmp", 50, 50);//加载图片
    putimage(j * 50, i * 50, &b);//显示图片
    	
    system ("pause");
    return 0;
    }`
    
    
    

    第三步:箱子的移动(图片的移动)

    {
    	int x, y;//表示人物所在位置的下标
    	for (int j = 0; j < 8; j++)
    	{
    		for (int i = 0; i < 8; i++)
    		{
    			if (Map[j][i] == 5 || Map[j][i] == 8)
    			{
    
    				
    					x = j;
    					y = i;
    
    				
    					
    			}
    		}
    	}
    
    	char key = _getch();
    	//Sleep(30);
    	switch (key)//获取按键
    	{
    
    	
    		//向上
    	case 72:
    	case 'w':
    	case 'W':
    		if (Map[x - 1][y] == 0 || Map[x - 1][y] == 3)
    		{
    			Map[x - 1][y] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x - 1][y] == 4 || Map[x - 1][y] == 7)
    			if (Map[x - 2][y] == 0 || Map[x - 1][y] == 3)
    			{
    				Map[x - 2][y] += 4;
    				Map[x - 1][y] += 1;
    				Map[x][y] -= 5;
    			}
    
    		break;
    	case 80:
    	case 's':
    	case 'S':
    		if (Map[x + 1][y] == 0 || Map[x + 1][y] == 3)
    		{
    			Map[x + 1][y] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x + 1][y] == 4 || Map[x + 1][y] == 7)
    			if (Map[x + 2][y] == 0 || Map[x + 1][y] == 3)
    			{
    				Map[x + 2][y] += 4;
    				Map[x + 1][y] += 1;
    				Map[x][y] -= 5;
    			}
    		break;
    	case 77:
    	case 'd':
    	case 'D':
    		if (Map[x][y + 1] == 0 || Map[x][y + 1] == 3)
    		{
    			Map[x][y + 1] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x][y + 1] == 4 || Map[x][y + 1] == 7)
    			if (Map[x][y + 2] == 0 || Map[x][y + 1] == 3)
    			{
    				Map[x][y + 2] += 4;
    				Map[x][y + 1] += 1;
    				Map[x][y] -= 5;
    			}
    		break;
    	case 75:
    	case 'a':
    	case 'A':
    		if (Map[x][y - 1] == 0 || Map[x][y - 1] == 3)
    		{
    			Map[x][y - 1] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x][y - 1] == 4 || Map[x][y - 1] == 7)
    			if (Map[x][y - 2] == 0 || Map[x][y - 1] == 3)
    			{
    				Map[x][y - 2] += 4;
    				Map[x][y - 1] += 1;
    				Map[x][y] -= 5;
    			}
    		break;
    	}
    

    程序的源代码

    
    #include<stdio.h>
    #include<graphics.h>
    #include<conio.h>
    IMAGE  a, aby, b, c, d, dby, e, f;
    void InitImg()
    {
    
    	//1.加载背景
    	loadimage(&f, "f.jpg", 400, 400);
    	//加载小鸟
    	loadimage(&a, "a.bmp", 50, 50);
    	loadimage(&aby, "aby.bmp", 50, 50);
    
    	loadimage(&b, "b.bmp", 50, 50);
    	loadimage(&c, "c.bmp", 50, 50);
    	loadimage(&d, "d.bmp", 50, 50);
    	loadimage(&dby, "dby.bmp", 50, 50);
    	loadimage(&e, "e.bmp", 50, 50);
    }
    int Map[8][8] = {
    	{ 0, 0, 1, 1, 1, 0, 0, 0 },
    	{ 0, 0, 1, 3, 1, 0, 0, 0 },
    	{ 0, 0, 1, 0, 1, 1, 1, 1 },
    	{ 1, 1, 1, 4, 0, 4, 3, 1 },
    	{ 1, 3, 0, 4, 5, 1, 1, 1 },
    	{ 1, 1, 1, 1, 4, 1, 0, 0 },
    	{ 0, 0, 0, 1, 3, 1, 0, 0 },
    	{ 0, 0, 0, 1, 1, 1, 0, 0 },
    
    };
    void DrawMap()
    {
    
    	putimage(0, 0, &f);
    	int i, j;
    	for (i = 0; i < 8; i++)
    	{
    		for (j = 0; j < 8; j++) {
    			switch (Map[i][j]) {
    			case 0:printf("  ");
    
    				break;
    			case 1:printf("@");
    				putimage(j * 50, i * 50, &b);
    
    				break;
    			case 3:printf("#");
    				putimage(j * 50, i * 50, &d, SRCAND);
    				putimage(j * 50, i * 50, &dby, SRCPAINT);
    
    				break;
    			case 4:printf("$");
    				putimage(j * 50, i * 50, &c);
    				break;
    			case 5:printf("%");
    				putimage(j * 50, i * 50, &a, SRCAND);
    				putimage(j * 50, i * 50, &aby, SRCPAINT);
    
    				break;
    				case 7:
    					printf("^");
    					putimage(j * 50, i * 50, &e);
    					break;
    
    			}
    
    		}
    		printf("\n");
    
    
    
    	}
    }
    void key_Down()
    {
    	int x, y;//表示人物所在位置的下标
    	for (int j = 0; j < 8; j++)
    	{
    		for (int i = 0; i < 8; i++)
    		{
    			if (Map[j][i] == 5 || Map[j][i] == 8)
    			{
    
    				
    					x = j;
    					y = i;
    
    				
    					
    			}
    		}
    	}
    
    	char key = _getch();
    	//Sleep(30);
    	switch (key)//获取按键
    	{
    
    	
    		//向上
    	case 72:
    	case 'w':
    	case 'W':
    		if (Map[x - 1][y] == 0 || Map[x - 1][y] == 3)
    		{
    			Map[x - 1][y] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x - 1][y] == 4 || Map[x - 1][y] == 7)
    			if (Map[x - 2][y] == 0 || Map[x - 1][y] == 3)
    			{
    				Map[x - 2][y] += 4;
    				Map[x - 1][y] += 1;
    				Map[x][y] -= 5;
    			}
    
    		break;
    	case 80:
    	case 's':
    	case 'S':
    		if (Map[x + 1][y] == 0 || Map[x + 1][y] == 3)
    		{
    			Map[x + 1][y] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x + 1][y] == 4 || Map[x + 1][y] == 7)
    			if (Map[x + 2][y] == 0 || Map[x + 1][y] == 3)
    			{
    				Map[x + 2][y] += 4;
    				Map[x + 1][y] += 1;
    				Map[x][y] -= 5;
    			}
    		break;
    	case 77:
    	case 'd':
    	case 'D':
    		if (Map[x][y + 1] == 0 || Map[x][y + 1] == 3)
    		{
    			Map[x][y + 1] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x][y + 1] == 4 || Map[x][y + 1] == 7)
    			if (Map[x][y + 2] == 0 || Map[x][y + 1] == 3)
    			{
    				Map[x][y + 2] += 4;
    				Map[x][y + 1] += 1;
    				Map[x][y] -= 5;
    			}
    		break;
    	case 75:
    	case 'a':
    	case 'A':
    		if (Map[x][y - 1] == 0 || Map[x][y - 1] == 3)
    		{
    			Map[x][y - 1] += 5;
    			Map[x][y] -= 5;
    		}
    		else if (Map[x][y - 1] == 4 || Map[x][y - 1] == 7)
    			if (Map[x][y - 2] == 0 || Map[x][y - 1] == 3)
    			{
    				Map[x][y - 2] += 4;
    				Map[x][y - 1] += 1;
    				Map[x][y] -= 5;
    			}
    		break;
    	}
    
    
    
    	}
    	int main()
    	{
    
    
    		initgraph(400, 400);
    		InitImg();
    		DrawMap();
    		while (1)
    		{
    
    
    			
    			DrawMap();
    			key_Down();
    			system("cls");
    		}
    		getchar();
    		system("pause");
    
    	}
    
    
    
    
    展开全文
  • C语言实现推箱子游戏

    万次阅读 多人点赞 2019-09-28 22:57:23
    很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~ ...通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。 二、代...

    很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~

    一、介绍

    开发语言:C语言
    开发工具:Dev-C++ 5.11
    日期:2019年9月28日
    作者:ZackSock
    

    也不说太多多余的话了,先看一下效果图:
    在这里插入图片描述
    游戏中的人物、箱子、墙壁、球都是字符构成的。通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。

    二、代码实现

    关于代码方面,我尽可能讲的细致。希望大家可以理解~

    (1)方法列表

    //主函数
    void main();
    
    //初始化一些数据
    initData();
    
    //在控制台上打印地图
    drawMap();
    
    //向上移动
    moveUp();
    
    //向左移动
    moveLeft()
    
    //向下移动
    moveDown()
    
    //向右移动
    moveRight();
    

    这几个方法都顾名思义,而且用意也非常明确,就initData可能不知道具体用处,但是没有什么大问题。唯一的问题就是,上左下右的顺序可能会逼死几个强迫症患者,哈哈。

    (2)参数列表

    为了方便,我把include和宏定义也放到参数列表当中

    //导入函数库
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    //宏定义
    #define WIDTH 8
    #define HEIGHT 8
    
    //定义地图数组,二维数组有两个维度,而地图也是二维的矩形
    int map[HEIGHT][WIDTH] = {
    	{0, 0, 1, 1, 1, 0, 0, 0},
    	{0, 0, 1, 4, 1, 0, 0, 0},
    	{0, 0, 1, 0, 1, 1, 1, 1},
    	{1, 1, 1, 3, 0, 3, 4, 1},
    	{1, 4, 0, 3, 2, 1, 1, 1},
    	{1, 1, 1, 1, 3, 1, 0, 0},
    	{0, 0, 0, 1, 4, 1, 0, 0},
    	{0, 0, 0, 1, 1, 1, 0, 0} 
    };
    
    //人的位置,在二维地图中,我们可以用坐标表示一个人的位置,就好比经纬度
    int x, y;
    
    //箱子的个数,推箱子肯定要有箱子嘛。
    int boxs;
    

    这里参数不多,其中横为x,纵为y,另外这里再规定一下map的一些东西:

    /**
    *	0	表示空
    *	1	表示墙
    *	2	表示人
    *	3	表示箱子
    *	4	表示目的地(球)
    *	5	表示已完成的箱子
    */
    

    (3)函数具体分析

    接下来我们一个一个函数来分析。

    1、main函数
    int main(int argc, char *argv[]) {
    	char direction;		//存储键盘按的方向 
    	initData();			//初始化一些数据
    	
    	//开始游戏的循环,这里是个死循环,每按一次按钮循环一次
    	while(1){
    		//每次循环的开始清除屏幕
    		system("cls");
    		//绘画地图
    		drawMap();
    
    		//判断,当boxs的数量0时,!0为真,然后走break跳出循环(结束游戏) 
    		if(!boxs){
    			break;
    		}
    		
    		//键盘输入方向,这里使用getch,因为getch读取字符不会显示在屏幕上
    		direction = getch();
    		
    		//用switch判断用户输入的方向
    		switch(direction){
    			case 'w':
    				//按w时,调用向上移动函数
    				moveUp();
    				break;
    			case 'a':
    				//按a时,调用向左移动函数
    				moveLeft(); 
    				break;
    			case 's':
    				moveDown();
    				break;
    			case 'd':
    				moveRight();
    				break; 
    		}
    	}  
    	//当跳出循环时,运行该语句,游戏结束
    	printf("恭喜你完成游戏!※");
    	return 0;
    }
    

    我大概说一下流程,循环外面没有什么特别的。initData()只是一些简单数据的初始化,不需要太在意。循环中大致流程如下:

    • 清除屏幕
    • 绘制地图
    • 判断游戏是否结束
    • 对用户按下的按钮进行反馈

    进入循环体,先清除屏幕,再绘制地图,然后再判断游戏是否结束。可能大家对这个顺序不是很理解,这里我们先不考虑判断游戏结束的问题。我们把清屏和绘制地图合在一起,简称“重绘地图”,而游戏结束的判断先不考虑,那么流程就简化为“重绘地图 + 响应用户的操作”。简单来说就是,用户按一下按钮,我改变一下地图。

    2、initData()

    void initData(){
    	int i, j;
    	
    	//加载数据时让用户等待,一般情况加载数据比较快
    	printf("游戏加载中,请稍后........."); 
    	
    	//遍历地图中的数据
    	for(i = 0; i < HEIGHT; i++){
    		for(j = 0; j < WIDTH; j++){
    			//遍历到2(人)时,记录人的坐标。x, y是前面定义的全局变量
    			if(map[i][j] == 2){
    				x = j;
    				y = i;
    			} 
    			//遍历到3时,箱子的数目增加。boxs是前面定义的全局变量 
    			if(map[i][j] == 3){
    				boxs++;
    			}
    		}
    	} 
    }
    

    这个方法很简单,就是遍历地图,然后初始化人的位置和箱子的个数。这里有一点要注意一下,就是到底内层循环是WIDTH还是外层循环是WIDTH。在这里插入图片描述
    如图,在遍历过程中。外层循环控制行数,即HEIGHT。那么内层循环应该是WIDTH。

    3、drawMap()

    void drawMap(){
    	int i, j;
    	for(i = 0; i < WIDTH; i++){
    		for(j = 0; j < HEIGHT; j++){
    			switch(map[i][j]){
    				case 0:
    					printf("  ");
    					break;
    				case 1:
    					printf("■");
    					break;
    				case 2:
    					printf("♀");
    					break;
    				case 3:
    					printf("◆");
    					break;
    				case 4:
    					printf("●");
    					break;
    				case 5:
    					printf("★");
    					break; 
    			}
    		}
    		printf("\n");
    	}
    }
    

    这里也非常简单,变量map中的元素,然后通过switch判断应该输出的内容。然后内层循环每走完一次就换行。

    4、moveUp()

    这个函数内容有点多,想讲一下大概思路:

    向上移有两种情况
    1、前面为空白
    	这种情况有两个步骤
    	(1)将人当前的位置设置为空白(0),
    	(2)再讲人前面的位置设置为人(22、前面为箱子
    	当前面为箱子时有三种情况
    	1、箱子前面为空白
    		移动人和箱子,这个操作有三个步骤
    		(1)将人当前位置设置为空(0)
    		(2)将箱子位置设置为人(2)
    		(3)将箱子前面设置为箱子(32、箱子前面为墙
    		这种情况不需要做任何操作
    	3、箱子前面为终点
    		这种情况有四个个步骤
    		(1)将人的位置设置为空(0)
    		(2)将箱子的位置设置为人(2)
    		(3)将终点位置设置为★(5)
    		(4)箱子boxs的数量减一
    3、前面为墙
    	这种情况最简单,不需要做任何操作
    4、前面为终点
    	我这里没有考虑太多,这种情况不做操作。(如果更换地图的话可能需要修改代码)
    

    具体代码如下,解析我全写在注释里面:

    void moveUp(){
    	//定义变量存放人物上方的坐标
    	int ux, uy; 
    	
    	//当上方没有元素时,直接return	(其实人不可能在边缘)
    	if(y == 0){
    		return;
    	}
    	
    	//记录上方坐标,x为横,y为纵,所有ux = x, uy = y - 1;
    	ux = x;
    	uy = y - 1; 
    	
    	//上方为已完成的箱子
    	if(map[uy][ux] == 5){
    		return;
    	} 
    	//假设上方为墙,直接return,这个和上面的判断可以合在一起,这里为了看清楚分开写 
    	if(map[uy][ux] == 1){
    		return;
    	}
    	
    	//假设上方为箱子
    	if(map[uy][ux] == 3){
    		//判断箱子上方是否为墙 
    		if(map[uy - 1][ux] == 1){
    			return;
    		}
    		
    		//判断箱子上方是否为终点
    		if(map[uy - 1][ux] == 4){
    			//将箱子上面内容赋值为5★ 
    			map[uy - 1][ux] = 5;
    			map[uy][ux] = 0;
    					
    			//箱子的数目减1	
    			boxs--; 
    		}else{
    			//移动箱子
    			map[uy - 1][ux] = 3;
    		}
    	}
    	//当上面几种return的情况都没遇到,人肯定会移动,移动操作如下
    	map[y][x] = 0;
    	map[uy][ux] = 2;
    	//更新人的坐标
    	y = uy; 
    } 
    

    这是一个方向的,其它方向要考虑的问题也和前面一样,我也就不赘述了。

    6、moveLeft()

    这里大致都和上面一样,就是在记录左边坐标时,应该应该是lx = x - 1。

    void moveLeft(){
    	//定义变量存放人物左边的坐标
    	int lx, ly; 
    	
    	//当左边没有元素时,直接return	
    	if(x == 0){
    		return;
    	}
    	
    	//记录左边坐标
    	lx = x - 1;
    	ly = y; 
    	
    	//左边为已完成方块
    	if(map[ly][lx] == 5){
    		return;
    	} 
    	
    	//假设左边为墙,直接return 
    	if(map[ly][lx] == 1){
    		return;
    	}
    	
    	//假设左边为箱子
    	if(map[ly][lx] == 3){
    		//判断箱子左边是否为墙 
    		if(map[ly][lx - 1] == 1){
    			return;
    		}
    		
    		//判断箱子左边是否为球
    		if(map[ly][lx - 1] == 4){
    			//将箱子左边内容赋值为5★ 
    			map[ly][lx - 1] = 5;
    			map[ly][lx] = 0;
    		
    			//箱子的数目减1 
    			boxs--; 
    		}else{
    			//移动箱子 
    			map[ly][lx - 1] = 3; 
    		}
    	}
    	map[y][x] = 0;
    	map[ly][lx] = 2;
    	x = lx; 
    }
    

    7、moveDown()

    这里在判断边界时,判断的是 y == HEIGHT - 1。

    void moveDown(){
    	//定义变量存放人物下方的坐标
    	int dx, dy; 
    	
    	//当下方没有元素时,直接return	
    	if(y == HEIGHT - 1){
    		return;
    	}
    	
    	//记录下方坐标
    	dx = x;
    	dy = y + 1; 
    	
    	//下方为已完成方块
    	if(map[dy][dx] == 5){
    		return;
    	} 
    	
    	//假设下方为墙,直接return 
    	if(map[dy][dx] == 1){
    		return;
    	}
    	
    	//假设下方为箱子
    	if(map[dy][dx] == 3){
    		//判断箱子下方是否为墙 
    		if(map[dy + 1][dx] == 1){
    			return;
    		}
    		
    		//判断箱子下方是否为球
    		if(map[dy + 1][dx] == 4){
    			//将箱子下面内容赋值为5★ 
    			map[dy + 1][dx] = 5;
    			map[dy][dx] = 0;
    			
    			//箱子的数目减1 
    			boxs--; 
    		}else{
    			//移动箱子
    			map[dy + 1][dx] = 3; 
    		}
    	}
    	map[y][x] = 0;
    	map[dy][dx] = 2;
    	y = dy; 
    }
    

    8、moveRight()

    这里也没什么特别说的:

    void moveRight(){
    	//定义变量存放人物右边的坐标
    	int rx, ry; 
    	
    	//当右边没有元素时,直接return	
    	if(x == WIDTH - 1){
    		return;
    	}
    	
    	//记录右边坐标
    	rx = x + 1;
    	ry = y; 
    	
    	//右边为已完成方块
    	if(map[ry][rx] == 5){
    		return;
    	} 
    	
    	//假设右边为墙,直接return 
    	if(map[ry][rx] == 1){
    		return;
    	}
    	
    	//假设右边为箱子
    	if(map[ry][rx] == 3){
    		//判断箱子右边是否为墙 
    		if(map[ry][rx + 1] == 1){
    			return;
    		}
    		
    		//判断箱子左边是否为球
    		if(map[ry][rx + 1] == 4){
    			//将箱子右边内容赋值为5★ 
    			map[ry][rx + 1] = 5;
    			map[ry][rx] = 0;
    			
    			//箱子的数目减1 
    			boxs--; 
    		}else{
    			//移动箱子 
    			map[ry][rx + 1] = 3; 
    		}
    	}
    	map[y][x] = 0;
    	map[ry][rx] = 2;
    	x = rx; 
    }
    

    三、总结

    现在再回顾开始的运行步骤

    • 清除屏幕
    • 绘制地图
    • 判断游戏是否结束
    • 对用户按下的按钮进行反馈

    这里把判断游戏是否结束放到了重绘图像后面,因为在对用户进行反馈的时候只是改变了map中的数据,实际上最后一个箱子推到终点的图像还没有显示出来,所以要在重绘之后再判断是否结束游戏。

    代码有很多冗余的地方,一方面是想大家更好的理解,还有一方面出于懒。哈哈,代码运行起来没有问题,源码和源程序我会上传,有兴趣的可以下下来,或者直接复制代码运行也是没问题的。
    百度云连接如下:
    链接:https://pan.baidu.com/s/1pwEKt3VTKmssDgU6dLx0pg 提取码:4o9v

    展开全文
  • 利用QT实现一关推箱子游戏
  • C++ 推箱子游戏,界面做的很漂亮,同时包含源代码,值得学习和借鉴
  • C++推箱子游戏(可以撤回)

    千次阅读 多人点赞 2019-01-02 19:20:31
    C++推箱子游戏制作 期末了,需要交一个C++大作业,就准备了一下写了一个推箱子小游戏,内容借鉴于网友, 不过进行了一些修改添加了一些新的内容,下面放出源码和效果. ![游戏界面,第一关(一共5关)]...

    C++推箱子小游戏制作

    	期末了,需要交一个C++大作业,就准备了一下写了一个推箱子小游戏,内容借鉴于网友,
    不过进行了一些修改添加了一些新的内容,下面放出源码和效果.
    

    第一关
    第二关
    一共有五个关卡,具体内容在下面代码中的注释

    /*-----推箱子游戏-----created by 汤圆*/
    /*
    	======待完成项目======
    	一.在死局的情况下重开关卡
    	二.自动生成新地图(目前只有5张地图,自己可以通过给MAP添加数组进行新地图的添加)
    */
    //障碍为█,箱子为□,玩家为♀,目的地为◎,到达目的地之后为★,空地为" ",人在目的地上表示☆;
    #include "pch.h"
    #include <iostream>
    #include <conio.h>
    #include <Windows.h>
    #include <string>
    #include <string.h>
    #include <iomanip>
    #include <fstream>
    #include <cstdlib>
    using namespace std;
    #define ROW 12
    #define COL 12
    char but;//按键
    //定义结构体玩家位置,x,y为玩家的坐标
    struct pos {
    	int x;
    	int y;
    }player;
    struct MAP {
    	const int row;
    	const int col;
    	char map[ROW][COL];
    };
    //颜色
    void color(int x)
    {
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
    }
    //地图
    struct MAP map1[5] = { { 8, 8, { { 0, 0, 1, 1, 1, 0, 0, 0 },  //地图一
    { 0, 0, 1, 3, 1, 0, 0, 0 },
    { 0, 0, 1, 0, 1, 1, 1, 1 },
    { 1, 1, 1, 2, 0, 2, 3, 1 },
    { 1, 3, 0, 2, 4, 1, 1, 1 },
    { 1, 1, 1, 1, 2, 1, 0, 0 },
    { 0, 0, 0, 1, 3, 1, 0, 0 },
    { 0, 0, 0, 1, 1, 1, 0, 0 } } },
    { 9, 9, { {1,1,1,1,1,0,0,0,0},   //地图二
    {1,4,0,0,1,0,0,0,0},
    {1,0,2,2,1,0,1,1,1},
    {1,0,2,0,1,0,1,3,1},
    {1,1,1,0,1,1,1,3,1},
    {0,1,1,0,0,0,0,3,1},
    {0,1,0,0,0,1,0,0,1},
    {0,1,0,0,0,1,1,1,1},
    {0,1,1,1,1,1,0,0,0} } },
    { 7, 10, { { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },  //地图三
    { 0, 1, 0, 0, 0, 0, 0, 1, 1, 1 },
    { 1, 1, 2, 1, 1, 1, 0, 0, 0, 1 },
    { 1, 0, 4, 0, 2, 0, 0, 2, 0, 1 },
    { 1, 0, 3, 3, 1, 0, 2, 0, 1, 1 },
    { 1, 1, 3, 3, 1, 0, 0, 0, 1, 0 },
    {0,1,1,1,1,1,1,1,1,0} } },
    { 8, 6, { { 0, 1, 1, 1, 1, 0 },    //地图四
    { 1, 1, 0, 0, 1, 0 },
    { 1, 4, 2, 0, 1, 0 },
    { 1, 1, 2, 0, 1, 1 },
    { 1, 1, 0, 2, 0, 1 },
    { 1, 3, 2, 0, 0, 1 },
    { 1, 3, 3, 5, 3, 1 },
    { 1, 1, 1, 1, 1, 1 } } },
    { 8, 8, { { 0, 1, 1, 1, 1, 1, 0, 0 },  //地图五
    { 0, 1, 0, 4, 0, 1, 1, 1 },
    { 1, 1, 0, 1, 2, 0, 0, 1 },
    { 1, 0, 5, 3, 0, 3, 0, 1 },
    { 1, 0, 0, 2, 2, 0, 1, 1 },
    { 1, 1, 1, 0, 1, 3, 1, 0 },
    { 0, 0, 1, 0, 0, 0, 1, 0 },
    { 0, 0, 1, 1, 1, 1, 1, 0 } } } };   //在这里增加地图,行数,列数,以及地图元素
    
    /*
    *
    *
    *生成地图
    *
    *
    */
    
    void mapInit(char(*map)[COL], const int *row, const int *col) {
    	for (int i = 0; i < *row; i++) {
    		cout << "\t\t\t\t\t";
    		for (int j = 0; j < *col; j++) {
    			switch ((map[i][j])) {
    			case 0: color(15); cout << "  ";
    				break;
    			case 1:color(27); cout << "█";
    				break;
    			case 2:color(4); cout << "□";
    				break;
    			case 3:color(5); cout << "◎";
    				break;
    			case 4:color(6); cout << "♀";
    				break;
    			case 5:color(8); cout << "★";
    				break;
    			case 7:color(9); cout << "☆";
    				break;
    			}
    		}
    		cout << endl;
    	}
    	color(27);
    	cout << "\n\t\t\t\t\t█";
    	color(15);
    	cout << "障碍\n";
    	color(4);
    	cout << "\t\t\t\t\t□"; 
    	color(15);
    	cout << "箱子\n";
    	color(5); 
    	cout << "\t\t\t\t\t◎";
    	color(15);
    	cout << "目标点\n";
    	color(6);
    	cout << "\t\t\t\t\t♀";
    	color(15);
    	cout << "人物\n";
    	color(8);
    	cout << "\t\t\t\t\t★";
    	color(15);
    	cout << "箱子在目标点上\n";
    	color(9);
    	cout << "\t\t\t\t\t☆";
    	color(15);
    	cout << "人物在目标点上\n";
    
    
    
    
    	cout << "\n\t\t\t\t\tW A S D控制人物移动\n\t\t\t\t\tR键撤销移动,ESC键退出" << endl;
    }
    
    /*
    *
    *
    *锁定玩家位置
    *
    *
    */
    void lockPlayerPosition(char(*map)[COL], const int *row, const int *col, int *x, int *y) {
    	for (int i = 0; i < *row; i++) {
    		for (int j = 0; j < *col; j++) {
    			if ((map[i][j]) == 4 || (map[i][j] == 7)) {
    				*x = i;
    				*y = j;
    				return;
    			}
    		}
    	}
    }
    /*
    *
    *
    *判断是否胜利
    *
    *
    */
    int isWin(char(*map)[COL], const int*row, const int *col) {
    	int count = 0;
    	for (int i = 0; i < *row; i++) {
    		for (int j = 0; j < *col; j++) {
    			if (map[i][j] == 2 || map[i][j] == 7) {
    				return 0;
    			}
    		}
    	}
    	return 1;
    }
    /*
    *
    *
    *控制玩家移动
    *
    *
    */
    void playerMov(char(*map)[COL], int *x, int *y) {
    	char CheckBut = but;
    	switch (but = _getch()) {
    		//退出
    	case 'Q':
    	case 'q':
    	case 27: {
    		exit(1);
    	}
    		//撤回
    	case 'R':
    	case 'r': { 
    		if (CheckBut == 0) {
    			cout << "\n之前没有进行任何移动操作,请移动之后再试" << endl;
    		}
    		//上一次操作按的是W键
    		else if (CheckBut == 'w') {
    			//(1)上次人物要到的下一个位置是空地
    			if (map[(*x) + 1][*y] == 0 && map[*x][*y] == 4&& map[(*x) - 1][*y] != 2 && map[(*x) - 1][*y] != 5) {
    				map[*x][*y] = 0;
    				map[(*x) + 1][*y] = 4;
    				++*x;
    			}
    			//(2)上次人物要到的下一个位置是空目的地
    			else if (map[(*x) + 1][*y] == 0 && map[*x][*y] == 7&&map[(*x) - 1][*y] != 5 && map[(*x) - 1][*y] != 2) {
    				map[*x][*y] = 3;
    				map[(*x) + 1][*y] =4 ;
    				++*x;
    			}
    			//(3)上次人物要推着箱子到一个空地
    			else if (map[(*x) + 1][*y] == 0 && map[*x][*y] == 4 && map[(*x) - 1][*y] == 2) {
    				map[*x][*y] = 2;
    				map[(*x) - 1][(*y)] = 0;
    				map[(*x) +1 ][(*y)] =4 ;
    				
    			}
    			//(4)上次人物要推着箱子到一个空目的地
    			else if (map[(*x) + 1][*y] == 0 && map[*x][*y] == 4 && map[(*x) - 1][*y] == 5) {
    				map[*x][*y] = 2;
    				map[(*x) - 1][*y] = 3;
    				map[(*x) + 1][*y] = 4;
    			}
    			//(5)上次人物要推着目的地中的箱子到空地
    			else if (map[(*x) + 1][*y] == 0 && map[*x][*y] == 7 && map[(*x) - 1][*y] == 2) {
    				map[*x][*y] = 5;
    				map[(*x) - 1][*y] = 0;
    				map[(*x) +1][*y] = 4;
    				
    			}
    			//(6)上次人物要推着目的地中的箱子到新的目的地中
    			else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) + 1][*y] == 0) {
    				map[*x][*y] = 5;
    				map[(*x) - 1][*y] = 3;
    				map[(*x) +1][*y] = 4;
    				
    			}
    			//(7)上次人物在目的地中到空地
    			else if (map[(*x) + 1][*y] == 3 && map[*x][*y] == 4&&map[(*x) - 1][*y] != 5) {
    				map[(*x) + 1][*y] = 7;
    				map[*x][*y] = 0;
    				
    			}
    			//(8)上次人物在目的地中推箱子到空地
    			else if (map[(*x) - 1][*y] == 2 && map[*x][*y] ==4 && map[(*x) + 1][*y] == 3) {
    				map[*x][*y] = 2;
    				map[(*x) - 1][*y] = 0;
    				map[(*x) +1][*y] = 7;
    			}
    			//(9)上次人物在目的地中推箱子到新的目的地
    			else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 4 && map[(*x) +1][*y] == 3) {
    				map[*x][*y] = 2;
    				map[(*x) - 1][*y] = 3;
    				map[(*x) +1][*y] = 7;
    				
    			}
    			//(10)上次人物在目的地中到新的目的地
    			else if (map[(*x) + 1][*y] == 3 && map[*x][*y] == 7&&map[(*x) - 1][*y] != 2&& map[(*x) - 1][*y] != 5) {
    				map[(*x) + 1][*y] =7;
    				map[*x][*y] = 3;
    			}
    			//(11)人物在目的地中推下一个目的地中的箱子到空地
    			else if (map[(*x) - 1][*y] == 2 && map[*x][*y] == 7 && map[(*x) +1][*y] == 3) {
    				map[*x][*y] = 5;
    				map[(*x) - 1][*y] = 0;
    				map[(*x) +1][*y] = 7;
    			}
    			//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    			else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) +1][*y] == 3) {
    				map[*x][*y] = 5;
    				map[(*x) - 1][*y] = 3;
    				map[(*x)+1][*y] = 7;
    			}
    		}
    		//上一次操作按的是S键
    		else if (CheckBut == 's') {
    			//(1)上次人物要到的下一个位置是空地
    			if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 4 && map[(*x) + 1][*y] != 2 && map[(*x) + 1][*y] != 5) {
    				map[*x][*y] = 0;
    				map[(*x) - 1][*y] = 4;
    				--*x;
    			}
    			//(2)上次人物要到的下一个位置是空目的地
    			else if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 7 && map[(*x) + 1][*y] != 5 && map[(*x) + 1][*y] != 2) {
    				map[*x][*y] = 3;
    				map[(*x) - 1][*y] = 4;
    				--*x;
    			}
    			//(3)上次人物要推着箱子到一个空地
    			else if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 4 && map[(*x) + 1][*y] == 2) {
    				map[*x][*y] = 2;
    				map[(*x) + 1][(*y)] = 0;
    				map[(*x) - 1][(*y)] = 4;
    
    			}
    			//(4)上次人物要推着箱子到一个空目的地
    			else if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 4 && map[(*x) + 1][*y] == 5) {
    				map[*x][*y] = 2;
    				map[(*x) + 1][*y] = 3;
    				map[(*x) - 1][*y] = 4;
    			}
    			//(5)上次人物要推着目的地中的箱子到空地
    			else if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 7 && map[(*x) + 1][*y] == 2) {
    				map[*x][*y] = 5;
    				map[(*x) + 1][*y] = 0;
    				map[(*x) - 1][*y] = 4;
    
    			}
    			//(6)上次人物要推着目的地中的箱子到新的目的地中
    			else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) - 1][*y] == 0) {
    				map[*x][*y] = 5;
    				map[(*x) + 1][*y] = 3;
    				map[(*x) - 1][*y] = 4;
    
    			}
    			//(7)上次人物在目的地中到空地
    			else if (map[(*x) - 1][*y] == 3 && map[*x][*y] == 4 && map[(*x) + 1][*y] != 5) {
    				map[(*x) - 1][*y] = 7;
    				map[*x][*y] = 0;
    
    			}
    			//(8)上次人物在目的地中推箱子到空地
    			else if (map[(*x) + 1][*y] == 2 && map[*x][*y] == 4 && map[(*x) - 1][*y] == 3) {
    				map[*x][*y] = 2;
    				map[(*x) + 1][*y] = 0;
    				map[(*x) - 1][*y] = 7;
    			}
    			//(9)上次人物在目的地中推箱子到新的目的地
    			else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 4 && map[(*x) - 1][*y] == 3) {
    				map[*x][*y] = 2;
    				map[(*x) + 1][*y] = 3;
    				map[(*x) - 1][*y] = 7;
    
    			}
    			//(10)上次人物在目的地中到新的目的地
    			else if (map[(*x) - 1][*y] == 3 && map[*x][*y] == 7 && map[(*x) +1][*y] != 2 && map[(*x) + 1][*y] != 5) {
    				map[(*x) - 1][*y] = 7;
    				map[*x][*y] = 3;
    			}
    			//(11)人物在目的地中推下一个目的地中的箱子到空地
    			else if (map[(*x) + 1][*y] == 2 && map[*x][*y] == 7 && map[(*x) - 1][*y] == 3) {
    				map[*x][*y] = 5;
    				map[(*x) + 1][*y] = 0;
    				map[(*x) - 1][*y] = 7;
    			}
    			//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    			else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) - 1][*y] == 3) {
    				map[*x][*y] = 5;
    				map[(*x) + 1][*y] = 3;
    				map[(*x) - 1][*y] = 7;
    			}
    			
    		}
    		//上一次操作按的是A键
    		else if (CheckBut == 'a') {
    		//(1)上次人物要到的下一个位置是空地
    		if (map[*x][*y] == 4 && map[*x][(*y) + 1] == 0&& map[*x][(*y) - 1]!=2&& map[*x][(*y) + 1]!=5&&map[*x][(*y) -1] != 5) {
    			map[*x][*y] = 0;
    			map[*x][(*y) + 1] = 4;
    		}
    		//(2)上次人物要到的下一个位置是空目的地
    		else if (map[(*x) ][(*y)+1] == 0 && map[*x][*y] == 7 && map[(*x) ][(*y)-1] != 5 && map[(*x) ][(*y)-1] != 2) {
    			map[*x][*y] = 3;
    			map[(*x) ][(*y)+1] = 4;
    			
    		}
    		//(3)上次人物要推着箱子到一个空地
    		else if (map[*x][(*y)+1] == 0 && map[*x][*y] == 4 && map[*x][(*y)-1] == 2) {
    			map[*x][*y] = 2;
    			map[(*x) ][(*y)-1] = 0;
    			map[(*x) ][(*y)+1] = 4;
    
    		}
    		//(4)上次人物要推着箱子到一个空目的地
    		else if (map[*x][(*y)+1] == 0 && map[*x][*y] == 4 && map[*x][(*y)-1] == 5) {
    			map[*x][*y] = 2;
    			map[*x][(*y)-1] = 3;
    			map[*x][(*y)+1] = 4;
    		}
    		//(5)上次人物要推着目的地中的箱子到空地
    		else if (map[*x][(*y)+1] == 0 && map[*x][*y] == 7 && map[*x][(*y)-1] == 2) {
    			map[*x][*y] = 5;
    			map[*x][(*y)-1] = 0;
    			map[*x][(*y)+1] = 4;
    
    		}
    		//(6)上次人物要推着目的地中的箱子到新的目的地中
    		else if (map[*x][(*y)-1] == 5 && map[*x][*y] == 7 && map[*x][(*y)+1] == 0) {
    			map[*x][*y] = 5;
    			map[*x][(*y)-1] = 3;
    			map[*x][(*y)+1] = 4;
    
    		}
    		//(7)上次人物在目的地中到空地
    		else if (map[*x][(*y)+1] == 3 && map[*x][*y] == 4 && map[*x][(*y)-1] != 5) {
    			map[*x][(*y)+1] = 7;
    			map[*x][*y] = 0;
    
    		}
    		//(8)上次人物在目的地中推箱子到空地
    		else if (map[*x][(*y)-1] == 2 && map[*x][*y] == 4 && map[*x][(*y)+1] == 3) {
    			map[*x][*y] = 2;
    			map[*x][(*y)-1] = 0;
    			map[*x][(*y)+1] = 7;
    		}
    		//(9)上次人物在目的地中推箱子到新的目的地
    		else if (map[*x][(*y)-1] == 5 && map[*x][*y] == 4 && map[*x][(*y)+1] == 3) {
    			map[*x][*y] = 2;
    			map[*x][(*y)-1] = 3;
    			map[*x][(*y)+1] = 7;
    
    		}
    		//(10)上次人物在目的地中到新的目的地
    		else if (map[*x][(*y)+1] == 3 && map[*x][*y] == 7 && map[*x][(*y)-1] != 2 && map[*x][(*y)-1] != 5) {
    			map[*x][(*y)+1] = 7;
    			map[*x][*y] = 3;
    		}
    		//(11)人物在目的地中推下一个目的地中的箱子到空地
    		else if (map[*x][(*y)-1] == 2 && map[*x][*y] == 7 && map[*x][(*y)+1] == 3) {
    			map[*x][*y] = 5;
    			map[*x][(*y)-1] = 0;
    			map[*x][(*y)+1] = 7;
    		}
    		//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    		else if (map[*x][(*y)-1] == 5 && map[*x][*y] == 7 && map[*x][(*y)+1] == 3) {
    			map[*x][*y] = 5;
    			map[*x][(*y)-1] = 3;
    			map[*x][(*y)+1] = 7;
    		}
    		}
    		//上一次操作按的是D键
    		else if (CheckBut == 'd') {
    		//(1)上次人物要到的下一个位置是空地
    		if (map[*x][*y] == 4 && map[*x][(*y) - 1] == 0 && map[*x][(*y) + 1] != 2 && map[*x][(*y) - 1] != 5 && map[*x][(*y) + 1] != 5) {
    			map[*x][*y] = 0;
    			map[*x][(*y) - 1] = 4;
    		}
    		//(2)上次人物要到的下一个位置是空目的地
    		else if (map[(*x)][(*y) - 1] == 0 && map[*x][*y] == 7 && map[(*x)][(*y) + 1] != 5 && map[(*x)][(*y) + 1] != 2) {
    			map[*x][*y] = 3;
    			map[(*x)][(*y) - 1] = 4;
    
    		}
    		//(3)上次人物要推着箱子到一个空地
    		else if (map[*x][(*y) - 1] == 0 && map[*x][*y] == 4 && map[*x][(*y) + 1] == 2) {
    			map[*x][*y] = 2;
    			map[(*x)][(*y) + 1] = 0;
    			map[(*x)][(*y) - 1] = 4;
    
    		}
    		//(4)上次人物要推着箱子到一个空目的地
    		else if (map[*x][(*y) -1] == 0 && map[*x][*y] == 4 && map[*x][(*y) +1] == 5) {
    			map[*x][*y] = 2;
    			map[*x][(*y) +1] = 3;
    			map[*x][(*y) -1] = 4;
    		}
    		//(5)上次人物要推着目的地中的箱子到空地
    		else if (map[*x][(*y) -1] == 0 && map[*x][*y] == 7 && map[*x][(*y) +1] == 2) {
    			map[*x][*y] = 5;
    			map[*x][(*y) +1] = 0;
    			map[*x][(*y) -1] = 4;
    
    		}
    		//(6)上次人物要推着目的地中的箱子到新的目的地中
    		else if (map[*x][(*y) +1] == 5 && map[*x][*y] == 7 && map[*x][(*y) -1] == 0) {
    			map[*x][*y] = 5;
    			map[*x][(*y) +1] = 3;
    			map[*x][(*y) -1] = 4;
    
    		}
    		//(7)上次人物在目的地中到空地
    		else if (map[*x][(*y) -1] == 3 && map[*x][*y] == 4 && map[*x][(*y) +1] != 5) {
    			map[*x][(*y) -1] = 7;
    			map[*x][*y] = 0;
    
    		}
    		//(8)上次人物在目的地中推箱子到空地
    		else if (map[*x][(*y) +1] == 2 && map[*x][*y] == 4 && map[*x][(*y) -1] == 3) {
    			map[*x][*y] = 2;
    			map[*x][(*y) +1] = 0;
    			map[*x][(*y) -1] = 7;
    		}
    		//(9)上次人物在目的地中推箱子到新的目的地
    		else if (map[*x][(*y) +1] == 5 && map[*x][*y] == 4 && map[*x][(*y) -1] == 3) {
    			map[*x][*y] = 2;
    			map[*x][(*y) +1] = 3;
    			map[*x][(*y) -1] = 7;
    
    		}
    		//(10)上次人物在目的地中到新的目的地
    		else if (map[*x][(*y) -1] == 3 && map[*x][*y] == 7 && map[*x][(*y) +1] != 2 && map[*x][(*y) +1] != 5) {
    			map[*x][(*y) -1] = 7;
    			map[*x][*y] = 3;
    		}
    		//(11)人物在目的地中推下一个目的地中的箱子到空地
    		else if (map[*x][(*y) +1] == 2 && map[*x][*y] == 7 && map[*x][(*y) -1] == 3) {
    			map[*x][*y] = 5;
    			map[*x][(*y) +1] = 0;
    			map[*x][(*y) -1] = 7;
    		}
    		//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    		else if (map[*x][(*y) +1] == 5 && map[*x][*y] == 7 && map[*x][(*y) -1] == 3) {
    			map[*x][*y] = 5;
    			map[*x][(*y) +1] = 3;
    			map[*x][(*y) -1] = 7;
    		}
    		}
    		break;
    	}
    		//向上走,在键盘上按下W键
    	case 'W':
    	case 'w':
    	case 38: {
    		//(1)人物要到的下一个位置是空地
    		if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 4) {
    			map[*x][*y] = 0;
    			map[(*x) - 1][*y] = 4;
    			--*x;
    		}
    		//(2)人物要到的下一个位置是空目的地
    		else if (map[(*x) - 1][*y] == 3 && map[*x][*y] == 4) {
    			map[*x][*y] = 0;
    			map[(*x) - 1][*y] = 7;
    			--*x;
    		}
    		//(3)人物要推着箱子到一个空地
    		else if (map[(*x) - 1][*y] == 2 && map[*x][*y] == 4 && map[(*x) - 2][*y] == 0) {
    			map[*x][*y] = 0;
    			map[(*x) - 1][(*y)] = 4;
    			map[(*x) - 2][(*y)] = 2;
    			--*x;
    		}
    		//(4)人物要推着箱子到一个空目的地
    		else if (map[(*x) - 1][*y] == 2 && map[*x][*y] == 4 && map[(*x) - 2][*y] == 3) {
    			map[*x][*y] = 0;
    			map[(*x) - 1][*y] = 4;
    			map[(*x) - 2][*y] = 5;
    			--*x;
    		}
    		//(5)人物要推着目的地中的箱子到空地
    		else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 4 && map[(*x) - 2][*y] == 0) {
    			map[*x][*y] = 0;
    			map[(*x) - 1][*y] = 7;
    			map[(*x) - 2][*y] = 2;
    			--*x;
    		}
    		//(6)人物要推着目的地中的箱子到新的目的地中
    		else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 4 && map[(*x) - 2][*y] == 3) {
    			map[*x][*y] = 0;
    			map[(*x) - 1][*y] = 7;
    			map[(*x) - 2][*y] = 5;
    			--*x;
    		}
    		//(7)人物在目的地中到空地
    		else if (map[(*x) - 1][*y] == 0 && map[*x][*y] == 7) {
    			map[(*x) - 1][*y] = 4;
    			map[*x][*y] = 3;
    			--*x;
    		}
    		//(8)人物在目的地中推箱子到空地
    		else if (map[(*x) - 1][*y] == 2 && map[*x][*y] == 7 && map[(*x) - 2][*y] == 0) {
    			map[*x][*y] = 3;
    			map[(*x) - 1][*y] = 4;
    			map[(*x) - 2][*y] = 2;
    			--*x;
    		}
    		//(9)人物在目的地中推箱子到新的目的地
    		else if (map[(*x) - 1][*y] == 2 && map[*x][*y] == 7 && map[(*x) - 2][*y] == 3) {
    			map[*x][*y] = 3;
    			map[(*x) - 1][*y] = 4;
    			map[(*x) - 2][*y] = 5;
    			--*x;
    		}
    		//(10)人物在目的地中到新的目的地
    		else if (map[(*x) - 1][*y] == 3 && map[*x][*y] == 7) {
    			map[(*x) - 1][*y] = 7;
    			map[*x][*y] = 3;
    			--*x;
    		}
    		//(11)人物在目的地中推下一个目的地中的箱子到空地
    		else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) - 2][*y] == 0) {
    			map[*x][*y] = 3;
    			map[(*x) - 1][*y] = 7;
    			map[(*x) - 2][*y] = 2;
    			--*x;
    		}
    		//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    		else if (map[(*x) - 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) - 2][*y] == 3) {
    			map[*x][*y] = 3;
    			map[(*x) - 1][*y] = 7;
    			map[(*x) - 2][*y] = 5;
    			--*x;
    		}
    	}
    
    			   break;
    	
    			   //向下走,在键盘上按下S键
    	case 'S':
    	case 's':
    	case 40: {
    		//(1)人物要到的下一个位置是空地
    		if (map[(*x) + 1][(*y)] == 0 && map[*x][*y] == 4) {
    			map[*x][(*y)] = 0;
    			map[(*x) + 1][*y] = 4;
    			++*x;
    		}
    		//(2)人物要到的下一个位置是空目的地
    		else if (map[(*x) + 1][*y] == 3 && map[*x][*y] == 4) {
    			map[*x][*y] = 0;
    			map[(*x) + 1][*y] = 7;
    			++*x;
    		}
    		//(3)人物要推着箱子到一个空地
    		else if (map[(*x) + 1][*y] == 2 && map[*x][*y] == 4 && map[(*x) + 2][*y] == 0) {
    			map[*x][*y] = 0;
    			map[(*x) + 1][(*y)] = 4;
    			map[(*x) + 2][(*y)] = 2;
    			++*x;
    		}
    		//(4)人物要推着箱子到一个空目的地
    		else if (map[(*x) + 1][*y] == 2 && map[*x][*y] == 4 && map[(*x) + 2][*y] == 3) {
    			map[*x][*y] = 0;
    			map[(*x) + 1][*y] = 4;
    			map[(*x) + 2][*y] = 5;
    			++*x;
    		}
    		//(5)人物要推着目的地中的箱子到空地
    		else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 4 && map[(*x) + 2][*y] == 0) {
    			map[*x][*y] = 0;
    			map[(*x) + 1][*y] = 7;
    			map[(*x) + 2][*y] = 2;
    			++*x;
    		}
    		//(6)人物要推着目的地中的箱子到新的目的地中
    		else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 4 && map[(*x) + 2][*y] == 3) {
    			map[*x][*y] = 0;
    			map[(*x) + 1][*y] = 7;
    			map[(*x) + 2][*y] = 5;
    			++*x;
    		}
    		//(7)人物在目的地中到空地
    		else if (map[(*x) + 1][*y] == 0 && map[*x][*y] == 7) {
    			map[(*x) + 1][*y] = 4;
    			map[*x][*y] = 3;
    			++*x;
    		}
    		//(8)人物在目的地中推箱子到空地
    		else if (map[(*x) + 1][*y] == 2 && map[*x][*y] == 7 && map[(*x) + 2][*y] == 0) {
    			map[*x][*y] = 3;
    			map[(*x) + 1][*y] = 4;
    			map[(*x) + 2][*y] = 2;
    			++*x;
    		}
    		//(9)人物在目的地中推箱子到新的目的地
    		else if (map[(*x) + 1][*y] == 2 && map[*x][*y] == 7 && map[(*x) + 2][*y] == 3) {
    			map[*x][*y] = 3;
    			map[(*x) + 1][*y] = 4;
    			map[(*x) + 2][*y] = 5;
    			++*x;
    		}
    		//(10)人物在目的地中到新的目的地
    		else if (map[(*x) + 1][*y] == 3 && map[*x][*y] == 7) {
    			map[(*x) + 1][*y] = 7;
    			map[*x][*y] = 3;
    			++*x;
    		}
    		//(11)人物在目的地中推下一个目的地中的箱子到空地
    		else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) + 2][*y] == 0) {
    			map[*x][*y] = 3;
    			map[(*x) + 1][*y] = 7;
    			map[(*x) + 2][*y] = 2;
    			++*x;
    		}
    		//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    		else if (map[(*x) + 1][*y] == 5 && map[*x][*y] == 7 && map[(*x) + 2][*y] == 3) {
    			map[*x][*y] = 3;
    			map[(*x) + 1][*y] = 7;
    			map[(*x) + 2][*y] = 5;
    			++*x;
    		}
    	}
    
    			   break;
    			   //向左走,在键盘上按下A键
    	case 'A':
    	case 'a':
    	case 37: {
    		//(1)人物要到的下一个位置是空地
    		if (map[*x][(*y) - 1] == 0 && map[*x][*y] == 4) {
    			map[*x][(*y)] = 0;
    			map[*x][(*y) - 1] = 4;
    			--*y;
    		}
    		//(2)人物要到的下一个位置是空目的地
    		else if (map[*x][(*y) - 1] == 3 && map[*x][*y] == 4) {
    			map[*x][*y] = 0;
    			map[*x][(*y) - 1] = 7;
    			--*y;
    		}
    		//(3)人物要推着箱子到一个空地
    		else if (map[*x][(*y) - 1] == 2 && map[*x][*y] == 4 && map[*x][(*y) - 2] == 0) {
    			map[*x][*y] = 0;
    			map[*x][(*y) - 1] = 4;
    			map[*x][(*y) - 2] = 2;
    			--*y;
    		}
    		//(4)人物要推着箱子到一个空目的地
    		else if (map[*x][(*y) - 1] == 2 && map[*x][*y] == 4 && map[*x][(*y) - 2] == 3) {
    			map[*x][*y] = 0;
    			map[*x][(*y) - 1] = 4;
    			map[*x][(*y) - 2] = 5;
    			--*y;
    		}
    		//(5)人物要推着目的地中的箱子到空地
    		else if (map[*x][(*y) - 1] == 5 && map[*x][*y] == 4 && map[*x][(*y) - 2] == 0) {
    			map[*x][*y] = 0;
    			map[*x][(*y) - 1] = 7;
    			map[*x][(*y) - 2] = 2;
    			--*x;
    		}
    		//(6)人物要推着目的地中的箱子到新的目的地中
    		else if (map[*x][(*y) - 1] == 5 && map[*x][*y] == 4 && map[*x][(*y) - 2] == 3) {
    			map[*x][*y] = 0;
    			map[*x][(*y) - 1] = 7;
    			map[*x][(*y) - 2] = 5;
    			--*x;
    		}
    		//(7)人物在目的地中到空地
    		else if (map[*x][(*y) - 1] == 0 && map[*x][*y] == 7) {
    			map[*x][(*y) - 1] = 4;
    			map[*x][*y] = 3;
    			--*x;
    		}
    		//(8)人物在目的地中推箱子到空地
    		else if (map[*x][(*y) - 1] == 2 && map[*x][*y] == 7 && map[*x][(*y) - 2] == 0) {
    			map[*x][*y] = 3;
    			map[*x][(*y) - 1] = 4;
    			map[*x][(*y) - 2] = 2;
    			--*x;
    		}
    		//(9)人物在目的地中推箱子到新的目的地
    		else if (map[*x][(*y) - 1] == 2 && map[*x][*y] == 7 && map[*x][(*y) - 2] == 3) {
    			map[*x][*y] = 3;
    			map[*x][(*y) - 1] = 4;
    			map[*x][(*y) - 2] = 5;
    			--*x;
    		}
    		//(10)人物在目的地中到新的目的地
    		else if (map[*x][(*y) - 1] == 3 && map[*x][*y] == 7) {
    			map[*x][(*y) - 1] = 7;
    			map[*x][*y] = 3;
    			--*x;
    		}
    		//(11)人物在目的地中推下一个目的地中的箱子到空地
    		else if (map[*x][(*y) - 1] == 5 && map[*x][*y] == 7 && map[*x][(*y) - 2] == 0) {
    			map[*x][*y] = 3;
    			map[*x][(*y) - 1] = 7;
    			map[*x][(*y) - 2] = 2;
    			--*x;
    		}
    		//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    		else if (map[*x][(*y) - 1] == 5 && map[*x][*y] == 7 && map[*x][(*y) - 2] == 3) {
    			map[*x][*y] = 3;
    			map[*x][(*y) - 1] = 7;
    			map[*x][(*y) - 2] = 5;
    			--*x;
    		}
    	}
    
    			   break;
    			   //向右走,在键盘上按下D键
    	case 'D':
    	case 'd':
    	case 39: {
    		//(1)人物要到的下一个位置是空地
    		if (map[*x][(*y) + 1] == 0 && map[*x][*y] == 4) {
    			map[*x][(*y)] = 0;
    			map[*x][(*y) + 1] = 4;
    			++*y;
    		}
    		//(2)人物要到的下一个位置是空目的地
    		else if (map[*x][(*y) + 1] == 3 && map[*x][*y] == 4) {
    			map[*x][*y] = 0;
    			map[*x][(*y) + 1] = 7;
    			++*y;
    		}
    		//(3)人物要推着箱子到一个空地
    		else if (map[*x][(*y) + 1] == 2 && map[*x][*y] == 4 && map[*x][(*y) + 2] == 0) {
    			map[*x][*y] = 0;
    			map[*x][(*y) + 1] = 4;
    			map[*x][(*y) + 2] = 2;
    			++*y;
    		}
    		//(4)人物要推着箱子到一个空目的地
    		else if (map[*x][(*y) + 1] == 2 && map[*x][*y] == 4 && map[*x][(*y) + 2] == 3) {
    			map[*x][*y] = 0;
    			map[*x][(*y) + 1] = 4;
    			map[*x][(*y) + 2] = 5;
    			++*y;
    		}
    		//(5)人物要推着目的地中的箱子到空地
    		else if (map[*x][(*y) + 1] == 5 && map[*x][*y] == 4 && map[*x][(*y) + 2] == 0) {
    			map[*x][*y] = 0;
    			map[*x][(*y) + 1] = 7;
    			map[*x][(*y) + 2] = 2;
    			++*x;
    		}
    		//(6)人物要推着目的地中的箱子到新的目的地中
    		else if (map[*x][(*y) + 1] == 5 && map[*x][*y] == 4 && map[*x][(*y) + 2] == 3) {
    			map[*x][*y] = 0;
    			map[*x][(*y) + 1] = 7;
    			map[*x][(*y) + 2] = 5;
    			++*x;
    		}
    		//(7)人物在目的地中到空地
    		else if (map[*x][(*y) + 1] == 0 && map[*x][*y] == 7) {
    			map[*x][(*y) + 1] = 4;
    			map[*x][*y] = 3;
    			++*x;
    		}
    		//(8)人物在目的地中推箱子到空地
    		else if (map[*x][(*y) + 1] == 2 && map[*x][*y] == 7 && map[*x][(*y) + 2] == 0) {
    			map[*x][*y] = 3;
    			map[*x][(*y) + 1] = 4;
    			map[*x][(*y) + 2] = 2;
    			++*x;
    		}
    		//(9)人物在目的地中推箱子到新的目的地
    		else if (map[*x][(*y) + 1] == 2 && map[*x][*y] == 7 && map[*x][(*y) + 2] == 3) {
    			map[*x][*y] = 3;
    			map[*x][(*y) + 1] = 4;
    			map[*x][(*y) + 2] = 5;
    			++*x;
    		}
    		//(10)人物在目的地中到新的目的地
    		else if (map[*x][(*y) + 1] == 3 && map[*x][*y] == 7) {
    			map[*x][(*y) + 1] = 7;
    			map[*x][*y] = 3;
    			++*x;
    		}
    		//(11)人物在目的地中推下一个目的地中的箱子到空地
    		else if (map[*x][(*y) + 1] == 5 && map[*x][*y] == 7 && map[*x][(*y) + 2] == 0) {
    			map[*x][*y] = 3;
    			map[*x][(*y) + 1] = 7;
    			map[*x][(*y) + 2] = 2;
    			++*x;
    		}
    		//(12)人物在目的地中推下一个目的地中的箱子到新目的地
    		else if (map[*x][(*y) + 1] == 5 && map[*x][*y] == 7 && map[*x][(*y) + 2] == 3) {
    			map[*x][*y] = 3;
    			map[*x][(*y) + 1] = 7;
    			map[*x][(*y) + 2] = 5;
    			++*x;
    		}
    	}
    
    			   break;
    	}
    }
    /*
    *
    *
    *游戏主函数
    *
    */
    void game() {
    	int i = 0, x = 0, y = 0, step = 0;
    	struct MAP *pmap = NULL;
    	pmap = map1;
    	mapInit(pmap->map, &(pmap->row), &(pmap->col));
    	while (1) {
    		lockPlayerPosition(pmap->map, &(pmap->row), &(pmap->col), &x, &y);
    		cout << "\n\t\t\t\t\t你一共走了" << step << "步" << endl;
    		cout << but;
    		playerMov(pmap->map, &x, &y);
    		step++;
    		system("cls");
    		mapInit(pmap->map, &(pmap->row), &(pmap->col));
    		if ((isWin(pmap->map, &(pmap->row), &pmap->col)) && i <= 5) {
    			system("cls");
    			color(5);
    			cout << "\t\t\t\t\t牛逼,按任意键继续" << endl;
    			step = -1;
    			color(14);
    			mapInit(pmap->map, &(pmap->row), &(pmap->col));
    			//system("pause");
    			pmap++;
    			x = 0; y = 0;
    			i++;
    			lockPlayerPosition(pmap->map, &(pmap->row), &(pmap->col), &x, &y);
    		}
    	}
    }
    /*
    *
    *
    *菜单
    *
    *
    */
    void menu() {
    	cout << "\t\t\t\t\t菜 单" << endl;
    	cout << "\t\t\t\t\t1.开始游戏" << endl;
    	cout << "\t\t\t\t\t2.退出" << endl;
    
    }
    void Display();
    void Register()
    {
    	ofstream outFile;
    	outFile.open("web1.txt", ios_base::out | ios_base::app);
    	if (!outFile.is_open())
    	{
    		cout << "\t\t\t\t\t很遗憾,连接不上服务器";
    		cout << "\t\t\t\t\t程序结束";
    		cin.get();
    		exit(0);
    	}
    	string name;
    	string code;
    	cout << "\t\t\t\t\t请输入用户名:";
    	cin.get();
    	getline(cin, name);
    
    
    	outFile << name << endl;
    
    	cout << "\t\t\t\t\t请输入密码: ";
    	getline(cin, code);
    	outFile << code << endl;
    	outFile<<"========="<<endl; 
    	cout << "\t\t\t\t\t注册成功";
    	outFile.close();
    	Display();
    }
    void login()
    {
    	cin.get();
    	ifstream inFile;
    	inFile.open("web1.txt");
    	string strVec[100];
    	int i = 1;
    	if (!inFile.is_open())
    	{
    		cout << "\t\t\t\t\t很遗憾,连接不上服务器";
    		exit(0);
    	}
    	string name;
    	string code;
    	string temp;
    	char ch;
    	char str[20];
    	cout << "\t\t\t\t\t请输入用户名:";
    	getline(cin, name);
    	FILE *pFile;
    	int c;
    	int n = 0;
    	errno_t err;
    	err = fopen_s(&pFile,"web1.txt", "r");
    	if (pFile == NULL)
    	{
    		return;
    	}
    	else
    	{
    		do
    		{
    			c = fgetc(pFile);
    			if (c == '\n')
    				n++;
    		} while (c != EOF);
    	}
    	for (i = 0; i <= n; i ++)
    	{
    		getline(inFile, temp);
    		if (name == temp)
    		{
    			getline(inFile, temp);
    			while (1)
    			{
    				i = 0;
    				system("cls");
    				cout << "\t\t\t\t\t请输入登陆密码:";
    				ch = _getch();
    				while (ch != 13)
    				{
    					if (ch == 8 && i > 0)
    					{
    						i--;
    						str[i] = '\0';
    						system("cls");//清屏 重新输出*
    						cout << "\t\t\t\t\t输入密码:";
    						for (int j = 0; j < i; j++)
    						{
    							cout << "*";
    						}
    						ch = _getch();
    					}
    					else
    					{
    						printf("*");
    						str[i] = ch;
    						i++;
    						ch = _getch();
    					}
    				}
    				str[i] = '\0';
    				string temps = str;
    				if (temps==temp)
    				{
    					system("cls");
    					cout << "\t\t\t\t\t密码输入正确" << endl;
    					break;
    				}
    				else
    				{
    					cout << "\n\t\t\t\t\t密码错误!!";
    					_getch();
    				}
    			}
    
    		}
    	}
    	
    }
    void Display()
    {
    	cout << "\n\t\t\t\t\t1.注册\n\t\t\t\t\t2.登录\n\t\t\t\t\t3.退出\n\t\t\t\t\t请输入选项:";
    	int choice;
    	cin >> choice;
    
    	switch (choice)
    	{
    	case 1:
    		Register();
    		break;
    	case 2:
    		login();
    		break;
    	case 3:
    		exit(0);
    	}
    }
    
    int main(void) {
    	int choice = 0;
    	Display();
    	cout << "\n\n\tLoading";
    	for (int i = 0; i < 100; i++) {
    		cout << ".";
    		Sleep(10);
    	}
    	cout << "\n\n\n";
    	do {
    		menu();
    		cout << "\n\t\t\t\t\t输入您的选项:";
    		cin >> choice;
    		switch (choice) {
    		case 1:
    			system("cls"), game(), system("cls");
    			break;
    		case 2:
    			exit(1);
    			break;
    		}
    	} while (choice);
    
    	return 0;
    }
    

    参考https://blog.csdn.net/qq_41866437/article/details/80267831

    展开全文
  • c++推箱子代码

    2012-05-11 00:37:54
    自己写的代码与大家分享 希望大家能够相互指正,相互学习,共同进步
  • C++实现推箱子游戏

    2020-08-25 12:00:19
    主要为大家详细介绍了C++实现推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • [推荐] C++推箱子游戏源码及箱子生成器源码 用C++写的推箱子游戏 和游戏制作器 【推荐】 @或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 ...
  • 推箱子c++代码

    2018-06-20 14:32:28
    推箱子c++代码,简单推箱子游戏程序,推箱子源代码 { 0,0,0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,1,1,1,1,1,1,1,0,0 }, { 0,0,0,1,0,0,2,0,0,1,0,0 }, { 0,0,0,1,3,4,0,1,1,1,1,0 }, { 0,0,1,1,1,0,0,0,0,0,1,0 }, { ...
  • C++实现推箱子游戏,附源代码。使用GDI的原始API接口来实现游戏的绘制。
  • c++ 推箱子游戏

    2021-03-29 16:55:10
    这个小游戏是我开始学c++的时候写的,它里面实现了推箱子的逻辑和界面展示 二、思路 1.它界面素材有:背景图,人物,墙,箱子,目标,空地,成功图这样7个 2.把图按照一行一行的进行分组 并用数字把图片的位置和...
  • C++ 推箱子

    2012-10-09 13:51:32
    用C+=编写的推箱子游戏,功能简单易学,适合初学者使用
  • 一个适合初学者的C++推箱子游戏

    千次阅读 多人点赞 2018-11-11 19:51:35
    一个适合初学者的C++推箱子游戏 当把所有箱子推到目的地,就完成游戏
  • C++推箱子源码

    2014-09-16 12:20:42
    经典的c++推箱子源码,关卡虽然不太多,但可以添加.因为算法都写好了的再多也是一样的
  • C++推箱子游戏

    2021-01-12 09:59:05
    简单易懂的推箱子闯关小游戏。 游戏代码 #include <bits/stdc++.h> #include <windows.h> #include <conio.h> using namespace std; #define VERSION "2.2" #define M 55 int n, m, wall[M][M], ...
  • C++推箱子游戏(一)

    千次阅读 2018-05-02 18:04:49
    准备:c/c++基础 code::blocks第一次尝试: 将地图在控制台显示出来并控制中心位置的图案移动#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; using ...
  • VB C++ 推箱子

    2012-09-20 20:06:54
    这款推箱子游戏是寄上一版推箱子的改进版 ,它的中文注释更清晰, 代码更加优化
  • C++开发的经典推箱子游戏及源代码 具有40余关卡 下载 /* fp8文件是应用世界上压缩率最高的paq压缩算法的FastPAQ压缩软件的专有格式,你可在CSDN上下载【FastPAQ--世界最强压缩软件下载】以解压fp8文件*/
  • 主要为大家详细介绍了C++实现推箱子游戏源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,401
精华内容 560
关键字:

c++推箱子游戏代码

c++ 订阅