请选择 进入手机版 | 继续访问电脑版
工作室 好人游戏乱跑,解决方案 投稿
鼠标 宏命令 手游 工作室文化
快打器 微信 常见问题 常用平板与手机
魔兽视频
查看: 1305|回复: 0

[C语言] c语言写一个简单的小游戏-推箱子

[复制链接]
  • TA的每日心情
    开心
    2019-9-24 12:14
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    405

    主题

    1454

    帖子

    6601

    积分

    实习版主

    Rank: 7Rank: 7Rank: 7

    UID
    19
    帖子
    1454
    精华
    2
    威望
    551
    贡献
    135
    虾币
    3902
    阅读权限
    100
    注册时间
    2013-9-14

    热心会员永不封号灌水之王勤奋版主游戏达人美女勋章

    发表于 2019-10-11 14:39:44 | 显示全部楼层 |阅读模式

    推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图。

    1. /***********************************************
    2.       文件名称:main.c
    3.           文件描述:C语言写一个简单的小游戏
    4.           编译环境:DEV C++
    5.           初写时间:2018年8月3日
    6.           修改时间:2018年8月3日  
    7. ***********************************************/
    8. #include<stdio.h>
    9. #include<conio.h>
    10. #include<windows.h>

    11. int map[9][11]={
    12.         {0,1,1,1,1,1,1,1,1,1,0},
    13.         {0,1,0,0,0,1,0,0,0,1,0},
    14.         {0,1,0,3,3,3,3,3,0,1,0},
    15.         {0,1,0,3,0,3,0,3,0,1,1},
    16.         {0,1,0,0,0,2,0,0,3,0,1},
    17.         {1,1,0,1,1,1,1,0,3,0,1},
    18.         {1,0,4,4,4,4,4,1,0,0,1},
    19.         {1,0,4,4,4,4,4,0,0,1,1},
    20.         {1,1,1,1,1,1,1,1,1,1,0}
    21.         };//原始的图表,五行六列,其中 0 代表着空白的地方; 1 代表着墙;2 代表着人;
    22.                       //3 代表着箱子;4 代表着箱子的中点位置。

    23.                       //图的变化要靠自己来编写数组,通过数字来进行图的构造。
    24. int drawmain();
    25. int tuidong();
    26. int winshu();

    27. int main()//主函数
    28. {
    29.         while(1)
    30.     {
    31.             system("cls");//对其进行清屏
    32.          drawmain();
    33.          tuidong();
    34.       
    35.     }
    36.     printf("shuchu \n");
    37.         return 0;
    38. }
    39. //把图形刻画出来

    40. int drawmain()
    41. {        
    42.     int i,j;
    43.     winshu();//调用输赢的函数
    44.         for(i=0;i<9;i++)
    45.         {
    46.            for(j=0;j<11;j++)
    47.                       {
    48.                                  switch(map[i][j])
    49.                                  {
    50.                                              case 0:
    51.                                                      printf("  "); //空白的地方
    52.                                                      break;
    53.                                              case 1:
    54.                                                      printf("■"); //墙
    55.                                                      break;
    56.                                              case 2:
    57.                                                      printf("♀"); //人
    58.                                             break;
    59.                                         case 3:
    60.                                                 printf("☆"); //箱子
    61.                                             break;
    62.                                     case 4:
    63.                                             printf("◎"); //终点地方
    64.                                              break;
    65.                                         case 6:
    66.                                                 printf("♂");//人加终点位置
    67.                                                 break;
    68.                                     case 7:
    69.                                             printf("★") ;//箱子加终点位置
    70.                                                 break;
    71.                                          }
    72.                           }
    73.            printf("\n");
    74.         }           
    75. }

    76. //进行小人的移动,整个移动的过程就是数组变化的过程
    77. int tuidong()
    78. {
    79.         int count,caw;//行和列
    80.         for(int i=0;i<9;i++)//确定人的位置
    81.         {
    82.                 for (int j=0;j<11;j++)
    83.                 {
    84.                         if(map[i][j]==2||map[i][j]==6)
    85.                         {
    86.                                 count=i;
    87.                                 caw=j;
    88.                         }
    89.                 }
    90.          }
    91.         int tui=getch();//与getchar()有区别的是:getchar()输入一个字符后需要回车来进行下一个字符的输入,
    92.                         //比较麻烦 ,getch()则不需要回车就能连续输入多个字符。
    93.     switch(tui)
    94.         {//上
    95.                 case 'W':
    96.                 case 72:
    97.                         // 1.人的前面是空地;
    98.                     // 2.人的前面是终点位置;
    99.                         // 3.人的前面是箱子
    100.                     //3.1.箱子的前面是空地;
    101.                         //3.2.箱子的前面是终点位置。
    102.                  if(map[count-1][caw]==0||map[count-1][caw]==4)
    103.                         {
    104.                                 map[count][caw]-=2;
    105.                                 map[count-1][caw]+=2;
    106.                         }
    107.                  else if(map[count-1][caw]==3||map[count-1][caw]==7)
    108.                         {
    109.                                 if(map[count-2][caw]==0||map[count-2][caw]==4)
    110.                                 {
    111.                               map[count][caw]-=2;
    112.                                   map[count-1][caw]-=1;
    113.                                   map[count-2][caw]+=3;
    114.                                 }
    115.                         }
    116.                 break;
    117.         
    118.            /* 移动的情况:
    119.         位置:
    120.            人   map[count][caw]
    121.            人的前面是空地   map[count-1][caw]
    122.            人的前面是终点位置   map[count-1][caw]
    123.            箱子的前面是空地或终点位置  map[count-2][caw]*/
    124.                
    125. //下
    126.             case 'S':
    127.             case 80://键值
    128.                      if(map[count+1][caw]==0||map[count+1][caw]==4)
    129.                         {
    130.                                 map[count][caw]-=2;
    131.                                 map[count+1][caw]+=2;
    132.                         }
    133.                
    134.                          else if(map[count+2][caw]==0||map[count+2][caw]==4)
    135.                         {
    136.                                    if(map[count+1][caw]==3||map[count+1][caw]==7)
    137.                                 {
    138.                               map[count][caw]-=2;
    139.                                   map[count+1][caw]-=1;
    140.                                   map[count+2][caw]+=3;
    141.                                 }
    142.                         }
    143.                         break;
    144. //左
    145.             case 'A':
    146.             case 75:
    147.                              if(map[count][caw-1]==0||map[count][caw-1]==4)
    148.                         {
    149.                                 map[count][caw]-=2;
    150.                                 map[count][caw-1]+=2;
    151.                         }
    152.                
    153.                           else if(map[count][caw-2]==0||map[count][caw-2]==4)
    154.                         {
    155.                                    if(map[count][caw-1]==3||map[count][caw-1]==7)
    156.                                 {
    157.                               map[count][caw]-=2;
    158.                                   map[count][caw-1]-=1;
    159.                                   map[count][caw-2]+=3;
    160.                                 }
    161.                         }
    162.                 break;
    163. //右
    164.             case 'D':
    165.                 case 77:
    166.                              if(map[count][caw+1]==0||map[count][caw+1]==4)
    167.                         {
    168.                                 map[count][caw]-=2;
    169.                                 map[count][caw+1]+=2;
    170.                         }
    171.                
    172.                           else if(map[count][caw+2]==0||map[count][caw+2]==4)
    173.                         {
    174.                              if(map[count][caw+1]==3||map[count][caw+1]==7)
    175.                                 {
    176.                               map[count][caw]-=2;
    177.                                   map[count][caw+1]-=1;
    178.                                   map[count][caw+2]+=3;
    179.                                 }
    180.                         }
    181.                     break;
    182.                      
    183. }
    184.         /*进行小人的上下左右的移动
    185.     移动的情况:
    186.              1.人的前面是空地;
    187.                  2.人的前面是终点位置;
    188.                  3.人的前面是箱子
    189.                       3.1.箱子的前面是空地;
    190.                           3.2.箱子的前面是终点位置。
    191.     不移动的情况:
    192.              1.人的前面是墙;
    193.                  2.人的前面是箱子;
    194.                       2.1.箱子的前面是墙 ;
    195.                       2.2.箱子的前面是箱子;
    196.         */
    197.         //分析后,要进行确定人的位置以及胜利的条件。
    198. }

    199. //整个游戏的输赢
    200. int winshu()
    201. {
    202.          int k=0;
    203.         for(int i=0;i<9;i++)
    204.         {
    205.                 for (int j=0;j<11;j++)
    206.                 {
    207.                          if(map[i][j]==3)
    208.                              k++;
    209.                 }
    210.         }
    211.         if(k==0)
    212.                 printf("恭喜你,你赢了!\n");
    213. }

    214. /*总结:整个过程就是数组元素的变换过程,但是我还不会进行两关之间的转换,
    215.   在以后我会注重逻辑思维的培养以及编写代码时思路简单的撰写,这是我写的第一个小游戏
    216.   ,写完之后感觉很高兴,因为自己学的知识有很大的用处。 */
    复制代码
        由于学的比较浅,因此好多功能都没实现,例如:两关之间相连接进行连续游戏、不会使用图形界面等等,需要我以后再努力学习关于C语言的更深入的知识。

    本帖子中包含更多资源

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

    x
    该会员没有填写今日想说内容.
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则