C++实现2048小游戏(控制台版的)
来源:互联网 发布:印尼海关数据 编辑:程序博客网 时间:2024/06/15 22:03
无聊,在公司写了个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。
4 0
- C++实现2048小游戏(控制台版的)
- C++ 控制台版 2048小游戏
- C语言控制台小游戏
- C语言实现的2048小游戏
- 2048 控制台版(c实现)
- 一个控制台版的猜字小游戏
- 控制台的小游戏
- 简单的控制台小游戏
- [C]名字大战(控制台小游戏)
- c语言控制台的一个贪吃蛇小游戏
- C语言实现小游戏2048
- 用C实现2048小游戏
- 2048小游戏c语言实现
- C语言实现2048小游戏
- C语言实现N阶的2048小游戏
- WIN32API实现的2048无尽版小游戏
- 类五子棋的小游戏(c语言实现)
- 小游戏 | 井字棋(三子棋)的C语言实现
- AFNetworking 请求头的设置
- URL 地址 加密控制
- 利用iptables对以太网ethernet进行网速限制,更好地共享网络
- 决定视频文件占用空间大小的因素(编码格式,比特率)
- 一个老电子工程师的建议--《给年轻工程师的十大忠告》
- C++实现2048小游戏(控制台版的)
- 探究golang接口
- Android ContentProvider学习
- Kafka消息的可靠性测试--针对直播业务的方案选择
- 杭电acm2045
- 关于canvas.drawArc,canvas.drawOval 和RectF 的关系
- 上传app store必看文档-Store审核指南
- android 软键盘的显示与隐藏问题的研究
- iOS UI架构设计