2048 C++实现

  1 #include <iostream>
  2 #include <windows.h>
  3 #include <ctime>
  4 using namespace std;
  5
  6 int const ROW = 4;
  7 int const COL = 4;
  8 int game[ROW][COL] = {0};
  9
 10 //上下左右
 11 int const UP = 1;
 12 int const DOWN = 2;
 13 int const LEFT = 3;
 14 int const RIGHT = 4;
 15
 16 //游戏所处的状态
 17 int const GAME_OVER = 1;
 18 int const GAME_WIN = 2;
 19 int const GAME_CONTINUE = 3;
 20
 21 enum GameNum
 22 {
 23     Game_2 = 2,
 24     Game_4 = 4,
 25     Game_8 = 8,
 26     Game_16 = 16,
 27     Game_32 = 32,
 28     Game_64 = 64,
 29     Game_128 = 128,
 30     Game_256 = 256,
 31     Game_512 = 512,
 32     Game_1024 = 1024,
 33     Game_2048 = 2048,
 34 };
 35
 36 //打印所得的数组
 37 void Print()
 38 {
 39     system("cls");
 40     cout << "*****************  2048 控 制 台 版  ******************" << endl;
 41     cout << "*****************  By Tanzf (Intern) ******************" << endl << endl;
 42     for (int i = 0; i < ROW; ++i)
 43     {
 44         cout << "---------------------------------"<< endl;
 45         for (int j = 0; j < COL; ++j)
 46         {
 47             if (game[i][j] == 0)
 48             {
 49                 cout <<"|   \t";
 50             }
 51             else
 52             {
 53                 cout <<"|   " << game[i][j] << "\t";
 54             }
 55         }
 56         cout << "|" << endl;
 57     }
 58     cout << "---------------------------------"<< endl;
 59 }
 60
 61
 62 bool CreateNumber()
 63 {
 64     int x = -1;
 65     int y = -1;
 66     int times = 0;
 67     int maxTimes = ROW * COL;
 68     //三分之二的概率生成2,三分之一的概率生成4
 69     int whitch = rand() % 3;
 70     do
 71     {
 72         x = rand() % ROW;
 73         y = rand() % COL;
 74         ++times;
 75     } while (game[x][y] != 0 && times <= maxTimes);
 76
 77     //说明格子已经满了
 78     if(times >= maxTimes)
 79     {
 80         return false;
 81     }
 82     else
 83     {
 84         GameNum num;
 85         if(whitch == 0)
 86         {
 87             num = Game_4;
 88         }
 89         else if(whitch)
 90         {
 91             num = Game_2;
 92         }
 93         game[x][y] = num;
 94     }
 95
 96     return true;
 97 }
 98
 99 void Process(int direction)
100 {
101     switch (direction)
102     {
103     case UP:
104         //最上面一行不动
105         for(int row = 1; row < ROW; ++row)
106         {
107             for(int crow = row; crow >= 1; --crow)
108             {
109                 for(int col = 0; col < COL; ++col)
110                 {
111                     //上一个格子为空
112                     if(game[crow-1][col] == 0)
113                     {
114                         game[crow-1][col] = game[crow][col];
115                         game[crow][col] = 0;
116                     }
117                     else
118                     {
119                         //合并
120                         if(game[crow-1][col] == game[crow][col])
121                         {
122                             game[crow - 1][col] *= 2;
123                             game[crow][col] = 0;
124                         }
125
126                     }
127                 }
128             }
129         }
130         break;
131     case DOWN:
132         //最下面一行不动
133         for(int row = ROW - 2; row >= 0; --row)
134         {
135             for(int crow = row; crow < ROW - 1; ++crow)
136             {
137                 for(int col = 0; col < COL; ++col)
138                 {
139                     //上一个格子为空
140                     if(game[crow + 1][col] == 0)
141                     {
142                         game[crow + 1][col] = game[crow][col];
143                         game[crow][col] = 0;
144                     }
145                     else
146                     {
147                         //合并
148                         if(game[crow + 1][col] == game[crow][col])
149                         {
150                             game[crow + 1][col] *= 2;
151                             game[crow][col] = 0;
152                         }
153
154                     }
155                 }
156             }
157         }
158         break;
159     case LEFT:
160         //最左边一列不动
161         for(int  col = 1; col < COL; ++col)
162         {
163             for(int ccol = col; ccol >= 1; --ccol)
164             {
165                 for(int row = 0; row < ROW; ++row)
166                 {
167                     //上一个格子为空
168                     if(game[row][ccol-1] == 0)
169                     {
170                         game[row][ccol - 1] = game[row][ccol];
171                         game[row][ccol] = 0;
172                     }
173                     else
174                     {
175                         //合并
176                         if(game[row][ccol - 1] == game[row][ccol])
177                         {
178                             game[row][ccol - 1] *= 2;
179                             game[row][ccol] = 0;
180                         }
181
182                     }
183                 }
184             }
185         }
186         break;
187     case RIGHT:
188         //最右边一列不动
189         for(int  col = COL - 2; col >= 0; --col)
190         {
191             for(int ccol = col; ccol <= COL - 2; ++ccol)
192             {
193                 for(int row = 0; row < ROW; ++row)
194                 {
195                     //上一个格子为空
196                     if(game[row][ccol + 1] == 0)
197                     {
198                         game[row][ccol + 1] = game[row][ccol];
199                         game[row][ccol] = 0;
200                     }
201                     else
202                     {
203                         //合并
204                         if(game[row][ccol + 1] == game[row][ccol])
205                         {
206                             game[row][ccol + 1] *= 2;
207                             game[row][ccol] = 0;
208                         }
209
210                     }
211                 }
212             }
213         }
214         break;
215     }
216
217 }
218
219 //处理输入输出,返回上下左右
220 int Input()
221 {
222     //读取上下左右四个方向键
223     int upArrow = 0;
224     int downArrow = 0;
225     int leftArrow = 0;
226     int rightArrow = 0;
227     int direction = 0;
228     while (true)
229     {
230         upArrow = GetAsyncKeyState(VK_UP);
231         downArrow = GetAsyncKeyState(VK_DOWN);
232         leftArrow = GetAsyncKeyState(VK_LEFT);
233         rightArrow = GetAsyncKeyState(VK_RIGHT);
234
235         if(upArrow)
236         {
237             direction = UP;
238             break;
239         }
240         else if(downArrow)
241         {
242             direction = DOWN;
243             break;
244         }
245         else if(leftArrow)
246         {
247             direction = LEFT;
248             break;
249         }
250         else if(rightArrow)
251         {
252             direction = RIGHT;
253             break;
254         }
255
256         Sleep(100);
257     }
258
259     return direction;
260 }
261
262 //判断游戏状态
263 int Judge()
264 {
265     //赢得游戏
266     for(int i = 0; i < ROW; ++i)
267     {
268         for(int j = 0; j < COL; ++j)
269         {
270             if(game[i][j] == 2048)
271             {
272                 return GAME_WIN;
273                 break;
274             }
275         }
276     }
277
278     //横向检查
279     for(int i = 0 ; i < ROW; ++i)
280     {
281         for(int j = 0; j < COL - 1; ++j)
282         {
283             if(!game[i][j] || (game[i][j] == game[i][j+1]))
284             {
285                 return GAME_CONTINUE;
286                 break;
287             }
288         }
289     }
290     //纵向检查
291     for(int j = 0; j< COL; ++j)
292     {
293         for(int i = 0; i < ROW -1; ++i)
294         {
295             if(!game[i][j] || (game[i][j] == game[i+1][j]))
296             {
297                 return GAME_CONTINUE;
298                 break;
299             }
300         }
301     }
302
303     //不符合上述两种状况,游戏结束
304     return GAME_OVER;
305
306 }
307
308 int main()
309 {
310     //设置一个随机数种子
311     srand((unsigned int)time(0));
312     CreateNumber();
313     CreateNumber();
314     Print();
315     int direction = 0;
316     int gameState = -1;
317     while(true)
318     {
319         direction = Input();
320
321         gameState = Judge();
322         if(direction && gameState == GAME_CONTINUE)
323         {
324             Process(direction);
325             CreateNumber();
326             Print();
327             Sleep(100);
328         }
329         else if(gameState == GAME_WIN)
330         {
331             Print();
332             cout << "You Win!" << endl;
333             break;
334         }
335         else if(gameState == GAME_OVER)
336         {
337             Print();
338             cout <<"You lose!" << endl;
339             break;
340         }
341     }
342
343     return 0;
344 }  
时间: 2024-11-02 23:02:12

2048 C++实现的相关文章

cocos2d-x 3.2 之 2048 —— 第四篇 ★ 核心 ★

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 大家十一过得肿么样啊~ 我现在的情况就是--每逢佳节 胖三斤 啊 ,胖三斤..o(╯□╰)o.. 好了,继续做2048, 这是第四篇啦~ 这篇的内容就是对触摸的处理哟~ 就是,你上下左右滑动,相应移动~ 我们先在 游戏的宏定义类 中,建立一个枚举方向变量: Game

麦子学院ios笔记:Objective-C 实现2048算法类

今天麦子学院ios开发老师给大家介绍Objective-C 实现的IOS版小游戏2048算法类,十分的实用,有需要的小伙伴可以参考下. 参数model有一个二维数组data,及阶数matrix // .h文件 @classDataModel; @interfaceAlgorithm : NSObject @property(nonatomic,assign)intaddScore;// 加分 - (void)caculateTop:(DataModel *)model;// 上滑规则 - (vo

200行Python代码实现2048

200行Python代码实现2048 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令 GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器 3. 环境使用 使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操

自带CA ,sha256 哈希签名,2048 位加密 脚本,通用

直接上代码 mkdir ssl cd ssl mkdir demoCA cd demoCA mkdir newcerts mkdir private touch index.txt echo '01' > serial function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N) echo $(($num%$max+$min)) } rnd=$(rand 10 50) echo $rnd touch /etc/pki/CA/index.

python写2048小游戏

#!/usr/bin/env python # coding=utf-8 #******************************************************** # > OS : Linux 3.2.0-60-generic #91-Ubuntu # > Author : yaolong # > Mail : [email protected] # > Time : 2014年06月01日 星期日 13:13:39 #******************

max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

# cat /etc/security/limits.d/90-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 2048 root soft nproc unlimited #在这里修改

终端游戏开发 : 开发2048...

2048这个游戏应该是没几个人不知道吧... 今天去实验楼学了一下这个游戏的终端版本, 大概讲一下我对这个游戏的开发思路的理解. 实现为了实现2048, 我们需要用到3个模块, 分别是curses(用于终端界面交互程序开发的库, 可以解决屏幕打印以及按键处理等方面的问题), random, 以及collections 中的 defaultdict. 第一个库比较复杂, 我之前也没接触过, 不过隐隐感觉是一个功能强大的库, 我之后会专门研究它的官方文档, 目前暂且放在一边, 所幸2048中对这个库

Android 2048游戏开发

根据教程写的简单的2048游戏. 极客学院教程地址:http://www.jikexueyuan.com/course/43.html 我的源代码地址:https://github.com/myCodingTrip/2048Game 项目有3个类. Card extends FrameLayout{ private int num; private TextView label; public Card(Context context) public int getNum() public vo

javascript 2048游戏

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="