无聊,在公司写了个2048小游戏的程序,聊以自娱。(事实是我手机坏了,没得玩)。 很简单,直接上代码了。

#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;int const ROW = 4;
int const COL = 4;
int game[ROW][COL] = {0};//上下左右
int const UP = 1;
int const DOWN = 2;
int const LEFT = 3;
int const RIGHT = 4;//游戏所处的状态
int const GAME_OVER = 1;
int const GAME_WIN = 2;
int const GAME_CONTINUE = 3;enum GameNum
{Game_2 = 2,Game_4 = 4,Game_8 = 8,Game_16 = 16,Game_32 = 32,Game_64 = 64,Game_128 = 128,Game_256 = 256,Game_512 = 512,Game_1024 = 1024,Game_2048 = 2048,
};//打印所得的数组
void Print()
{system("cls");cout << "*****************  2048 控 制 台 版  ******************" << endl;cout << "*****************  By Tanzf (Intern) ******************" << endl << endl;for (int i = 0; i < ROW; ++i){cout << "---------------------------------"<< endl;for (int j = 0; j < COL; ++j){if (game[i][j] == 0){cout <<"|   \t";}else {cout <<"|   " << game[i][j] << "\t";}}cout << "|" << endl;}cout << "---------------------------------"<< endl;
}bool CreateNumber()
{int x = -1;int y = -1;int times = 0;int maxTimes = ROW * COL;//三分之二的概率生成2,三分之一的概率生成4int whitch = rand() % 3;do {x = rand() % ROW;y = rand() % COL;++times;} while (game[x][y] != 0 && times <= maxTimes);//说明格子已经满了if(times >= maxTimes){return false;}else{GameNum num;if(whitch == 0){num = Game_4;}else if(whitch){num = Game_2;}game[x][y] = num;}return true;
}void Process(int direction)
{switch (direction){case UP://最上面一行不动for(int row = 1; row < ROW; ++row){for(int crow = row; crow >= 1; --crow){for(int col = 0; col < COL; ++col){//上一个格子为空if(game[crow-1][col] == 0){game[crow-1][col] = game[crow][col];game[crow][col] = 0;}else {//合并if(game[crow-1][col] == game[crow][col]){game[crow - 1][col] *= 2;game[crow][col] = 0;}}}}}break;case DOWN://最下面一行不动for(int row = ROW - 2; row >= 0; --row){for(int crow = row; crow < ROW - 1; ++crow){for(int col = 0; col < COL; ++col){//上一个格子为空if(game[crow + 1][col] == 0){game[crow + 1][col] = game[crow][col];game[crow][col] = 0;}else {//合并if(game[crow + 1][col] == game[crow][col]){game[crow + 1][col] *= 2;game[crow][col] = 0;}}}}}break;case LEFT://最左边一列不动for(int  col = 1; col < COL; ++col){for(int ccol = col; ccol >= 1; --ccol){for(int row = 0; row < ROW; ++row){//上一个格子为空if(game[row][ccol-1] == 0){game[row][ccol - 1] = game[row][ccol];game[row][ccol] = 0;}else {//合并if(game[row][ccol - 1] == game[row][ccol]){game[row][ccol - 1] *= 2;game[row][ccol] = 0;}}}}}break;case RIGHT://最右边一列不动for(int  col = COL - 2; col >= 0; --col){for(int ccol = col; ccol <= COL - 2; ++ccol){for(int row = 0; row < ROW; ++row){//上一个格子为空if(game[row][ccol + 1] == 0){game[row][ccol + 1] = game[row][ccol];game[row][ccol] = 0;}else {//合并if(game[row][ccol + 1] == game[row][ccol]){game[row][ccol + 1] *= 2;game[row][ccol] = 0;}}}}}break;}}//处理输入输出,返回上下左右
int Input()
{//读取上下左右四个方向键int upArrow = 0;int downArrow = 0;int leftArrow = 0;int rightArrow = 0;int direction = 0;while (true){upArrow = GetAsyncKeyState(VK_UP);downArrow = GetAsyncKeyState(VK_DOWN);leftArrow = GetAsyncKeyState(VK_LEFT);rightArrow = GetAsyncKeyState(VK_RIGHT);if(upArrow){direction = UP;break;}else if(downArrow){direction = DOWN;break;}else if(leftArrow){direction = LEFT;break;}else if(rightArrow){direction = RIGHT;break;}Sleep(100);}return direction;
}//判断游戏状态
int Judge()
{//赢得游戏for(int i = 0; i < ROW; ++i){for(int j = 0; j < COL; ++j){if(game[i][j] == 2048){return GAME_WIN;break;}}}//横向检查for(int i = 0 ; i < ROW; ++i){for(int j = 0; j < COL - 1; ++j){if(!game[i][j] || (game[i][j] == game[i][j+1])){return GAME_CONTINUE;break;}}}//纵向检查for(int j = 0; j< COL; ++j){for(int i = 0; i < ROW -1; ++i){if(!game[i][j] || (game[i][j] == game[i+1][j])){return GAME_CONTINUE;break;}}}//不符合上述两种状况,游戏结束return GAME_OVER;}int main()
{//设置一个随机数种子srand((unsigned int)time(0));CreateNumber();CreateNumber();Print();int direction = 0;int gameState = -1;while(true){direction = Input();gameState = Judge();if(direction && gameState == GAME_CONTINUE){Process(direction);CreateNumber();Print();Sleep(100);}else if(gameState == GAME_WIN){Print();cout << "You Win!" << endl;break;}else if(gameState == GAME_OVER){Print();cout <<"You lose!" << endl;break;}}return 0;
}

嗯,OK。

C++实现2048小游戏(控制台版的)相关推荐

  1. 2048小游戏 java版(代码+注释)

            一个纯纯小白,想写点什么,也想学习一下怎么在这里写东西,就简单的写个2048小游戏.写的不好,大佬就不用看了,希望和大家交流学习,有写的不好或有更好的建议也欢迎提出来.(需要用的可直接 ...

  2. 2048小游戏(网页版)

    这是JS文件 ↓ /*这是JS文件*/ (function(window, document, $) {function Game2048(opt) {var prefix = opt.prefix, ...

  3. DAYU200 2048 小游戏- OpenHarmony版

    介绍 2048游戏的规则是这样的:在一个4乘以4的格子里,游戏开始后,从所有的空格子中随机选择两个空格子,对于随机选择的这两个空格子,在每个空格子里填入2或4.接下来,使用上下左右四个方向键进行操作. ...

  4. Java小游戏:控制台版“恶龙咆哮“

    小白一枚:运行效果图奉上(将来本人也一定是一名大佬Java界的科学家) 备注:选择游戏难度 "噩梦" 还是很有 "挑战性" 的 !!! 游戏开始:!!! 游戏过 ...

  5. 2048网页版html项目报告,jQuery编写网页版2048小游戏

    大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了,但是自己实现起 ...

  6. java编辑2048小游戏_Java 制作命令行版 2048小游戏

    Java 命令行版 2048小游戏(2020年8月14日) 制作背景 大二即将开学,从头开始学习了一个多月的java,对二维数组的操作稍微熟悉了一些.于是想做一个简单的2048来试一试. 众所周知,2 ...

  7. 网页版2048小游戏

    网页版2048小游戏 使用jquery3.3.1 进行的一次开发,各文件源码如下: 2048.css .div_2048{background-color: #FFFAF0;width:1000px; ...

  8. 2048小游戏 无限反悔 存档版

    2048小游戏 C语言小菜鸟,写的一个2048小游戏,不足之处多多包涵 代码实现 头文件 void read();//读档 void save();//存档 void readcheat();//作弊 ...

  9. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

最新文章

  1. 【例题收藏】◇例题·6◇ 电压机制(voltage)
  2. 多项式乘法c语言,急!!!!c语言:求n次多项式的加法和乘法
  3. 调用 GetProcAddress 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET...
  4. 【AI白身境】学AI必备的python基础
  5. 《伊万博士: 进化》利用三角剖分算法复刻《超越光速》地图机制
  6. Three Integers CodeForces - 1311D(思维+暴力)
  7. E-MapReduce上如何升级EMR-Core
  8. 对于内向、不善于社交的人来说,如何建立人脉?
  9. 高性能地图服务器,电子地图的背后—超速海量Xeon5500机架服务器
  10. JAVA使用bean配置ftp_FTP文件上传(By)java
  11. Makefile自动生成:cmake
  12. Apache NiFi 简介
  13. 每日一算法:杨辉三角形
  14. 市面上的手机银行的简介
  15. 云空间插html音乐,【详细教程】如何在空间中引用网易云音乐
  16. 成功解决RecursionError: maximum recursion depth exceeded
  17. C++的STL库常见函数
  18. 关于送货单的格式要求?
  19. MySQL实战演练——如何才能构建逾期用户画像?【数据可视化】
  20. 服务器宝塔Error: connect ETIMEDOUT

热门文章

  1. mapreduce 论文(中文翻译)
  2. 洛谷 P3964 松鼠聚会
  3. 商业银行资产管理理论之:商业贷款理论、转移理论和预期收入理论
  4. PAT甲级 1030 Travel Plan
  5. 【中国是部金融史-读后感】
  6. 类与类之间的几种关系
  7. ic集成电路专业通信计算机咋选,2021年美国留学研究生EE专业详解,选校选专业必备!...
  8. HYKSVCAO2V4F3电液伺服阀控制器
  9. 【论文摘要】八元数连续正交矩及其在彩色立体图像重建和零水印中的应用
  10. 「HTML和CSS入门指南」hr 标签详解