这是一个简单的推箱子游戏,使用Visual C++ 6.0 进行编程。
部分关卡参照手机推箱子游戏而设计,只需要把二维数组int map[9][11]进行自我修改,即可设计出自己想要的地图。
代码如下:
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<windows.h>
int map0[9][11] = {
{1,1,1,1,1,1,1,1,1,1,1}, //0代表空地
{1,5,4,3,0,0,0,0,0,0,1}, //1代表墙
{1,0,0,0,0,0,0,0,0,0,1}, //3代表目的地
{1,0,0,0,0,0,0,0,0,0,1}, //4代表箱子
{1,0,0,0,0,0,0,0,0,0,1}, //5代表人
{1,0,0,0,0,0,0,0,0,0,1}, //7代表箱子在目的地
{1,0,0,0,0,0,0,0,0,0,1}, //8代表人在目的地
{1,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1} };
int map1[9][11] = {
{0,0,0,0,0,0,0,0,0,0,0}, //0代表空地
{0,0,1,1,1,1,0,0,0,0,0}, //1代表墙
{0,0,1,0,0,1,1,1,0,0,0}, //3代表目的地
{0,0,1,0,0,4,5,1,0,0,0}, //4代表箱子
{0,0,1,0,7,3,0,1,0,0,0}, //5代表人
{0,0,1,1,0,0,0,1,0,0,0}, //7代表箱子在目的地
{0,0,0,1,1,1,1,1,0,0,0}, //8代表人在目的地
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map2[9][11] = {
{0,0,1,1,1,1,1,0,0,0,0}, //0代表空地
{0,0,1,0,0,0,1,1,0,0,0}, //1代表墙
{0,0,1,0,0,7,0,1,1,1,0}, //3代表目的地
{0,0,1,1,0,7,0,5,0,1,0}, //4代表箱子
{0,0,0,1,0,7,0,0,0,1,0}, //5代表人
{0,0,0,1,4,3,4,1,1,1,0}, //7代表箱子在目的地
{0,0,0,1,0,3,0,1,0,0,0}, //8代表人在目的地
{0,0,0,1,1,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map3[9][11] = {
{0,0,1,1,1,1,0,0,0,0,0}, //0代表空地
{0,0,1,0,0,1,0,0,0,0,0}, //1代表墙
{0,0,1,0,0,1,1,1,0,0,0}, //3代表目的地
{0,0,1,0,0,4,0,1,0,0,0}, //4代表箱子
{0,0,1,1,7,1,3,1,0,0,0}, //5代表人
{0,0,1,0,0,5,0,1,0,0,0}, //7代表箱子在目的地
{0,0,1,0,0,0,0,1,0,0,0}, //8代表人在目的地
{0,0,1,0,0,1,1,1,0,0,0},
{0,0,1,1,1,1,0,0,0,0,0} };
int map4[9][11] = {
{0,0,0,0,0,0,0,0,0,0,0}, //0代表空地
{0,0,1,1,1,1,0,0,0,0,0}, //1代表墙
{0,0,1,0,0,1,0,0,0,0,0}, //3代表目的地
{0,0,1,0,0,1,0,0,0,0,0}, //4代表箱子
{0,0,1,0,5,1,1,1,0,0,0}, //5代表人
{0,0,1,0,4,4,0,1,0,0,0}, //7代表箱子在目的地
{0,0,1,3,0,0,3,1,0,0,0}, //8代表人在目的地
{0,0,1,1,1,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map5[9][11] = {
{0,0,0,0,0,0,0,0,0,0,0}, //0代表空地
{0,0,0,1,1,1,1,1,0,0,0}, //1代表墙
{0,0,0,1,0,0,0,1,0,0,0}, //3代表目的地
{0,0,0,1,3,1,4,1,1,0,0}, //4代表箱子
{0,0,0,1,0,0,5,0,1,0,0}, //5代表人
{0,0,0,1,3,0,4,0,1,0,0}, //7代表箱子在目的地
{0,0,0,1,1,1,0,0,1,0,0}, //8代表人在目的地
{0,0,0,0,0,1,1,1,1,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map6[9][11] = {
{0,0,1,1,1,1,1,0,0,0,0}, //0代表空地
{0,1,1,0,0,3,1,0,0,0,0}, //1代表墙
{0,1,0,4,1,3,1,0,0,0,0}, //3代表目的地
{0,1,0,0,0,0,1,1,0,0,0}, //4代表箱子
{0,1,1,0,1,0,0,1,0,0,0}, //5代表人
{0,0,1,4,0,5,0,1,0,0,0}, //7代表箱子在目的地
{0,0,1,0,0,0,1,1,0,0,0}, //8代表人在目的地
{0,0,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map7[9][11] = {
{0,0,0,0,0,0,0,0,0,0,0}, //0代表空地
{0,1,1,1,1,1,1,0,0,0,0}, //1代表墙
{0,1,0,0,0,0,1,0,0,0,0}, //3代表目的地
{0,1,0,4,4,4,1,1,0,0,0}, //4代表箱子
{0,1,0,0,1,3,3,1,1,1,0}, //5代表人
{0,1,1,0,0,3,3,4,0,1,0}, //7代表箱子在目的地
{0,0,1,0,5,0,0,0,0,1,0}, //8代表人在目的地
{0,0,1,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map8[9][11] = {
{0,0,0,1,1,1,1,0,0,0,0}, //0代表空地
{0,1,1,1,0,5,1,1,1,0,0}, //1代表墙
{0,1,0,3,0,3,0,0,1,0,0}, //3代表目的地
{0,1,0,4,4,0,0,0,1,0,0}, //4代表箱子
{0,1,1,1,0,7,1,1,1,0,0}, //5代表人
{0,0,0,1,0,0,1,0,0,0,0}, //7代表箱子在目的地
{0,0,0,1,0,0,1,0,0,0,0}, //8代表人在目的地
{0,0,0,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map9[9][11] = {
{0,0,0,0,0,0,0,0,0,0,0}, //0代表空地
{0,0,1,1,1,1,1,1,1,0,0}, //1代表墙
{0,0,1,0,4,3,0,0,1,0,0}, //3代表目的地
{0,0,1,0,0,3,3,3,1,0,0}, //4代表箱子
{0,0,1,1,4,0,7,0,1,0,0}, //5代表人
{0,0,1,5,4,0,4,1,1,0,0}, //7代表箱子在目的地
{0,0,1,0,0,0,0,1,0,0,0}, //8代表人在目的地
{0,0,1,1,1,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map10[9][11] = {
{0,0,1,1,1,1,1,1,1,0,0}, //0代表空地
{0,0,1,0,3,1,3,0,1,0,0}, //1代表墙
{0,0,1,0,0,4,0,0,1,0,0}, //3代表目的地
{0,0,1,3,4,0,4,3,1,0,0}, //4代表箱子
{0,0,1,0,4,5,4,0,1,0,0}, //5代表人
{0,0,1,3,4,0,4,3,1,0,0}, //7代表箱子在目的地
{0,0,1,0,0,4,0,0,1,0,0}, //8代表人在目的地
{0,0,1,0,3,1,3,0,1,0,0},
{0,0,1,1,1,1,1,1,1,0,0} };
int map11[9][11] = {
{0,0,0,1,1,1,1,0,0,0,0}, //0代表空地
{0,0,0,1,5,0,1,0,0,0,0}, //1代表墙
{0,0,0,1,0,4,1,1,1,0,0}, //3代表目的地
{0,1,1,1,4,0,0,3,1,0,0}, //4代表箱子
{0,1,0,0,0,0,1,0,1,0,0}, //5代表人
{0,1,0,7,4,3,0,0,1,0,0}, //7代表箱子在目的地
{0,1,1,1,0,3,1,1,1,0,0}, //8代表人在目的地
{0,0,0,1,0,0,1,0,0,0,0},
{0,0,0,1,1,1,1,0,0,0,0} };
int map12[9][11] = {
{0,0,0,0,0,1,1,1,1,0,0}, //0代表空地
{0,0,1,1,1,1,0,5,1,0,0}, //1代表墙
{0,0,1,0,0,4,4,0,1,0,0}, //3代表目的地
{0,0,1,0,3,0,4,0,1,0,0}, //4代表箱子
{0,0,1,1,3,3,0,1,1,0,0}, //5代表人
{0,0,0,1,1,1,1,1,0,0,0}, //7代表箱子在目的地
{0,0,0,0,0,0,0,0,0,0,0}, //8代表人在目的地
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map13[9][11] = {
{0,0,1,1,1,1,0,0,0,0,0}, //0代表空地
{0,0,1,0,0,1,1,0,0,0,0}, //1代表墙
{0,0,1,5,3,0,1,0,0,0,0}, //3代表目的地
{0,0,1,3,7,4,1,1,0,0,0}, //4代表箱子
{0,0,1,0,0,4,0,1,0,0,0}, //5代表人
{0,0,1,0,0,0,0,1,0,0,0}, //7代表箱子在目的地
{0,0,1,1,1,1,1,1,0,0,0}, //8代表人在目的地
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map14[9][11] = {
{0,0,0,0,0,0,0,0,0,0,0}, //0代表空地
{0,1,1,1,1,1,1,0,0,0,0}, //1代表墙
{0,1,0,0,0,0,1,1,1,0,0}, //3代表目的地
{0,1,0,0,0,3,3,0,1,0,0}, //4代表箱子
{0,1,0,4,4,4,5,0,1,0,0}, //5代表人
{0,1,0,0,1,0,3,1,1,0,0}, //7代表箱子在目的地
{0,1,1,1,1,1,1,1,0,0,0}, //8代表人在目的地
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0} };
int map15[9][11] = {
{0,1,1,1,1,1,1,1,1,1,0}, //0代表空地
{0,1,0,0,0,1,0,0,0,1,0}, //1代表墙
{0,1,0,4,4,4,4,4,0,1,0}, //3代表目的地
{0,1,0,4,0,4,0,4,0,1,1}, //4代表箱子
{0,1,0,0,0,0,0,0,4,0,1}, //5代表人
{1,1,0,1,1,1,1,0,4,0,1}, //7代表箱子在目的地
{1,0,8,3,3,3,3,1,0,0,1}, //8代表人在目的地
{1,0,3,3,3,3,3,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,0} };
//绘制地图 //二维数组+switch()
void DrawMap(int map[][11])
{
//遍历二维数组
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 11; j++)
{
switch (map[i][j])
{
case 0:
printf(" ");//0 打印空格
break;
case 1:
printf("■");//1 墙
break;
case 3:
printf("☆");//3 目的地
break;
case 4:
printf("□");//4 箱子
break;
case 5:
printf("♀");//5 小人
break;
case 7:
printf("★");//4 + 3 箱子在目的地中
break;
case 8:
printf("♀");// 5 + 3 人在目的地当中
break;
}
}
printf("\n");
}
}
void PlayGame(int map[][11])
{
int r, c; //人的下标
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 11; j++)
{
if (map[i][j] == 5||map[i][j]==8) //i j 人的下标
{
r = i;
c = j;
}
}
}
char ch; //字符变量
ch = getch(); //键盘的输入保存到字符中
switch (ch)
{
case 'W': //W A S D方向 72 80 75 77
case 'w':
case 72:
if (map[r - 1][c] == 0|| map[r - 1][c] == 3)
{
map[r - 1][c] += 5;
map[r][c] -= 5;
}
else if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
{
if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
{
map[r - 2][c] += 4;
map[r - 1][c] += 1;
map[r][c] -= 5;
}
}
break;
case 'S':
case 's':
case 80:
if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
{
map[r + 1][c] += 5;
map[r][c] -= 5;
}
else if (map[r + 1][c] == 4 || map[r+ 1][c] == 7)
{
if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
{
map[r + 2][c] += 4;
map[r + 1][c] += 1;
map[r][c] -= 5;
}
}
break;
case 'A':
case 'a':
case 75:
if (map[r ][c - 1] == 0 || map[r ][c - 1] == 3)
{
map[r ][c - 1] += 5;
map[r][c] -= 5;
}
else if (map[r][c - 1] == 4 || map[r][c - 1] == 7)
{
if (map[r ][c - 2] == 0 || map[r ][c - 2] == 3)
{
map[r ][c - 2] += 4;
map[r ][c - 1] += 1;
map[r][c] -= 5;
}
}
break;
case 'D':
case 'd':
case 77:
if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
{
map[r][c + 1] += 5;
map[r][c] -= 5;
}
else if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
{
if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
{
map[r][c + 2] += 4;
map[r][c + 1] += 1;
map[r][c] -= 5;
}
}
break;
}
}
int judgepoint(int map[][11])
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<11;j++)
{
if(map[i][j]==0||map[i][j]==1||map[i][j]==3||map[i][j]==5||map[i][j]==7||map[i][j]==8)
{
if(i==8&&j==10)
{
return 0;//过关
}
}else
{
break;
}
}
if(map[i][j]==4)
break;
}
}
void play(int map0[][11])
{
char ch;
int n=1;
while (n)
{
system("cls");
n=judgepoint(map0);
DrawMap(map0);
PlayGame(map0);
}
printf("\n真厉害!恭喜你过关啦!\n");
printf("5秒后返回界面...\n");
Sleep(5000);
system("cls");
}
void begin()
{
printf("******************************************************\n");
printf("* * * * * *\n");
printf("* * * * **** ***** *********** *\n");
printf("* **** ** ***** ** * ** * *** *\n");
printf("* * * * * * ***** *** *\n");
printf("* ** * ***** ***** * * ************** *\n");
printf("* ** * * * ***** ** *\n");
printf("* * * * ***** *** ***** ** *\n");
printf("* *** ** * * * * * **** *\n");
printf("* * * ***** * * ***** ** *\n");
printf("* *\n");
printf("* 1,现有关卡共15关,请玩家斟酌选择; *\n");
printf("* 2,提示: *\n");
printf("* 人♀ 箱子□ 目的地☆ 到位后★ 墙■ *\n");
printf("* 上W 下S 左A 右D *\n");
printf("* 3,推完请随便移动一步(判定过关) *\n");
printf("******************************************************\n");
}
int main() //主函数
{
int s;
while(1)
{
begin();
printf("请输入关卡:");
scanf("%d",&s);
printf("加载中...");
Sleep(3000);
system("cls");
switch(s)
{
case 0:play(map0);break;
case 1:play(map1);break;
case 2:play(map2);break;
case 3:play(map3);break;
case 4:play(map4);break;
case 5:play(map5);break;
case 6:play(map6);break;
case 7:play(map7);break;
case 8:play(map8);break;
case 9:play(map9);break;
case 10:play(map10);break;
case 11:play(map11);break;
case 12:play(map12);break;
case 13:play(map13);break;
case 14:play(map14);break;
case 15:play(map15);break;
default:printf("输入有误!\n\a");
}
}
return 0;
}