推箱子游戏 —— 代码我来写

问题描述:

                一天嘻哈华的弟弟正在玩一款推箱子游戏,他就想我能不能自己写个推箱子游戏呢?

源代码:

//   获取并打印地图
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;
}

 

  • 15
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值