問題描述:
一天嘻哈華的弟弟正在玩一款推箱子遊戲,他就想我能不能自己寫個推箱子遊戲呢?
源代碼:
// 擷取并列印地圖
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;
}