欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言 实现推箱子小游戏

程序员文章站 2024-03-18 14:06:10
...

(1)内容描述

描述:用户进入页面后可以进行选关,每关的关卡难度依次递增,当你选择一关并通过后,会自动进入下一关,直到游戏结束。游戏过程中会有系统提示。
实现方式:二维数组

(2)功能

C语言 实现推箱子小游戏
1.菜单功能。玩家通过看目录按对应的键可以进入对应的管卡。
2.难度。关卡难度依次递增。
3.顺序功能。当玩家完成了一关后可顺利进入下一关,继续挑战难度高的关卡。

(3)设计目的

训练学生掌握c的数据结构和综合变成能力和游戏开发能力等应用能力。

初步设想

推箱子是比较经典的益智小游戏,目的是在训练人的逻辑思考能力。 在一个狭小的空间中,要求把木箱从起始位置处推放到指定位置。在空间中地方有限,稍不小心就会出现无法移动或道路被堵住的情况,而且箱子不能推不能拉。所以需要玩家利用正确的思维通关。

(4)总体设计

(1)初始化模块。该模块包括屏幕初始化和游戏第一关到最后一关的初始化。游戏每一关的初始化时显实现每一关的关键。
(2)画图模块。该模块主要是被其他模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。
(3)移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间箱子的移动。
(4)移动小人模块。该模块是几个功能函数的集合。
C语言 实现推箱子小游戏

(5)明显缺点

代码的冗余度很高,需要进一步优化

(6)个人总结

总结:验完课程设计后,我发现了自己与别人的差距;相对与别人,我的代码不够简练,内容不够多样,画面不够美化。同时也深深的懂得自己需要变得优秀,而不是一味的去完成作业,应该把社团留的作业当作一次检验,不仅能让自己发现错误,更能让自己巩固知识,革命尚未结束,怎敢停滞不前!

7. 实例

实例一

#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<windows.h>
using namespace std;

int total=0;
char name[10],bel[20],names[10],bels[20];

void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{
	HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
/*
	1.先想先了解
	2. 
		2.1 地图 --贯穿整个数组  --全局的地图数组
		2.2 游戏,项目的划分:就是模块的划分
			原则:一个功能使用一个模块
			      功能与功能尽量不要有交叉的现象
				  功能划分,互不影响,避免
	    2.3 函数的设计
				2.3.1 函数的返回值(函数唯一的遗留物)问题
					举例:判断正负的函数,想清楚
					最终结果:是赢还是输(游戏结束) 
					通过返回值表示下一步操作
					一般情况下只需要知道结果的函数才需要返回值 
				2.3.2 函数的参数
				形参就是实参的拷贝版,复制品 
					1.要操作数据,但是不想改变数据 
				 	2.说明函数要具体的操作对象 
	3.经验和代码量的堆积,以及独立思考
		必须有自己的编程思想↑	
*/
//二维数组即多个一维数组,三维数组即多个二维数组 

int map[5][12][13]=
{
	//0 空的
	//1▋ 墙
	//3☆ 4□ 目的地和箱子
	//5※人
	//7⊙ 目的地(3)和箱子(4)在一起
	//8※ 人(5)和目的地(3)在一起 
	//数学艺术  上面数字,数字的加减与代表物都是精心策划的 
	{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1,
	1, 3, 1, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1,
	1, 4, 0, 0, 4, 0, 3, 1, 1, 1, 1, 1, 1,
	1, 0, 1, 0, 1, 1, 4, 1, 1, 1, 1, 1, 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, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1,
	1, 3, 1, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1,
	1, 3, 4, 5, 4, 0, 3, 1, 1, 1, 1, 1, 1,
	1, 4, 1, 0, 1, 1, 4, 1, 1, 1, 1, 1, 1,
	1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 3, 0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 4, 1, 0, 4, 1, 1, 1, 1, 1, 1, 1,
	1, 0, 0, 0, 5, 0, 3, 1, 1, 1, 1, 1, 1,
	1, 0, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
	1, 0, 4, 0, 0, 0, 3, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{1, 1, 1, 1, 1, 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, 1, 0, 1, 0, 4, 0, 3, 1,
	1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,	
	1, 0, 0, 0, 4, 0, 0, 1, 0, 1, 1, 0, 1,
	1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1,
	1, 1, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1,
	1, 1, 0, 1, 1, 1, 1, 4, 1, 0, 1, 3, 1,
	1, 1, 0, 1, 1, 1, 0, 0, 0, 5, 1, 0, 1,
	1, 0, 0, 0, 1, 1, 0, 1, 0, 4, 3, 4, 1,
	1, 3, 0, 0, 0, 1, 3, 4, 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, 1, 1, 1, 1, 1, 
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 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, 1, 3, 1, 1, 1, 1, 1, 1,
	1, 0, 4, 0, 0, 4, 0, 1, 1, 1, 1, 1, 1,
	1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1,
	1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
	1, 3, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} 
};

int cas=0;   //为0表示第一关 

//你还要有一个量,来记录每一关的箱子数,或者说箱子和目的地在一起的总数
int boxSum[5]={3,4,4,6,2}; 
//地图绘制
void drawMap()
{	
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<13;j++)
		{
			switch(map[cas][i][j])
			{
				case 0:
					printf("  ");
					break;
				case 1:
					printf("▋");
					break;
				case 3:
					printf("☆");
					break;
				case 4:
					printf("□");
					break;
				case 5:
				case 8:
					printf("※");
					break;
				case 7:
					printf("⊙");
					break;	
			}
		}
		printf("\n");
	}
}

//按键处理
void keyDown()
{
	//分析按键过程
	//定位人的坐标
	//人有两种情况:1.人,2.人和目的地在一起 
	int i,j;
	for(i=0;i<12;i++)
	{
		for(j=0;j<13;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();   //看不见的字符输入 
	 switch(ch)
	 {
	 	//小键盘也要注意  键码值:上 72 下 80 左 75 右 77 
	 	case 'w':
	 	case 'W':
	 	case 72:
	 		//3+5=8,8表示目的地和人在一起 
	 		//什么时候能走? 0或者目的地
	 		//注意要判断的是什么,此位置还是要走的位置 
			 if(map[cas][i-1][j]==0||map[cas][i-1][j]==3)
			 {
			 	//新地方(map[i-1][j])人来了
				map[cas][i-1][j]+=5;
				 //老地方(map[i][j])人走了
				map[cas][i][j]-=5;
			 } 
			 //下一个地方是箱子的话(递进关系),判断箱子的下一个地方是不是目的地或空地 
			 //箱子有两种情况  1.箱子 2.箱子和目的地在一起 
			//如果下一个地方是箱子,要进一步判断怎么走 
			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:
			//什么时候能走? 0或者目的地
	 		//注意要判断的是什么,是要走的位置 
			if(map[cas][i+1][j]==0||map[cas][i+1][j]==3)
			 {
			 	//新地方(map[i-1][j])人来了
				map[cas][i+1][j]+=5;
				 //老地方(map[i][j])人走了
				map[cas][i][j]-=5;
			 } 
			 //下一个地方是箱子,判断箱子的下一个地方是不是目的地或空地 
			 //箱子有两种情况  1.箱子 2.箱子和目的地在一起 
			//如果下一个地方是箱子,要进一步判断怎么走 
			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:
			//什么时候能走? 0或者目的地
	 		//注意要判断的是什么,是要走的位置 
			if(map[cas][i][j-1]==0||map[cas][i][j-1]==3)
			 {
			 	//新地方(map[i-1][j])人来了
				map[cas][i][j-1]+=5;
				 //老地方(map[i][j])人走了
				map[cas][i][j]-=5;
			 } 
			 //下一个地方是箱子,判断箱子的下一个地方是不是目的地或空地 
			 //箱子有两种情况  1.箱子 2.箱子和目的地在一起 
			//如果下一个地方是箱子,要进一步判断怎么走 
			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:
			//人什么时候能走? 0或者目的地
	 		//注意要判断的是什么,是要走的位置 
			if(map[cas][i][j+1]==0||map[cas][i][j+1]==3)
			 {
			 	//新地方(map[i-1][j])人来了
				map[cas][i][j+1]+=5;
				 //老地方(map[i][j])人走了
				map[cas][i][j]-=5;
			 } 
			 //下一个地方是箱子,判断箱子的下一个地方是不是目的地或空地 
			 //箱子有两种情况  1.箱子 2.箱子和目的地在一起 
			//如果下一个地方是箱子,要进一步判断怎么走 
			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;
	 }
}

//胜负判断
//用什么判断胜负:想清楚:箱子到达目的地的个数
int gameover()
{
	int count=0;
	//所有的地方都找一遍
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<13;j++)
		{
			if(map[cas][i][j]==7)
			count++;
		}
	}
	return count;
}
//箱子数是0的时候,也是表示胜利 
int gameover2()
{
	int count=boxSum[cas];
	//所有的地方都找一遍
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<13;j++)
		{
			if(map[cas][i][j]==boxSum[cas])
			count--;
		}
	}
	return count;
}

int main()
{
		printf("游戏开始");
		Sleep(1100);
		system("cls");
		printf("第%d关",cas+1);
		getch();
		system("cls");
		while(1)
		{
			drawMap();
			if(gameover()==boxSum[cas])
			{
				cas++;
				if(cas==5)
				break;
				system("cls");
				printf("第%d关",cas+1);
				Sleep(900);
				
			}
			keyDown();
			system("cls");
		 
		}
		printf("Game over\n");
		system("pause");
		return 0;
	
}

实例二

#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<Windows.h>
using namespace std;
int mapsecond[11][13]= {
	{0,0,0,1,1,1,1,1,1,1,0,0,0},
	{1,1,1,1,0,0,0,0,0,1,0,0,0},
	{1,0,0,0,3,1,1,1,0,1,0,0,0},
	{1,0,1,0,1,0,0,0,0,1,1,0,0},
	{1,0,1,0,4,0,4,1,3,0,1,0,0},
	{1,0,1,0,0,1,0,0,1,0,1,0,0},
	{1,0,3,1,4,0,4,0,1,0,1,0,0},
	{1,1,0,0,0,0,1,0,1,0,1,1,1},
	{0,1,0,1,1,1,3,0,0,0,5,0,1},
	{0,1,0,0,0,0,0,1,1,0,0,0,1},
	{0,1,1,1,1,1,1,1,1,1,1,1,1},
};
int mapfourth[9][11] = {
	{0,1,1,1,1,1,1,1,1,1,0},  
	{0,1,0,0,0,1,0,0,0,1,0},  
	{0,1,0,4,4,4,4,4,0,1,0},  
	{0,1,0,4,0,4,0,4,0,1,1},  
	{0,1,0,0,0,0,0,0,4,0,1},  
	{1,1,0,1,1,1,1,0,4,0,1},
	{1,0,8,3,3,3,3,1,0,0,1},
	{1,0,3,3,3,3,3,0,0,1,1},
	{1,1,1,1,1,1,1,1,1,1,0},
};
int mapthird[7][8]= {
	{0,1,1,1,1,1,1,0},
	{0,1,0,0,0,0,1,1},
	{1,1,3,1,1,4,0,1},
	{1,0,3,3,4,0,0,1},
	{1,0,0,1,4,0,0,1},
	{1,0,0,5,0,1,1,1},
	{1,1,1,1,1,1,0,0},	
};
int mapfirst[7][8]= {
	{1,1,1,1,1,1,1,1},
	{1,0,0,0,0,0,0,1},
	{1,0,1,1,0,1,0,1},
	{1,0,3,4,0,4,3,1},
	{1,0,1,1,0,1,0,1},
	{1,0,0,0,5,0,0,1},
	{1,1,1,1,1,1,1,1},
};
void drawGamethird() {
	for(int a=0; a<7;a++)         //0:空地 1: ■表示墙 3:☆ 目的地 4:★箱子  5.※人 7.⊙表示箱子推到了目的的显示
		                          //8:※人到达目的地,显示人
	{
		for(int k=0; k<8; k++) {
			switch(mapthird[a][k]) {
				case 0:cout<<"  ";break;
				case 1:cout<<"■";break;
				case 3:cout<<"☆";break;
				case 4:cout<<"★";break;
				case 5:cout<<"※";break;
				case 7:cout<<"⊙";break;
				case 8:cout<<"※";break;
			}
		}
		cout<<endl;
	}
}
void drawGamesecond() {
	for(int b=0; b<11;b++)
	{
		for(int z=0; z<13; z++) {
			switch(mapsecond[b][z]) {
				case 0:cout<<"  ";break;
				case 1:cout<<"■";break;
				case 3:cout<<"☆";break;
				case 4:cout<<"★";break;
				case 5:cout<<"※";break;
				case 7:cout<<"⊙";break;
				case 8:cout<<"※";break;
			}
		}
		cout<<endl;
	}
}
void drawGamefourth() { 
	for(int c=0; c<9;c++)
	{
		for(int d=0; d<11; d++) {
			switch(mapfourth[c][d]) {
				case 0:cout<<"  ";break;
				case 1:cout<<"■";break;
				case 3:cout<<"☆";break;
				case 4:cout<<"★";break;
				case 5:cout<<"※";break;
				case 7:cout<<"⊙";break;
				case 8:cout<<"※";break;
			}
		}
		cout<<endl;
	}
}
void drawGamefirst() {
	for(int e=0; e<7; e++)
	{
		for(int f=0; f<8; f++) {
			switch(mapfirst[e][f]) {case 0:cout<<"  ";break;
				case 1:cout<<"■";break;
				case 3:cout<<"☆";break;
				case 4:cout<<"★";break;
				case 5:cout<<"※";break;
				case 7:cout<<"⊙";break;
				case 8:cout<<"※";break;
			}
		}
		cout<<endl;
	}
}
void keydownfourth() { 
      int i,j;
	for(int a=0; a<9; a++) {
		for(int k=0; k<11; k++) {
			if(mapfourth[a][k]==5||mapfourth[a][k]==8) {
				i=a;
				j=k;
			}
		}
	}
	char ch=getch();
	switch(ch) {
		case 'W':
		case 'w':
		case  72:
			if(mapfourth[i-1][j]==0||mapfourth[i-1][j]==3) { 
				mapfourth[i][j]=mapfourth[i][j]-5;
				mapfourth[i-1][j]=mapfourth[i-1][j]+5; 
			} else if(mapfourth[i-1][j]==4
			          ||mapfourth[i-1][j]==7) { 
				if(mapfourth[i-2][j]==0||mapfourth[i-2][j]==3) { 
					mapfourth[i-2][j]=mapfourth[i-2][j]+4;
					mapfourth[i-1][j]=mapfourth[i-1][j]+1;
					mapfourth[i][j]=mapfourth[i][j]-5;
				}
			}
			break;
		case 's':
		case 'S':
		case  80:
			if(mapfourth[i+1][j]==0||mapfourth[i+1][j]==3) { 
				mapfourth[i][j]=mapfourth[i][j]-5;
				mapfourth[i+1][j]=mapfourth[i+1][j]+5; 
			} else if(mapfourth[i+1][j]==4
			          ||mapfourth[i+1][j]==7) { 
				if(mapfourth[i+2][j]==0||mapfourth[i+2][j]==3) { 
					mapfourth[i+2][j]=mapfourth[i+2][j]+4;
					mapfourth[i+1][j]=mapfourth[i+1][j]+1;
					mapfourth[i][j]=mapfourth[i][j]-5;
				}
			}
			break;
		case 'a':
		case 'A':
		case 75:
			if(mapfourth[i][j-1]==0||mapfourth[i][j-1]==3) { 
				mapfourth[i][j]=mapfourth[i][j]-5;
				mapfourth[i][j-1]=mapfourth[i][j-1]+5; 
			} else if(mapfourth[i][j-1]==4
			          ||mapfourth[i][j-1]==7) { 
				if(mapfourth[i][j-2]==0||mapfourth[i][j-2]==3) { 
					mapfourth[i][j-2]=mapfourth[i][j-2]+4;
					mapfourth[i][j-1]=mapfourth[i][j-1]+1;
					mapfourth[i][j]=mapfourth[i][j]-5;
				}
			}
			break;
		case 'D':
		case 'd':
		case 77:
			if(mapfourth[i][j+1]==0||mapfourth[i][j+1]==3) { 
				mapfourth[i][j]=mapfourth[i][j]-5;
				mapfourth[i][j+1]=mapfourth[i][j+1]+5; 
			} else if(mapfourth[i][j+1]==4
			          ||mapfourth[i][j+1]==7) { 
				if(mapfourth[i][j+2]==0||mapfourth[i][j+2]==3) { 
					mapfourth[i][j+2]=mapfourth[i][j+2]+4;
					mapfourth[i][j+1]=mapfourth[i][j+1]+1;
					mapfourth[i][j]=mapfourth[i][j]-5;
				}
			}
			break;
	}
}
void keydownsecond() { 
	int i,j;
	for(int b=0; b<11; b++) {
		for(int z=0; z<13; z++) {
			if(mapsecond[b][z]==5||mapsecond[b][z]==8) {
				i=b;
				j=z;
			}
		}
	}
	char ch=getch();
	switch(ch) {
		case 'W':
		case 'w':
		case  72:
			if(mapsecond[i-1][j]==0||mapsecond[i-1][j]==3) { 
				mapsecond[i][j]=mapsecond[i][j]-5;
				mapsecond[i-1][j]=mapsecond[i-1][j]+5; 
			} else if(mapsecond[i-1][j]==4||mapsecond[i-1][j]==7) { 
				if(mapsecond[i-2][j]==0||mapsecond[i-2][j]==3) { 
					mapsecond[i-2][j]=mapsecond[i-2][j]+4;
					mapsecond[i-1][j]=mapsecond[i-1][j]+1;
					mapsecond[i][j]=mapsecond[i][j]-5;
				}
			}
			break;
		case 's':
		case 'S':
		case  80:
			if(mapsecond[i+1][j]==0||mapsecond[i+1][j]==3) { 
				mapsecond[i][j]=mapsecond[i][j]-5;
				mapsecond[i+1][j]=mapsecond[i+1][j]+5; 
			} else if(mapsecond[i+1][j]==4
			          ||mapsecond[i+1][j]==7) { 
				if(mapsecond[i+2][j]==0||mapsecond[i+2][j]==3) { 
					mapsecond[i+2][j]=mapsecond[i+2][j]+4;
					mapsecond[i+1][j]=mapsecond[i+1][j]+1;
					mapsecond[i][j]=mapsecond[i][j]-5;
				}
			}
			break;
		case 'a':
		case 'A':
		case 75:
			if(mapsecond[i][j-1]==0||mapsecond[i][j-1]==3) { 
				mapsecond[i][j]=mapsecond[i][j]-5;
				mapsecond[i][j-1]=mapsecond[i][j-1]+5; 
			} else if(mapsecond[i][j-1]==4
			          ||mapsecond[i][j-1]==7) { 
				if(mapsecond[i][j-2]==0||mapsecond[i][j-2]==3) { 
					mapsecond[i][j-2]=mapsecond[i][j-2]+4;
					mapsecond[i][j-1]=mapsecond[i][j-1]+1;
					mapsecond[i][j]=mapsecond[i][j]-5;
				}
			}
			break;
		case 'D':
		case 'd':
		case 77:
			if(mapsecond[i][j+1]==0||mapsecond[i][j+1]==3) { 
				mapsecond[i][j]=mapsecond[i][j]-5;
				mapsecond[i][j+1]=mapsecond[i][j+1]+5; 
			} else if(mapsecond[i][j+1]==4
			          ||mapsecond[i][j+1]==7) { 
				if(mapsecond[i][j+2]==0||mapsecond[i][j+2]==3) { 
					mapsecond[i][j+2]=mapsecond[i][j+2]+4;
					mapsecond[i][j+1]=mapsecond[i][j+1]+1;
					mapsecond[i][j]=mapsecond[i][j]-5;
				}
			}
			break;
	}
}
void keydownthird() { 
	int i,j;
	for(int c=0; c<7; c++) {
		for(int d=0; d<8; d++) {
			if(mapthird[c][d]==5||mapthird[c][d]==8) {
				i=c;
				j=d;
			}
		}
	}
	char ch=getch();
	switch(ch) {
		case 'W':
		case 'w':
		case  72:
			if(mapthird[i-1][j]==0||mapthird[i-1][j]==3) { 
				mapthird[i][j]=mapthird[i][j]-5;
				mapthird[i-1][j]=mapthird[i-1][j]+5; 
			} else if(mapthird[i-1][j]==4
			          ||mapthird[i-1][j]==7) { 
				if(mapthird[i-2][j]==0||mapthird[i-2][j]==3) { 
					mapthird[i-2][j]=mapthird[i-2][j]+4;
					mapthird[i-1][j]=mapthird[i-1][j]+1;
					mapthird[i][j]=mapthird[i][j]-5;
				}
			}
			break;
		case 's':
		case 'S':
		case  80:
			if(mapthird[i+1][j]==0||mapthird[i+1][j]==3) { 
				mapthird[i][j]=mapthird[i][j]-5;
				mapthird[i+1][j]=mapthird[i+1][j]+5; 
			} else if(mapthird[i+1][j]==4
			          ||mapthird[i+1][j]==7) { 
				if(mapthird[i+2][j]==0||mapthird[i+2][j]==3) { 
					mapthird[i+2][j]=mapthird[i+2][j]+4;
					mapthird[i+1][j]=mapthird[i+1][j]+1;
					mapthird[i][j]=mapthird[i][j]-5;
				}
			}
			break;
		case 'a':
		case 'A':
		case 75:
			if(mapthird[i][j-1]==0||mapthird[i][j-1]==3) { 
				mapthird[i][j]=mapthird[i][j]-5;
				mapthird[i][j-1]=mapthird[i][j-1]+5; 
			} else if(mapthird[i][j-1]==4
			          ||mapthird[i][j-1]==7) { 
				if(mapthird[i][j-2]==0||mapthird[i][j-2]==3) { 
					mapthird[i][j-2]=mapthird[i][j-2]+4;
					mapthird[i][j-1]=mapthird[i][j-1]+1;
					mapthird[i][j]=mapthird[i][j]-5;
				}
			}
			break;
		case 'D':
		case 'd':
		case 77:
			if(mapthird[i][j+1]==0||mapthird[i][j+1]==3) {
				mapthird[i][j]=mapthird[i][j]-5;
				mapthird[i][j+1]=mapthird[i][j+1]+5;
			} else if(mapthird[i][j+1]==4
			          ||mapthird[i][j+1]==7) {
				if(mapthird[i][j+2]==0||mapthird[i][j+2]==3) { 
					mapthird[i][j+2]=mapthird[i][j+2]+4;
					mapthird[i][j+1]=mapthird[i][j+1]+1;
					mapthird[i][j]=mapthird[i][j]-5;
				}
			}
			break;
	}
}
void keydownfirst() { 
	int i,j;
	for(int e=0; e<7; e++) {
		for(int f=0; f<8; f++) {
			if(mapfirst[e][f]==5||mapfirst[e][f]==8) {
				i=e;
				j=f;
			}
		}
	}
	
	char ch=getch();
	switch(ch) {
		case 'W':
		case 'w':
		case  72:
			if(mapfirst[i-1][j]==0||mapfirst[i-1][j]==3) { 
				mapfirst[i][j]=mapfirst[i][j]-5;
				mapfirst[i-1][j]=mapfirst[i-1][j]+5; 
			} else if(mapfirst[i-1][j]==4
			          ||mapfirst[i-1][j]==7) { 
				if(mapfirst[i-2][j]==0||mapfirst[i-2][j]==3) { 
					mapfirst[i-2][j]=mapfirst[i-2][j]+4;
					mapfirst[i-1][j]=mapfirst[i-1][j]+1;
					mapfirst[i][j]=mapfirst[i][j]-5;
				}
			}
			break;
		case 's':
		case 'S':
		case  80:
			if(mapfirst[i+1][j]==0||mapfirst[i+1][j]==3) { 
				mapfirst[i][j]=mapfirst[i][j]-5;
				mapfirst[i+1][j]=mapfirst[i+1][j]+5; 
			} else if(mapfirst[i+1][j]==4
			          ||mapfirst[i+1][j]==7) { 
				if(mapfirst[i+2][j]==0||mapfirst[i+2][j]==3) { 
					mapfirst[i+2][j]=mapfirst[i+2][j]+4;
					mapfirst[i+1][j]=mapfirst[i+1][j]+1;
					mapfirst[i][j]=mapfirst[i][j]-5;
				}
			}
			break;
		case 'a':
		case 'A':
		case 75:
			if(mapfirst[i][j-1]==0||mapfirst[i][j-1]==3) { 
				mapfirst[i][j]=mapfirst[i][j]-5;
				mapfirst[i][j-1]=mapfirst[i][j-1]+5; 
			} else if(mapfirst[i][j-1]==4
			          ||mapfirst[i][j-1]==7) { 
				if(mapfirst[i][j-2]==0||mapfirst[i][j-2]==3) { 
					mapfirst[i][j-2]=mapfirst[i][j-2]+4;
					mapfirst[i][j-1]=mapfirst[i][j-1]+1;
					mapfirst[i][j]=mapfirst[i][j]-5;
				}
			}
			break;
		case 'D':
		case 'd':
		case 77:
			if(mapfirst[i][j+1]==0||mapfirst[i][j+1]==3) { 
				mapfirst[i][j]=mapfirst[i][j]-5;
				mapfirst[i][j+1]=mapfirst[i][j+1]+5; 
			} else if(mapfirst[i][j+1]==4
			          ||mapfirst[i][j+1]==7) { 
				if(mapfirst[i][j+2]==0||mapfirst[i][j+2]==3) { 
					mapfirst[i][j+2]=mapfirst[i][j+2]+4;
					mapfirst[i][j+1]=mapfirst[i][j+1]+1;
					mapfirst[i][j]=mapfirst[i][j]-5;
				}
			}
			break;
	}
}
void gameoverfourth ()
{
	int k=0;
	for(int i=0;i<9;i++)
	{
	for(int j=0;j<11;j++)
	{
	  if(mapfourth[i][j]==4)
	   k++;
	}
    }
	if(k==0)
	{
	 cout<<"恭喜你,你赢了!"<<endl;
	 exit(0);
    }
}
void gameoverthird()
{
	int k=0;
	for(int i=0;i<7;i++)
	{
	for(int j=0;j<8;j++){
	 	if(mapthird[i][j]==4)
	 	 k++;}
     }    
	 if(k==0) {	
	 cout<<"恭喜你,顺利进入下一关"<<endl;
	 system("cls");
	 while(1){
	  system("cls");
	  drawGamefourth();
	  cout<<"当前关卡第2关"<<endl;
	cout<<"本关不给提示,祝你好运!"<<endl;
	  keydownfourth();
	  gameoverfourth();
	  }
    }
}
void gameoversecond()
{
	int k=0;
	for(int i=0;i<11;i++)
	{
	for(int j=0;j<13;j++)
	{
	  if(mapsecond[i][j]==4)
	   k++;
	}
    }
	if(k==0)
	{
	 cout<<"恭喜你,你通过了此关!"<<endl;
	 Sleep(1000);
	 while(1)
	 {
	system("cls");
	drawGamethird();
	cout<<"当前关卡第3关"<<endl;
	cout<<"  这一关比较难"<<endl;
	keydownthird();
	gameoverthird();
    }
    }
}
void gameoverfirst()
{
	int k=0;
	for(int i=0; i<7; i++) {
		for (int j=0; j<8; j++) {
			if(mapfirst[i][j]==4)
				k++;
		}
	}
	while(k==0){
		printf("恭喜你,你通过过了此关!\n");
		Sleep(1000);
	     while(1) 
			   { 
			    system("cls");
				drawGamesecond();
				cout<<"当前关卡第2关"<<endl;
				cout<<"D右1,B上1右2下1,A左1上2,D下2右1,A右1,C下1左2上1,D右2左4."<<endl;
				keydownsecond();
				gameoversecond();}
		}	        
}
int main() {
	while(1){ 
	system("color 3F ");
	cout<<"———————请选关————————"<<endl;
	cout<<"          1. 第一关                " <<endl;
	cout<<"          2. 第二关                " <<endl;
	cout<<"          3. 第三关                " <<endl;
	cout<<"          4. 最后一关              "<<endl;
	cout<<"          5.退出游戏               " <<endl;
	cout<<"提示:每通关一次你都会进入下一关"<<endl;
	cout<<"注意:0:空地 1: ■表示墙 3:☆ 目的地 4:★箱子  5.※人 7.⊙表示箱子推到了目的的显示 8:※人到达目的地"<<endl;
       int n;
	   cin>>n; 
	      if(n==1){
	      	  while(1){
                system("cls");
				drawGamefirst();
				cout<<"  当前关卡第[1]关"<<endl; 
				keydownfirst();
				gameoverfirst();}
		  }
	     if(n==2){ 
		    while(1) { 
			    system("cls");
				drawGamesecond(); 
				cout<<"  当前关卡第[2]关"<<endl;
				cout<<"  提示:D右1,B上1右2下1,A左1上2,D下2右1,A右1,C下1左2上1,D右2左4."<<endl; 
				keydownsecond();
				gameoversecond();}
			 }
	   if(n==3){
	     while(1) 
		 {      system("cls");
				drawGamethird();
				cout<<"  当前关卡第[3]关"<<endl; 
				cout<<"  这一关比较难"<<endl;
			    keydownthird();
			    gameoverthird(); }
		}
	 if(n==4)
	 {
	   while(1) 
	   {        system("cls");
				drawGamefourth();
				cout<<"  当前关卡为最后一关"<<endl; 
				cout<<"本关不给提示,祝你好运!"<<endl; 
				keydownfourth();
				gameoverfourth();

			 }
		}
	if(n==5)
	system("cls");
    cout<<"已经退出游戏"<<endl;exit(-1);
}
	return 0;
}

实例三

#include<iostream>
#include<windows.h>
#include<conio.h> 
//#include<stdlib.h>
using namespace std;

//0.空地 1.墙 2.人 3.箱子 4.目的地 5.箱子与目的地 6.人与目的地 
int map[5][10][10]=
{
	{
		{0,0,0,0,1,1,1,0,0,0},
		{0,0,0,0,1,4,1,0,0,0},
		{0,0,0,0,1,0,1,0,0,0},
		{0,0,0,0,1,3,1,0,0,0},
		{1,1,1,1,1,0,1,1,1,1},
		{1,4,0,0,3,2,3,0,4,1},
		{1,1,1,1,1,3,1,1,1,1},
		{0,0,0,0,1,0,1,0,0,0},
		{0,0,0,0,1,4,1,0,0,0},
		{0,0,0,0,1,1,1,0,0,0},
	},
	{
		{1,1,1,1,1,0,0,0,0,0},
		{1,0,0,0,1,0,0,0,0,0},
		{1,0,3,0,1,0,1,1,1,0},
		{1,0,3,0,1,0,1,4,1,0},
		{1,1,1,2,1,1,1,4,1,0},
		{0,1,1,3,0,0,0,4,1,0},
		{0,1,0,0,0,1,0,0,1,0},
		{0,1,0,0,0,1,1,1,1,0},
		{0,1,1,1,1,1,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,1,0,0,0,0,0,1,1,1},
		{1,1,3,1,1,1,0,0,0,1},
		{1,0,2,0,3,0,0,3,0,1},
		{1,0,4,4,1,0,3,0,1,1},
		{1,1,4,4,1,0,0,0,1,0},
		{0,1,1,1,1,1,1,1,1,0},
		{0,0,0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0,0,0},
	},
	{
		{0,1,1,1,1,0,0,0,0,0},
		{1,1,0,0,1,0,0,0,0,0},
		{1,2,3,0,1,0,0,0,0,0},
		{1,1,3,0,1,1,0,0,0,0},
		{1,1,0,3,0,1,0,0,0,0},
		{1,4,3,0,0,1,0,0,0,0},
		{1,4,4,5,4,1,0,0,0,0},
		{1,1,1,1,1,1,0,0,0,0},
		{0,0,0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0,0,0},
	},
	{
		{0,1,1,1,1,1,0,0,0,0},
		{0,1,2,0,1,1,1,0,0,0},
		{0,1,0,3,0,0,1,0,0,0},
		{1,1,1,0,1,0,1,1,0,0},
		{1,4,1,0,1,0,0,1,0,0},
		{1,4,3,0,0,1,0,1,0,0},
		{1,4,0,0,0,3,0,1,0,0},
		{1,1,1,1,1,1,1,1,0,0},
		{0,0,0,0,0,0,0,0,0,0},
		{0,0,0,0,0,0,0,0,0,0},
	}
};

int zongfen(int map[5][10][10],int level)
{
	int a=0,i,j;
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			if(map[level][i][j]==4)
			{
				a++;
			}
		}
	}
	return a;
}

//0.空地 1.墙 2.人 3.箱子 4.目的地 5.箱子与目的地 6.人与目的地 
void getmap(int map[5][10][10],int level)
{
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
		{
			switch(map[level][i][j])
			{
				case 0://空地
					cout<<"  "; 
					break;
				case 1://墙 
					cout<<"■"; 
					break;
				case 2://人 
					cout<<"♀";
					break;
				case 3://箱子 
					cout<<"□";
					break;
				case 4://目的地
					cout<<"☆"; 
					break;
				case 5://箱子与目的地
					cout<<"★"; 
					break;
				case 6://人与目的地
					cout<<"♀"; 
					break;
			}
		}
		cout<<endl; 
	}
}

int main()
{
	system("mode con cols=40 lines=20");
	int score=0;//分数
	int level=0;
	char input;//输入字符
	system("color ed");
	
	while(1)
	{
		
		system("cls");
		cout<<"\t\t推箱子"<<endl;
		cout<<"\t选择关卡:(共五关)"<<endl;
		int l;
		cin>>l;
		if(l>=1&&l<=5)
		{
			level=l-1;
			break;
		}
		else
		{
			cout<<"暂无该关卡"<<endl;
			return 0; 
			system("pause");
		}
	}
	int b[5];
	for(int q=0;q<5;q++)
	{
		b[q]=zongfen(map,q);
	}
	while(1)
	{
		system("cls");
		cout<<"\t推箱子第"<<level+1<<"关\t\t"<<endl;
		cout<<"基本操作:w-上 s-下 a-左 d-右 *-退出"<<endl<<endl;
		getmap(map,level);
		
		cout<<endl<<"分数:"<<score<<endl;//输出分数 
		
		int i,j;
		for(i=0;i<10;i++)
		{
			for(j=0;j<10;j++)
			{
				if(map[level][i][j]==2 || map[level][i][j]==6)
					break;
			}
			if(map[level][i][j]==2 || map[level][i][j]==6)
					break;
		}
		cout<<"坐标:("<<i+1<<","<<j+1<<")"<<endl;
		
		if(score==b[level])
		{
			int o=1;
			cout<<"1.下一关"<<endl<<"2.退出"<<endl<<"(请输入两次回车)"<<endl;
			while(o)
			{
				int p;
				cin>>p;
				switch(p)
				{
					case 1:
						level++;
						score=0;
						o=0;
						break;
					case 2:
						o=0;
						exit(0);
						break;
					default:
						cout<<"无效操作"<<endl;
						break;
				}	
			}
		}
		
		input = getch();//接受字符asdw 

		//1.人前是空地
		//2.人前是目的地 
		//3.人前是箱子 
		//4.人前是箱子与目的地 
		switch(input)
		{
			case 'w':
				//1.人前是空地 
				if(map[level][i-1][j]==0)
				{
					map[level][i-1][j]=2;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//2.人前是目的地 
				if(map[level][i-1][j]==4)
				{
					map[level][i-1][j]=6;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//3.人前是箱子 
				if(map[level][i-1][j]==3)
				{
					//箱子前是空地
					if(map[level][i-2][j]==0)
					{
						map[level][i-2][j]=3;
						map[level][i-1][j]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子前是目的地
					if(map[level][i-2][j]==4)
					{
						score++;
						map[level][i-2][j]=5;
						map[level][i-1][j]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}
					}
				}
				//4.人前是箱子与目的地
				if(map[level][i-1][j]==5)
				{
					//箱子与目的地前是空地
					if(map[level][i-2][j]==0)
					{
						score--;
						map[level][i-2][j]=3;
						map[level][i-1][j]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子与目的地前是目的地 
					if(map[level][i-2][j]==4)
					{
						map[level][i-2][j]=5;
						map[level][i-1][j]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}	
					}
				}
				break;
			case 'a':
				//1.人前是空地 
				if(map[level][i][j-1]==0)
				{
					map[level][i][j-1]=2;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//2.人前是目的地 
				if(map[level][i][j-1]==4)
				{
					map[level][i][j-1]=6;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//3.人前是箱子 
				if(map[level][i][j-1]==3)
				{
					//箱子前是空地
					if(map[level][i][j-2]==0)
					{
						map[level][i][j-2]=3;
						map[level][i][j-1]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子前是目的地
					if(map[level][i][j-2]==4)
					{
						score++;
						map[level][i][j-2]=5;
						map[level][i][j-1]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}
					}
				}
				//4.人前是箱子与目的地
				if(map[level][i][j-1]==5)
				{
					//箱子与目的地前是空地
					if(map[level][i][j-2]==0)
					{
						score--;
						map[level][i][j-2]=3;
						map[level][i][j-1]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子与目的地前是目的地 
					if(map[level][i][j-2]==4)
					{
						map[level][i][j-2]=5;
						map[level][i][j-1]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}	
					}
				}
				break;
			case 's':
				//1.人前是空地 
				if(map[level][i+1][j]==0)
				{
					map[level][i+1][j]=2;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//2.人前是目的地 
				if(map[level][i+1][j]==4)
				{
					map[level][i+1][j]=6;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//3.人前是箱子 
				if(map[level][i+1][j]==3)
				{
					//箱子前是空地
					if(map[level][i+2][j]==0)
					{
						map[level][i+2][j]=3;
						map[level][i+1][j]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子前是目的地
					if(map[level][i+2][j]==4)
					{
						score++;
						map[level][i+2][j]=5;
						map[level][i+1][j]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}
					}
				}
				//4.人前是箱子与目的地
				if(map[level][i+1][j]==5)
				{
					//箱子与目的地前是空地
					if(map[level][i+2][j]==0)
					{
						score--;
						map[level][i+2][j]=3;
						map[level][i+1][j]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子与目的地前是目的地 
					if(map[level][i+2][j]==4)
					{
						map[level][i+2][j]=5;
						map[level][i+1][j]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}	
					}
				}
				break;
			case 'd':
				//1.人前是空地 
				if(map[level][i][j+1]==0)
				{
					map[level][i][j+1]=2;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//2.人前是目的地 
				if(map[level][i][j+1]==4)
				{
					map[level][i][j+1]=6;
					if(map[level][i][j]==6){//人在目的地
						map[level][i][j]=4; 
					}else{
						map[level][i][j]=0;
					}
				}
				//3.人前是箱子 
				if(map[level][i][j+1]==3)
				{
					//箱子前是空地
					if(map[level][i][j+2]==0)
					{
						map[level][i][j+2]=3;
						map[level][i][j+1]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子前是目的地
					if(map[level][i][j+2]==4)
					{
						score++;
						map[level][i][j+2]=5;
						map[level][i][j+1]=2;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}
					}
				}
				//4.人前是箱子与目的地
				if(map[level][i][j+1]==5)
				{
					//箱子与目的地前是空地
					if(map[level][i][j+2]==0)
					{
						score--;
						map[level][i][j+2]=3;
						map[level][i][j+1]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4;
						}else{
							map[level][i][j]=0;
						}
					}
					//箱子与目的地前是目的地 
					if(map[level][i][j+2]==4)
					{
						map[level][i][j+2]=5;
						map[level][i][j+1]=6;
						if(map[level][i][j]==6){//人在目的地
							map[level][i][j]=4; 
						}else{
							map[level][i][j]=0;
						}
					}
				}
				break;
			case '*':
				exit(0);
				break; 
			default:
				break;
		}
	}
	return 0;
}

实例四

#include<stdio.h>
#include<conio.h> 
#include<windows.h>
int map0();
int map1();
int map2();
int map3();
int map4();
int shuying(int map[9][11]);
int zhuyao(int map[9][11]); 
int map0()
{
	int k=1;
	static int map[9][11]={
	{0,0,0,0,1,1,1,0,0,0,0},
	{0,0,0,0,1,4,1,0,0,0,0},
	{0,0,0,0,1,0,1,1,1,1,1},
	{1,1,1,1,1,3,3,0,0,4,1},
	{1,4,0,0,3,2,0,1,1,1,1}, 
	{1,1,1,1,1,1,3,1,0,0,0},
	{0,0,0,0,0,1,0,1,0,0,0},
	{0,0,0,0,0,1,4,1,0,0,0},
	{0,0,0,0,0,1,1,1,0,0,0}};
	
	k=shuying(map);
	if(k==0)
	return k;
	k=zhuyao(map);
	printf(" ");
	if(k==2)
	return k; 
//	return 2;
 }
int map1()
{
	static int map[9][11]={
	{0,0,0,0,1,1,1,1,1,1,1},
	{1,1,1,1,1,0,0,0,0,0,1},
	{1,4,1,0,0,0,0,0,0,0,1},
	{1,0,3,0,3,0,0,1,2,1,1},
	{1,0,0,0,0,0,0,0,3,0,1},
	{1,1,0,0,0,0,0,0,0,0,1},
	{0,1,4,0,1,0,0,0,1,0,1},
	{0,1,1,0,0,0,0,0,4,1,1},
	{0,0,1,1,1,1,1,1,1,1,0}};
	int k=1;
	k=shuying(map);
	if(k==0)
	return k;
	k=zhuyao(map);
	if(k==2)
	return k; 
}
int map2()
{
	static int map[9][11]={
	{0,0,1,1,1,1,1,1,1,1,1},
	{0,1,1,4,0,0,0,0,0,2,1},
	{1,1,0,0,0,0,0,1,0,1,1},
	{1,0,0,1,0,0,0,0,3,0,1},
	{1,0,3,3,4,0,0,0,0,0,1},
	{1,1,0,1,0,0,0,0,1,1,1},
	{0,1,4,0,0,0,0,0,1,0,0},
	{0,1,1,0,0,0,0,0,1,0,0},
	{0,0,1,1,1,1,1,1,1,0,0}};
	int k=1;
	k=shuying(map);
	if(k==0)
	return k;
	k=zhuyao(map); 
	if(k==2)
	return k;
}
int map3()
{
	static int map[9][11]={
	{0,0,1,1,1,1,0,0,0,0,0},
	{1,1,1,4,0,1,1,1,1,1,0},
	{1,4,1,0,0,0,0,0,0,1,1},
	{1,0,3,0,1,1,0,0,0,0,1},
	{1,2,0,3,0,0,0,0,4,0,1},
	{1,0,0,0,0,0,0,0,0,1,1},
	{1,1,1,0,0,0,0,3,1,1,0},
	{0,0,1,1,0,0,0,0,1,0,0},
	{0,0,0,1,1,1,1,1,1,0,0}};
	int k=1;
	k=shuying(map);
	if(k==0)
	return k;
	k=zhuyao(map); 
	if(k==2)
	return k;
}
int map4()
{
	static int map[9][11]={
	{0,1,1,1,1,1,1,1,1,1,0},
	{0,1,0,0,0,1,0,0,0,1,0},
	{0,1,0,0,3,0,0,0,0,1,0},
	{0,1,0,3,0,3,3,3,0,1,1},
	{0,1,0,0,0,2,0,0,0,0,1},
	{1,1,0,0,1,1,1,0,3,0,1},
	{1,0,4,4,0,4,0,0,0,0,1},
	{1,0,4,4,0,4,4,3,0,1,1},
	{1,1,1,1,1,1,1,1,1,1,0}};
	int k=1;
	k=shuying(map);
	if(k==0)
	return k;
	k=zhuyao(map);
	if(k==2)
	return k; 
}
int shuying(int map[9][11])
{
	int i,j,a=0;
	for(i=0;i<9;i++)
	{
		for(j=0;j<11;j++)
		{
			if(map[i][j]==3)
			a++;
		}
	}
	if(a==0)
	{
		printf("恭喜你过关^_^");
		system("pause");
		return a;
	}
	else
	return 3;
}
int zhuyao(int map[9][11])
{
	int i,j,a,b,c;
	for(i=0;i<9;i++)
	{
		for(j=0;j<11;j++)
		{
			if(map[i][j]==0)
			printf("  ");
			if(map[i][j]==1)
			printf("■");
			if(map[i][j]==2) 
			printf("♀"); 
			if(map[i][j]==3)
			printf("◇"); 
			if(map[i][j]==4)
			printf("◎"); 
			if(map[i][j]==6)
			printf("♂"); 
			if(map[i][j]==7)
			printf("◆");
		}
		printf("\n");
	}

	for(i=0;i<9;i++)
	{
		for(j=0;j<11;j++)
		{
			if(map[i][j]==2||map[i][j]==6)
			{
				a=i;
				b=j;
			}
		}
	 } 
	 int k=1;
	 c=getch();
	 if(c=='p')
	 	return 2;
	 switch(c)
	 {
	 	case 'w':
	 	case 'W':
	 	case 72:
			if(map[a-1][b]==0||map[a-1][b]==4)
		 	{
		 		map[a-1][b]+=2;
		 		map[a][b]-=2;
			 }
			 if(map[a-1][b]==3||map[a-1][b]==7)
			 {
			 	if(map[a-2][b]==0||map[a-2][b]==4)
			 	{
			 		map[a][b]-=2;
			 		map[a-1][b]-=1;
			 		map[a-2][b]+=3;
				 }
			 }
			break;
		case 's' :
		case 'S':
		case 80:
			if(map[a+1][b]==0||map[a+1][b]==4)
			{
				map[a+1][b]+=2;
				map[a][b]-=2;
			}
			if(map[a+1][b]==3||map[a+1][b]==7)
			{
				if(map[a+2][b]==0||map[a+2][b]==4)
				{
					map[a+1][b]-=1;
					map[a][b]-=2;
					map[a+2][b]+=3;
				}
			}
			break;
		case 'a':
		case 'A':
		case 75:
			if(map[a][b-1]==0||map[a][b-1]==4)
			{
				map[a][b]-=2;
				map[a][b-1]+=2;
			}
			if(map[a][b-1]==3||map[a][b-1]==7)
			{
				if(map[a][b-2]==0||map[a][b-2]==4)
				{
					map[a][b]-=2;
					map[a][b-1]-=1;
					map[a][b-2]+=3;
				}
			}
			break;
		case 'd':
		case 'D':
		case 77 :
			if(map[a][b+1]==0||map[a][b+1]==4)
			{
				map[a][b]-=2;
				map[a][b+1]+=2;
			}
			if(map[a][b+1]==3||map[a][b+1]==7)
			{
				if(map[a][b+2]==0||map[a][b+2]==4)
				{
					map[a][b]-=2;
					map[a][b+1]-=1;
					map[a][b+2]+=3;
				}
			}
			break;
		//case'p': k=2;  break; 
	 }
	printf(" ");
	 //system("pause");
	 //if(k==2)
	 return k;
}
int main()
{
	printf("***********推箱子游戏欢迎你***********\n");
	printf("*                                    *\n");
	printf("*       ♀:自己的位置                *\n");
	printf("*       ◇:箱子的位置                *\n");
	printf("*       ◎:终点的位置                *\n");
	printf("*          游戏规则                  *\n");
	printf("*     控制♀将◇推到◎的位置         *\n");
	printf("*     按“w,s,a,d”或方向键控制移动  *\n");
	printf("*     按“p”退出游戏                *\n");
	printf("**************************************\n");
	system("pause");
	int k=1;
	while(1) 
	{
		
		system("cls");
		k=map0();
		if(k==0)
		{
			break;
		}
		if(k==2)
		return 0;
	}
	while(1)
	{
		system("cls");
		k=map1();
		if(k==0)
		break;
		if(k==2)
		return 0;
	}
	while(1)
	{
		system("cls");
		k=map2();
		if(k==0)
		break;
		if(k==2)
		return 0;
	}
	while(1)
	{
		system("cls");
		k=map3();
		if(k==0)
		break;
		if(k==2)
		return 0;
	}
	while(1)
	{
		system("cls");
		k=map4();
		if(k==0)
		break;
		if(k==2)
		return 0;
	}
}
相关标签: C /C++ c语言