鱼C论坛

 找回密码
 立即注册
查看: 975|回复: 0

[技术交流] 写的一个推箱子的小游戏,只有一关,可以设计为多关卡,各位让我看看你们能写多少关

[复制链接]
发表于 2018-12-12 16:19:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. void keydown();
  5. void draw();
  6. int yanzheng();
  7. int a[8][8]={
  8.                 {1,1,1,1,1,1,1,1},
  9.                 {1,1,0,0,0,0,1,1},
  10.                 {1,1,0,1,0,0,1,1},
  11.                 {1,0,0,1,1,0,1,1},
  12.                 {1,0,4,4,3,3,0,1},
  13.                 {1,0,0,0,1,1,0,1},
  14.                 {1,1,5,0,1,0,0,1},
  15.                 {1,1,1,1,1,1,1,1}
  16.         };
  17. //打印一个8行8列的map
  18. void draw()
  19. {
  20.        
  21.         //0:空的 1:▆ 3:☆ 4:★ 5:※ 7:⊙ 8:※
  22.         int i,j;
  23.         for(i=0;i<8;i++)
  24.         {
  25.                 for(j=0;j<8;j++)
  26.                 {
  27.                         switch(a[i][j])
  28.                         {
  29.                         case 1:
  30.                                 printf("▆");     //表示墙壁
  31.                                 break;
  32.                         case 0:
  33.                                 printf("  ");     //表示空地
  34.                                 break;
  35.                         case 3:
  36.                                 printf("☆");     //表示目的地
  37.                                 break;
  38.                         case 4:
  39.                                 printf("★");     //表示箱子
  40.                                 break;
  41.                         case 5:
  42.                                 printf("※");     //表示人
  43.                                 break;
  44.                         case 7:
  45.                                 printf("⊙");     //表示箱子在目的地
  46.                                 break;
  47.                         case 8:
  48.                                 printf("※");      //表示人站在目的地上
  49.                                 break;
  50.                         }
  51.                 }
  52.                 printf("\n");
  53.         }
  54. }
  55. //键盘输入与游戏逻辑
  56. void keydown()
  57. {
  58.         int i,j;
  59.         char c=_getch();    //看不家的字符输入,要加头文件coni0.h
  60.         for(i=0;i<8;i++)      
  61.         {
  62.                 for(j=0;j<8;j++)
  63.                 {
  64.                         if(a[i][j]==5||a[i][j]==8)
  65.                         {
  66.                                 break;
  67.                         }
  68.                 }
  69.                 if(a[i][j]==5||a[i][j]==8)
  70.                         {
  71.                                 break;
  72.                         }
  73.         }                    //找到人的位置
  74.         switch(c)
  75.         {
  76.         case 'w':
  77.         case 'W':
  78.         case 72:
  79.                 {
  80.                         if(a[i-1][j]==0||a[i-1][j]==3)      //判断前方是不是空地或者目的地
  81.                         {
  82.                                 a[i-1][j]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
  83.                                 a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
  84.                         }
  85.                         else if(a[i-1][j]==4||a[i-1][j]==7)    //判断前方是不是箱子或者箱子在目的地上
  86.                         {
  87.                                 if(a[i-2][j]==0||a[i-2][j]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
  88.                                 {
  89.                                         a[i-2][j]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
  90.                                         a[i-1][j]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
  91.                                         a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
  92.                                 }   
  93.                         }
  94.                 }
  95.                 break;                             //前进变换
  96.         case 's':
  97.         case 'S':
  98.         case 80:
  99.                 {
  100.                                 if(a[i+1][j]==0||a[i+1][j]==3)      //判断前方是不是空地或者目的地
  101.                         {
  102.                                 a[i+1][j]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
  103.                                 a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
  104.                         }
  105.                         else if(a[i+1][j]==4||a[i+1][j]==7)    //判断前方是不是箱子或者箱子在目的地上
  106.                         {
  107.                                 if(a[i+2][j]==0||a[i+2][j]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
  108.                                 {
  109.                                         a[i+2][j]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
  110.                                         a[i+1][j]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
  111.                                         a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
  112.                                 }   
  113.                         }
  114.                 }
  115.                 break;                             //后退变换
  116.         case 'a':
  117.         case 'A':
  118.         case 75:
  119.                 {
  120.                                 if(a[i][j-1]==0||a[i][j-1]==3)      //判断前方是不是空地或者目的地
  121.                         {
  122.                                 a[i][j-1]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
  123.                                 a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
  124.                         }
  125.                         else if(a[i][j-1]==4||a[i][j-1]==7)    //判断前方是不是箱子或者箱子在目的地上
  126.                         {
  127.                                 if(a[i][j-2]==0||a[i][j-2]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
  128.                                 {
  129.                                         a[i][j-2]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
  130.                                         a[i][j-1]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
  131.                                         a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
  132.                                 }   
  133.                         }
  134.                 }
  135.                 break;                             //向左变换
  136.         case 'd':
  137.         case 'D':
  138.         case 77:
  139.                 {
  140.                 if(a[i][j+1]==0||a[i][j+1]==3)      //判断前方是不是空地或者目的地
  141.                         {
  142.                                 a[i][j+1]+=5;                    //把上一个赋值加上5,表示人或者人站在目的地的上
  143.                                 a[i][j]-=5;                     //把原来的赋值减5,表示空地或者目的地
  144.                         }
  145.                         else if(a[i][j+1]==4||a[i][j+1]==7)    //判断前方是不是箱子或者箱子在目的地上
  146.                         {
  147.                                 if(a[i][j+2]==0||a[i][j+2]==3)     //在原来的判断上判断前方的前方是不是空地或者目的地
  148.                                 {
  149.                                         a[i][j+2]+=4;                //把前方的前方的赋值加4,表示箱子或者箱子在目的地上
  150.                                         a[i][j+1]+=1;                //把前方的赋值加1,表示表示人或者人站在目的地的上
  151.                                         a[i][j]-=5;                 //把原来位置的赋值减5,表示空地或者目的地
  152.                                 }   
  153.                         }
  154.                 }
  155.                 break;                               //向右变换
  156.         }
  157. }
  158. //验证是否已经结束游戏
  159. int yanzheng()
  160. {
  161.         int i,j;
  162.         int count=0;
  163.         for(i=0;i<8;i++)
  164.         {
  165.                 for(j=0;j<8;j++)
  166.                 {
  167.                         if(a[i][j]==7)
  168.                         {
  169.                                 count+=1;
  170.                         }
  171.                 }
  172.         }
  173.         return count;
  174. }
  175. int main()
  176. {
  177.         int c;
  178.         while(1)
  179.         {
  180.                 draw();
  181.                 c=yanzheng();
  182.                 if(c==2)
  183.                 {
  184.                         printf("game over\n");
  185.                         break;
  186.                 }
  187.         keydown();
  188.                 system("cls");
  189.         }
  190.         system("pause");
  191.         return 0;
  192. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表