天天看點

推箱子遊戲 —— 代碼我來寫

問題描述:

                一天嘻哈華的弟弟正在玩一款推箱子遊戲,他就想我能不能自己寫個推箱子遊戲呢?

源代碼:

//   擷取并列印地圖
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;
}
           

繼續閱讀