zoukankan      html  css  js  c++  java
  • c++实现2048游戏

    代码实现


      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<time.h>
      4 #include<conio.h>
      5 int sz[6][6],cnt=0;
      6 
      7 /*初始化数组*/
      8 void csh()
      9 {
     10     for (int i = 1;i <= 4;i++)
     11         for (int j = 1;j <= 4;j++)
     12             sz[i][j] = 0;
     13 
     14     for (int i = 0;i <= 5;i++)
     15         sz[0][i] = sz[i][0] = sz[5][i] = sz[i][5] = '*';
     16 }
     17 /*输出数组*/
     18 void sc()
     19 {
     20     for (int i = 0;i <= 5;i++)
     21     {
     22         for (int j = 0;j <= 5;j++)
     23             if (sz[i][j] == 0)
     24                 printf("   ");
     25             else if (sz[i][j] == '*')
     26                 printf(" * ");
     27             else
     28                 printf(" %d ", sz[i][j]);
     29         printf("
    ");
     30     }
     31     printf("现在您的积分为:%d",cnt);
     32 }
     33 
     34 /*随机位置生成2或4*/
     35 void suiji()
     36 {
     37     int num,*p;
     38     srand(time(NULL));
     39     for (int j = 0;j <= 10;j++)
     40         num = (rand() % 2 + 1) * 2;
     41     p=&sz[rand() % 4 + 1][rand() % 4 + 1];
     42     if (*p == 0)
     43         *p = num;
     44     else
     45     { 
     46         while (*p != 0)
     47         {
     48             p = &sz[rand() % 4 + 1][rand() % 4 + 1];
     49         }
     50         *p = num;
     51     }
     52 }
     53 
     54 /*控制数组数字向上移动,返回是否移动
     55         return
     56             isMove    是否移动
     57                 true    是
     58                 false    否*/
     59 bool up()
     60 {
     61     bool isMove=false;
     62 
     63     for(int k=1;k<=4;k++)
     64         for (int i = 2;i <= 4;i++)
     65             for (int j = 1;j <= 4;j++)
     66                 if (sz[i - 1][j] != '*'&& (sz[i - 1][j] == sz[i][j]|| sz[i - 1][j]==0))
     67                 { 
     68                     if (sz[i - 1][j] == sz[i][j])
     69                     {
     70                         sz[i - 1][j] = sz[i - 1][j] + sz[i][j];
     71                         sz[i][j] = 0;
     72                         cnt = cnt + sz[i - 1][j];
     73                         
     74                     }
     75                     else{
     76                         sz[i -1][j] = sz[i][j];
     77                         sz[i][j] = 0;
     78                     }
     79                     if(sz[i-1][j]!=0)
     80                         isMove = true;
     81                 }
     82     return isMove;
     83 }
     84 
     85 /*控制数组数字向下移动,返回是否移动
     86         return
     87             isMove    是否移动
     88                 true    是
     89                 false    否*/
     90 bool down()
     91 {
     92     int isMove=false;
     93 
     94     for (int k = 1;k <= 4;k++)
     95         for (int i = 3;i >= 1;i--)
     96             for (int j = 1;j <= 4;j++)
     97                 if (sz[i + 1][j] != '*' && (sz[i + 1][j] == sz[i][j] || sz[i + 1][j] == 0))
     98                 {
     99                     if (sz[i + 1][j] == sz[i][j])
    100                     {
    101                         sz[i + 1][j] = sz[i + 1][j] + sz[i][j];
    102                         sz[i][j] = 0;
    103                         cnt = cnt + sz[i + 1][j];
    104                     }
    105                     else {
    106                         sz[i + 1][j] = sz[i][j];
    107                         sz[i][j] = 0;
    108                     }
    109                     if (sz[i + 1][j] != 0)
    110                         isMove = true;
    111                 }
    112     return isMove;
    113 }
    114 
    115 /*控制数组数字向左移动,返回是否移动
    116         return
    117             isMove    是否移动
    118                 true    是
    119                 false    否*/
    120 bool left()
    121 {
    122     int isMove = false;
    123 
    124     for (int k = 1;k <= 4;k++)
    125         for (int i = 1;i <= 4;i++)
    126             for (int j = 2;j <= 4;j++)
    127                 if (sz[i][j-1] != '*' && (sz[i][j-1] == sz[i][j] || sz[i][j-1] == 0))
    128                 {
    129                     if (sz[i][j-1] == sz[i][j])
    130                     {
    131                         sz[i][j-1] = sz[i][j-1] + sz[i][j];
    132                         sz[i][j] = 0;
    133                         cnt = cnt + sz[i][j-1];
    134                     }
    135                     else {
    136                         sz[i][j-1] = sz[i][j];
    137                         sz[i][j] = 0;
    138                     }
    139                     if (sz[i][j-1] != 0)
    140                         isMove = true;
    141                 }
    142     return isMove;
    143 }
    144 
    145 /*控制数组数字向右移动,返回是否移动
    146         return
    147             isMove    是否移动
    148                 true    是
    149                 false    否*/
    150 bool right()
    151 {
    152     bool isMove = false;
    153 
    154     for (int k = 1;k <= 4;k++)
    155         for (int i = 1;i <= 4;i++)
    156             for (int j = 3;j >= 1;j--)
    157                 if (sz[i][j+1] != '*' && (sz[i][j + 1] == sz[i][j] || sz[i][j + 1] == 0))
    158                 {
    159                     if (sz[i][j + 1] == sz[i][j])
    160                     {
    161                         sz[i][j +1] = sz[i][j + 1] + sz[i][j];
    162                         sz[i][j] = 0;
    163                         cnt = cnt + sz[i][j + 1];
    164                     }
    165                     else {
    166                         sz[i][j + 1] = sz[i][j];
    167                         sz[i][j] = 0;
    168                     }
    169                     if (sz[i][j+1] != 0)
    170                         isMove = true;
    171                 }
    172     return isMove;
    173 }
    174 
    175 /*接收键盘输入,进行判断移动方向,并连接到各个方向函数去,返回是否移动
    176         return
    177             isMove    是否移动
    178                 true    是
    179                 false    否*/
    180 bool movePd()
    181 {
    182     char pd;
    183     bool isMove;
    184 
    185     pd = _getch();
    186     while(pd!='w'&& pd != 'W'&& pd != 'A'&& pd != 'a'&& pd != 's'&& pd != 'S'&& pd != 'd'&& pd != 'D')
    187         pd = _getch();
    188     switch (pd)
    189     {
    190     case 'W':
    191     case 'w':isMove=up();break;
    192     case 'S':
    193     case 's':isMove = down();break;
    194     case 'A':
    195     case 'a':isMove = left(); break;
    196     case 'D':
    197     case 'd':isMove = right();
    198     }
    199     return isMove;
    200 }
    201 
    202 /*判断游戏是否结束
    203     return 
    204         ture    游戏结束
    205         false    游戏继续*/
    206 bool isEnd()
    207 {
    208     for (int i = 1; i <= 4; i++)
    209         for (int j = 1; j <= 4;j++)
    210             if (sz[i][j] == 0)
    211                 return false;
    212     for (int i = 1; i <= 4; i++)
    213         for (int j = 1; j <= 4; j++)
    214             if (sz[i][j] == sz[i+1][j]|| sz[i][j] == sz[i - 1][j] || sz[i][j] == sz[i][j+1] || sz[i][j] == sz[i][j-1])
    215                 return false;
    216     return true;
    217 }
    218 void main()
    219 {
    220     bool end = false,isMove;
    221 
    222     csh();
    223     suiji();
    224     sc();
    225     while (!end)
    226     {    
    227         isMove=movePd();
    228         if (isMove)
    229         {        
    230         system("cls");
    231         suiji();
    232         sc();
    233         end = isEnd();
    234         }
    235 
    236     }
    237     printf("
    游戏结束!!!
    ");
    238     
    239 }

     运行截图


     

     题外话


    看起来很丑对吧,但要美观实在太麻烦了。。。不过反正重点是游戏的实现,美观方面就无所谓了

  • 相关阅读:
    [moka同学笔记]一、Yii2.0课程笔记(魏曦老师教程)
    [moka同学笔记]yii2.0导航栏
    [moka同学笔记]Yii2.0 dropDownList的使用(二)
    [moka同学笔记]Yii2.0验证码
    [moka同学摘录]Yii2 csv数据导出扩展
    [moka同学笔记]PHPexcel之excel导出和导入
    [moka同学代码]PHP初级知识:上传文件源码
    [moka同学摘录]在Centos 6.5下成功安装和配置了vim7.4
    [moka同学摘录]iptables防火墙规则的添加、删除、修改、保存
    [moka同学笔记]linux服务器防火墙的设置
  • 原文地址:https://www.cnblogs.com/hbsblog/p/12992380.html
Copyright © 2011-2022 走看看