问题描述:
一天嘻哈华的弟弟正在玩一款推箱子游戏,他就想我能不能自己写个推箱子游戏呢?
源代码:
// 获取并打印地图
void getMap(){
int i, j;
for(i=0; i<INF; i++){
for(j=0; j<INF; j++){
switch(MAP[i][j]){
case 0: printf(" ");break; // 空地
case 1: printf("□");break; // 墙
case 2: printf("■");break; // 箱子
case 3: printf("♀");break; // 人
case 5: printf("☆");break; // 目的地
case 7: printf("★");break; // 箱子+目的地
case 8: printf("※");break; // 人+目的地
}
}
printf("\n");
}
}
// 开始操作游戏
// ************************************************** //
// 控制移动
//
// 移动的关键点:
// 获取到人的位置,
// 然后改变其上下
// 左右四点即可。
// ************************************************** //
void game(){
int i, j;
int x, y;// 保存人的位置
char ch ;
for(i=0; i<INF; i++){
for(j=0; j<INF; j++){
if(3==MAP[i][j]||8==MAP[i][j]){
x = i;
y = j;
}
}
}
ch = getch();
switch(ch){
case 'w':
case 'W':
if(0==MAP[x-1][y] || 5==MAP[x-1][y]){ // 人的前面是空地或目的地
MAP[x][y] -= 3;
MAP[x-1][y] += 3;
}
if( (2==MAP[x-1][y] || 7==MAP[x-1][y])&&(0==MAP[x-2][y] || 5==MAP[x-2][y]) ){ // 人的前面是箱子,且箱子前面是空地或目的地
MAP[x][y] -= 3;
MAP[x-1][y] += 3-2;// = +人-箱子
MAP[x-2][y] += 2;
}
break;
case 's':
case 'S':
if(0==MAP[x+1][y] || 5==MAP[x+1][y]){
MAP[x][y] -= 3;
MAP[x+1][y] += 3;
}
if( (2==MAP[x+1][y] || 7==MAP[x+1][y])&&(0==MAP[x+2][y] || 5==MAP[x+2][y]) ){
MAP[x][y] -= 3;
MAP[x+1][y] += 3-2;
MAP[x+2][y] += 2;
}
break;
case 'a':
case 'A':
if(0==MAP[x][y-1] || 5==MAP[x][y-1]){
MAP[x][y] -= 3;
MAP[x][y-1] += 3;
}
if( (2==MAP[x][y-1] || 7==MAP[x][y-1])&&(0==MAP[x][y-2] || 5==MAP[x][y-2]) ){
MAP[x][y] -= 3;
MAP[x][y-1] += 3-2;
MAP[x][y-2] += 2;
}
break;
case 'd':
case 'D':
if(0==MAP[x][y+1] || 5==MAP[x][y+1]){
MAP[x][y] -= 3;
MAP[x][y+1] += 3;
}
if( (2==MAP[x][y+1] || 7==MAP[x][y+1])&&(0==MAP[x][y+2] || 5==MAP[x][y+2]) ){
MAP[x][y] -= 3;
MAP[x][y+1] += 3-2;
MAP[x][y+2] += 2;
}
break;
}
}
// 主函数
#include <stdio.h>
#define INF 10
void getMap();
void game();
int MAP[INF][INF] = {
{0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,0,0,0,0},
{0,1,3,0,0,1,0,0,0,0},
{0,1,0,2,2,1,0,1,1,1},
{0,1,0,2,0,1,0,1,5,1},
{0,1,1,1,0,1,1,1,5,1},
{0,0,1,1,0,0,0,0,5,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}};
int main() {
while(1){
system("cls");
getMap();
if(MAP[4][8]==7&&MAP[5][8]==7&&MAP[6][8]==7){
printf("恭喜你闯关成功。");
break;
}
game();
}
return 0;
}