C语言《推箱子》游戏设计

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <getch.h>
  4 
  5 int main()
  6 {
  7     // 定义地图
  8     int map[8][8] = {
  9         {0,0,1,1,1,1,0,0},
 10         {0,0,1,4,4,1,0,0},
 11         {0,1,1,0,4,1,1,0},
 12         {0,1,0,0,3,4,1,0},
 13         {1,1,0,3,0,0,1,1},
 14         {1,0,0,1,3,3,0,1},
 15         {1,0,0,2,0,0,0,1},
 16         {1,1,1,1,1,1,1,1},
 17         };
 18 
 19     // 定义初始位置
 20     char x = 6,y = 3;
 21 
 22     // 定义步数变量
 23     short step = 0;
 24 
 25     for(;;)
 26     {
 27         system("clear");    // 清屏
 28         int cnt = 0;
 29         for(int i=0;i<8;i++)
 30             {
 31                 for(int j =0;j<8;j++)
 32                 {
 33                     switch(map[i][j])   // 打印地图
 34                     {
 35                         case 0:printf("  ");break;
 36                         case 1:printf("# ");break;
 37                         case 2:case 6:printf("@ ");break;
 38                         case 3:printf("$ ");break;
 39                         case 4:printf("o ");break;
 40                         case 7:printf("$ ");cnt++;break;
 41                     }
 42                 }
 43                 printf("\n");
 44             }
 45             if(cnt == 4)   // 判断是否结束
 46             {
 47                 printf("游戏结束,一共用了%d步\n",step);
 48                 return 0;
 49             }
 50             char ox = 0,oy = 0;
 51             switch(getch())   // 获取方向键(以统一偏移量定义下一步)
 52             {
 53                 case 183:ox--;break;
 54                 case 184:ox++;break;
 55                 case 186:oy--;break;
 56                 case 185:oy++;break;
 57             }
 58 
 59             if(0 == map[x+ox][y+oy] || 4 == map[x+ox][y+oy])
 60             {
 61                 map[x+ox][y+oy] += 2;
 62                 map[x][y] -= 2;
 63                 x += ox;
 64                 y += oy;
 65                 step++;
 66             }
 67             else if(3 == map[x+ox][y+oy] || 7 == map[x+ox][y+oy])
 68             {
 69                 if(0 == map[x+ox*2][y+oy*2] || 4 == map[x+ox*2][y+oy*2])
 70                 {
 71                     map[x+ox*2][y+oy*2] += 3;
 72                     map[x+ox][y+oy] -= 1;
 73                     map[x][y] -= 2;
 74                     x += ox;
 75                     y += oy;
 76                     step++;
 77                 }
 78             }
 79     }
 80 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值