• 2048小游戏4X4C语言


      1 /*2048*/
      2 
      3 #include<stdio.h>
      4 #include<stdlib.h>
      5 #include<conio.h>
      6 #include<time.h>
      7 
      8 void print(void);/*显示游戏界面*/
      9 int add(void);/*对中间变量数组进行处理*/
     10 
     11 int code[4][4] =
     12    {
     13     {0,0,0,0},
     14     {0,0,0,0},
     15     {0,0,0,0},
     16     {0,0,0,0},
     17    };/*游戏中的16个格子*/
     18 int temp[5];/*中间变量*/
     19 int move = 0;/*移动次数*/
     20 int score = 0;/*分数*/
     21 
     22 
     23 
     24 int main(void)
     25 {
     26      int gameover = 0;/*判断游戏是否结束,1结束,0继续*/
     27      int i,j;
     28      int change = 1;/*判断格子中的数是否改变,0不变*/
     29      char input;
     30      srand((unsigned)time(NULL));/*设置随机数的起点*/
     31      while(gameover == 0)
     32          {
     33               if(change >= 1)/*仅当数发生改变时添加新数*/
     34                {
     35                     do
     36                      {
     37                           i=((unsigned)rand()) % 4;
     38                           j=((unsigned)rand()) % 4;
     39                      }while(code[i][j] != 0);
     40                     if(((unsigned)rand()) % 4 == 0)
     41                      {
     42                           code[i][j]=4;
     43                      }
     44                     else
     45                      {
     46                           code[i][j]=2;/*随机选一个空格填上2或4*/
     47                      }
     48                     move++;/*增加次数*/
     49                }
     50               print();/*显示*/
     51               input = getch();/*输入方向*/
     52               change = 0;
     53               switch(input)
     54                    {
     55                         case '0':/*退出*/
     56                                  printf("Are you sure to exit?(y/n)");
     57                                  input=getchar();
     58                                  if(input=='y'||input=='Y')
     59                                     exit(0);
     60                                  break;
     61 
     62                         case 'W':
     63 
     64                         case 'w':/**/
     65                                  for(j=0;j<=3;j++)
     66                                    {
     67                                         for(i=0;i<=3;i++)
     68                                           {
     69                                                temp[i]=code[i][j];/*把一列数移到中间变量*/
     70                                           }
     71                                         temp[4]=0;
     72                                         change += add();
     73                                         for(i=0;i<=3;i++)
     74                                           {
     75                                                code[i][j]=temp[i];/*把处理好的中间变量移回来*/
     76                                           }
     77                                     }
     78                                   break;
     79 
     80                         case 'A':
     81 
     82                         case 'a':/**/
     83                                  for(i=0;i<=3;i++)
     84                                    {
     85                                         for(j=0;j<=3;j++)
     86                                           {
     87                                                temp[j]=code[i][j];/*把一行数移到中间变量*/
     88                                           }
     89                                         temp[4]=0;
     90                                         change += add();
     91                                         for(j=0;j<=3;j++)
     92                                           {
     93                                                code[i][j]=temp[j];/*把处理好的中间变量移回来*/
     94                                           }
     95                                    }
     96                                  break;
     97 
     98                         case 'S':
     99 
    100                         case 's':/**/
    101                                  for(j=0;j<=3;j++)
    102                                    {
    103                                         for(i=0;i<=3;i++)
    104                                           {
    105                                                temp[i]=code[3-i][j];/*把一列数移到中间变量*/
    106                                           }
    107                                         temp[4]=0;
    108                                         change += add();
    109                                         for(i=0;i<=3;i++)
    110                                           {
    111                                                code[3-i][j]=temp[i];/*把处理好的中间变量移回来*/
    112                                           }
    113                                    }
    114                                  break;
    115 
    116                         case 'D':
    117 
    118                         case 'd':/**/
    119                                  for(i=0;i<=3;i++)
    120                                    {
    121                                         for(j=0;j<=3;j++)
    122                                           {
    123                                                temp[j]=code[i][3-j];/*把一行数移到中间变量*/
    124                                           }
    125                                         temp[4]=0;
    126                                         change += add();
    127                                         for(j=0;j<=3;j++)
    128                                           {
    129                                                code[i][3-j]=temp[j];/*把处理好的中间变量移回来*/
    130                                           }
    131                                    }
    132                                  break;
    133                    }
    134               gameover=1;
    135               for(i=0;i<=3;i++)
    136               for(j=0;j<=3;j++)
    137               if(code[i][j]==0)
    138               gameover=0;/*所有格子都填满则游戏结束*/
    139         }
    140     printf("Game over!
    ");
    141     getch();
    142 
    143     return 0;
    144 }
    145 
    146 void print(void)/*显示游戏界面*/
    147 {
    148     int i,j;
    149     system("CLS");/*清屏*/
    150     printf("2048
    ");
    151     printf("W--UP A--LEFT S--DOWN D--RIGHT 0--EXIT
    ");
    152     printf("Score:%d Move:%d
    ",score,move);
    153     printf("Made by lanshanxiao
    ");
    154     printf("|-----------------------|
    ");/*显示横向分隔线*/
    155     for(i=0;i<=3;i++)
    156        {
    157            for(j=0;j<=3;j++)
    158               {
    159                    if(code[i][j]==0)
    160                      {
    161                           printf("|     ");/*0显示空格*/
    162                      }
    163                    else
    164                      {
    165                           printf("|%5d",code[i][j]);/*显示数字和分隔线*/
    166                      }
    167               }
    168            printf("|
    |-----------------------|
    ");/*显示横向分隔线*/
    169        }
    170 }
    171 
    172 int add(void)/*对中间变量数组进行处理*/
    173 {
    174     int i;
    175     int t=0;
    176     int change=0;/*判断数组是否有改变,0不变,1变化*/
    177     do
    178      {
    179           for(i=0;i<=3;i++)
    180             {
    181                  if(temp[i]==0)
    182                   {
    183                        if(temp[i]!=temp[i+1])
    184                          change=1;/*当一个0后面不是0时数组改变*/
    185                        temp[i]=temp[i+1];
    186                        temp[i+1]=0;
    187                   }
    188             }/*去掉中间的0*/
    189           t++;
    190      }while(t<=3);/*重复多次*/
    191     for(i=1;i<=3;i++)
    192         {
    193              if(temp[i]==temp[i-1])
    194               {
    195                    if(temp[i]!=0)
    196                      {
    197                           change=1;/*当两个非零相同的数相加时数组改变*/
    198                           score=score+temp[i];/*加分*/
    199                      }
    200                    temp[i-1]=temp[i-1]*2;
    201                    temp[i]=0;
    202               }
    203         }/*把两个相邻的相同的数加起来*/
    204 
    205     return change;
    206 }
    View Code

    2048小游戏代码在上面的View Code中,将加号展开就可以看到。

    点击源码上的复制按键还可以直接将源代码复制下来。

     

  • 相关阅读:
    docker容器的应用
    KVM虚拟机迁移
    centos6.5虚拟机快照技术
    centos6.5网络虚拟化技术
    centos6.5制作OpenStack云平台Windows7镜像
    centos6.5远程桌面连接(VNCSPice)
    centos6.5kvm虚拟化技术
    centos7安装Jenkins及其卸载(yum和rpm安装)
    CentOS 7安装JDK
    [leetcode]Reverse Nodes in k-Group
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/6031258.html
Copyright © 2020-2023  润新知