C++选关的推箱子游戏编程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdafx.h"
#include //标准输入输出头文件
#include //system函数的头文件
#include //getch函数的头文件

int i,j;

void draw_map(int map[10][13]); //声明画图函数
void draw_map(int map[10][13])
{
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<13;j++)
{
switch(map[i][j])
{
case 0:
printf(" "); //数字0代表道路
break;
case 1:
printf("■"); //数字1代表墙壁
break;
case 2:
printf(" "); //数字2是游戏边框的空白部分
break;
case 3:
printf("×"); //数字3代表目的地
break;
case 4:
printf("●"); //数字4代表箱子
break;
case 7:
printf("㊣"); //数字7代表箱子进入目的地
break;
case 6:
printf("♂"); //数字6代表人
break;
case 8:
printf("\t\t\t"); //数字6代表人
break;
case 9:
printf("♂"); //数字9代表人进入目的地
break;
}
}
printf("\n"); //分10行输出
}
}


void first()
{
char input;
int count=0; //定义记分变量

int map[10][13] =
{
{8,2,2,2,2,2,1,1,1,1,1,2,2},
{8,1,1,1,1,2,1,0,0,0,1,1,2},
{8,1,0,0,1,1,1,0,1,0,0,1,2},
{8,1,0,4,3,3,3,3,3,1,0,1,1},
{8,1,0,0,1,1,3,3,3,4,0,0,1},
{8,1,0,0,0,0,4,1,1,4,1,0,1},
{8,1,0,4,1,4,0,0,0,4,0,0,1},
{8,1,1,0,6,0,1,1,1,4,1,0,1},
{8,2,1,1,1,1,1,2,1,0,0,0,1},
{8,2,2,2,2,2,2,2,1,1,1,1,1}

};
while (1)
{
system("color 0A");
system("CLS");
draw_map(map);
printf("\n\n\t\t\t当前得分:%d\n",count);

for (i=0;i<10;i++)
{
for (j=0;j<12;j++)
{
if (map[i][j]==6||map[i][j]==9)
break;
}
if (map[i][j]==6||map[i][j]==9)
break;
}
printf("\n\t\t\t您的当前坐标(%d,%d)",i,j);
printf("\n\n\t\t\t加油哦!^-^");
input = getch();

switch (input)
{

case 'w':

//如果人前面是空地。
if(map[

i-1][j]==0)
{
map[i-1][j]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}


else if(map[i-1][j]==3)
{
map[i-1][j]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人前面是箱子。
else if(map[i-1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i-2][j]==0)
{
map[i-2][j]=4;

if(map[i-1][j]==7)
map[i-1][j]=9;
else
map[i-1][j]=6;


if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i-2][j]==3)
{
map[i-2][j]=7;
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i-1][j]==7)
map[i-1][j]=9;
else
map[i-1][j]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}

//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i-1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i-2][j]==0)
{
count--;
map[i-2][j]=4;
map[i-1][j]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i-2][j]==3)
{
map[i-2][j]=7;
map[i-1][j]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;

case 's':

//如果人前面是空地。
if(map[i+1][j]==0)
{
map[i+1][j]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是目的地。
else if(map[i+1][j]==3)
{
map[i+1][j]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人前面是箱子。
else if(map[i+1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i+2][j]==0)
{
map[i+2][j]=4;
//下面是对箱子原地进行判断
if(map[i+1][j]==7) //如果箱子原地为目的地。
map[i+1][j]=9;
else
map[i+1][j]=6;

//下面是对人原地进行判断

if(map[i][j]==9) //如果之前是

目的地。
map[i][j]=3;
else
map[i][j]=0;
}

//如果人的前面是箱子,而箱子前面是目的地。

else if (map[i+2][j]==3)
{
map[i+2][j]=7;
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i+1][j]==7)
map[i+1][j]=9;
else
map[i+1][j]=6;

//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}

//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i+1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i+2][j]==0)
{
count--;
map[i+2][j]=4;
map[i+1][j]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i+2][j]==3)
{
map[i+2][j]=7;
map[i+1][j]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 'a':
//如果人前面是空地。
if(map[i][j-1]==0)
{
map[i][j-1]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是目的地。
else if(map[i][j-1]==3)
{
map[i][j-1]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是箱子。
else if(map[i][j-1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i][j-2]==0)
{
map[i][j-2]=4;
//下面是对箱子原地进行判断
if(map[i][j-1]==7)
map[i][j-1]=9;
else
map[i][j-1]=6;
//下面是对人原地进行判断
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i][j-2]==3)
{
count++;
map[i][j-2]=7;
//下面是对箱子原先位置的判断,同上。
if(map[i][j-1]==7)
map[i][j-1]=9;
else
map[i][j-1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i][j-1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j-2]==0)
{
count--;
map[

i][j-2]=4;
map[i][j-1]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j-2]==3)
{
map[i][j-2]=7;
map[i][j-1]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 'd':
//如果人前面是空地。
if(map[i][j+1]==0)
{
map[i][j+1]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是目的地。
else if(map[i][j+1]==3)
{
map[i][j+1]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是箱子。
else if(map[i][j+1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i][j+2]==0)
{
map[i][j+2]=4;
//下面是对箱子原地进行判断
if(map[i][j+1]==7)
map[i][j+1]=9;
else
map[i][j+1]=6;
//下面是对人原地进行判断
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i][j+2]==3)
{
count++;
map[i][j+2]=7;
//下面是对箱子原先位置的判断,同上。
if(map[i][j+1]==7)
map[i][j+1]=9;
else
map[i][j+1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i][j+1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j+2]==0)
{
count--;
map[i][j+2]=4;
map[i][j+1]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j+2]==3)
{
map[i][j+2]=7;
map[i][j+1]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
}
if(count==8) //如果分数达到8分
{
system("CLS"); //清屏
draw_map(map);
break; //退出死循环
}
}
printf("\n\n\t\t\t恭喜你,过关了!!\n"); //过关提示

}


void second()
{
char input;
int count=0; //定义记分变量

int map[10][13] =

{
{8,2,1,1,1,1,1,1,1,2,2,2,2},
{8,1,1,0,0,3,0,0,1,1,2,2,2},
{8,1,0,3,4,4,4,3,0,1,2,2,2},
{8,1,0,4,3,0,3,4,0,1,2,2,2},
{8,1,3,4,0,6,0,4,3,1,2,2,2},
{8,1,0,4,3,0,3,4,0,1,2,2,2},
{8,1,0,3,4,4,4,3,0,1,2,2,2},
{8,1,1,0,0,3,0,0,1,1,2,2,2},
{8,2,1,1,1,1,1,1,1,2,2,2,2},
{8,2,2,2,2,2,2,2,2,2,2,2,2}
};
while (1)
{
system("color 0A");
system("CLS");
draw_map(map);
printf("\n\n\t\t\t当前得分:%d\n",count);

for (i=0;i<10;i++)
{
for (j=0;j<12;j++)
{
if (map[i][j]==6||map[i][j]==9)
break;
}
if (map[i][j]==6||map[i][j]==9)
break;
}
printf("\n\t\t\t您的当前坐标(%d,%d)",i,j);
printf("\n\n\t\t\t加油哦!^-^");
input = getch();

switch (input)
{

case 'w':

//如果人前面是空地。
if(map[i-1][j]==0)
{
map[i-1][j]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}


else if(map[i-1][j]==3)
{
map[i-1][j]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人前面是箱子。
else if(map[i-1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i-2][j]==0)
{
map[i-2][j]=4;

if(map[i-1][j]==7)
map[i-1][j]=9;
else
map[i-1][j]=6;


if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i-2][j]==3)
{
map[i-2][j]=7;
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i-1][j]==7)
map[i-1][j]=9;
else
map[i-1][j]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}

//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i-1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i-2][j]==0)
{
count--;
map[i-2][j]=4;
map[i-1][j]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i-2][j]==3)
{
map[i-2][j]=7;
map[i-1][j]=9;
//下面是对人原先站立地进行判断,方法同上。

if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;

case 's':

//如果人前面是空地。
if(map[i+1][j]==0)
{
map[i+1][j]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是目的地。
else if(map[i+1][j]==3)
{
map[i+1][j]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}

//如果人前面是箱子。
else if(map[i+1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i+2][j]==0)
{
map[i+2][j]=4;
//下面是对箱子原地进行判断
if(map[i+1][j]==7) //如果箱子原地为目的地。
map[i+1][j]=9;
else
map[i+1][j]=6;

//下面是对人原地进行判断

if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3;
else
map[i][j]=0;
}

//如果人的前面是箱子,而箱子前面是目的地。

else if (map[i+2][j]==3)
{
map[i+2][j]=7;
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i+1][j]==7)
map[i+1][j]=9;
else
map[i+1][j]=6;

//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}

//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i+1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i+2][j]==0)
{
count--;
map[i+2][j]=4;
map[i+1][j]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i+2][j]==3)
{
map[i+2][j]=7;
map[i+1][j]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 'a':
//如果人前面是空地。
if(map[i][j-1]==0)
{
map[i][j-1]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是目的地。
else if(map[i][j-1]==3)
{
map[i][j-1]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是箱子。
else if(map[i][j-1]==4)
{
//如果人前面是箱子,而箱子前面是

空地。
if (map[i][j-2]==0)
{
map[i][j-2]=4;
//下面是对箱子原地进行判断
if(map[i][j-1]==7)
map[i][j-1]=9;
else
map[i][j-1]=6;
//下面是对人原地进行判断
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i][j-2]==3)
{
count++;
map[i][j-2]=7;
//下面是对箱子原先位置的判断,同上。
if(map[i][j-1]==7)
map[i][j-1]=9;
else
map[i][j-1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i][j-1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j-2]==0)
{
count--;
map[i][j-2]=4;
map[i][j-1]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j-2]==3)
{
map[i][j-2]=7;
map[i][j-1]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 'd':
//如果人前面是空地。
if(map[i][j+1]==0)
{
map[i][j+1]=6+0;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是目的地。
else if(map[i][j+1]==3)
{
map[i][j+1]=6+3;
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是箱子。
else if(map[i][j+1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i][j+2]==0)
{
map[i][j+2]=4;
//下面是对箱子原地进行判断
if(map[i][j+1]==7)
map[i][j+1]=9;
else
map[i][j+1]=6;
//下面是对人原地进行判断
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i][j+2]==3)
{
count++;
map[i][j+2]=7;
//下面是对箱子原先位置的判断,同上。
if(map[i][j+1]==7)
map[i][j+1]=9;
else
map[i][j+1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i][j+1]==7)
{

//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j+2]==0)
{
count--;
map[i][j+2]=4;
map[i][j+1]=9;
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j+2]==3)
{
map[i][j+2]=7;
map[i][j+1]=9;
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
}
if(count==12) //如果分数达到12分
{
system("CLS"); //清屏
draw_map(map);
break; //退出死循环
}
}
printf("\n\n\t\t\t恭喜你,过关了!!\n"); //过关提示

}

int main()
{
int n;
char input;
system("color 0A");
printf("\n\t----欢迎使用本游戏!本游戏共分为两关,第1关简单,第2关困难。----\n");
printf("\n\t\t操作说明:\n\n\t\t\t w 上、s 下、a 左、d 右\n");
printf("\n\t\t请输入您所选的关数(1 / 2):");
scanf("%d",&n);
if(n!=1 && n!=2)
{
printf("\n\t\t\t输入错误!\n");
}
if(n==1)
{
first();
printf("\t\t\t请玩另一关!确认请按 y 键:");
}
if(n==2)
{
second();
printf("\t\t\t请玩另一关!确认请按 y 键:");
}

input=getch();
switch(input)
{
case 'y':

if(n==1)
second();
if(n==2)
first();
}

return 0;

}

相关文档
最新文档