小游戏——2048的简易实现
来源:互联网 发布:数据库管理员要学什么 编辑:程序博客网 时间:2024/06/05 19:57
周六下午花了点时间实现了最近很火的小游戏2048,这里用最简单的控制台实现,自娱自乐
附源码:
#include <iostream>#include <iomanip>#include <ctime>#include <cstdlib> using namespace std;const int SIZE = 4;int M[SIZE][SIZE];enum DIR {BOTTOM = 2,RIGHT = 6,LEFT = 4,TOP = 8};void play();bool isLegal(int getNum);void randomNum();void combine(int dir);void showM();void setView(int number);bool isDead();int main() {play();return 0;}void play() {int getNum;while (cin >> getNum) {if (isDead()) {cout << " game over !" << endl;break;}system("cls");if (! isLegal(getNum)) {system("cls");showM();continue;}combine(getNum);randomNum();showM();}}bool isLegal(int getNum) {if (getNum == 0) {cout << "QUIT GAME(Y/N) ";char isQuitGame = 'N';cin >> isQuitGame;if (isQuitGame == 'Y') {exit(0);}}return getNum == LEFT || getNum == TOP || getNum == RIGHT || getNum == BOTTOM;}void randomNum() {int i = 0;int j = 0;srand((unsigned)time(NULL));do {i = rand() % SIZE;j = rand() % SIZE;} while (M[i][j] != 0);M[i][j] = 2;}void combine(int dir) {int i, j;switch (dir) {case LEFT:for (i = 0; i < SIZE; i ++) {// delete 0 between the numberfor (j = 1; j < SIZE; j ++) {if (M[i][j] == 0) {continue;}// M[i][j] != 0 herewhile (j != 0 && M[i][j - 1] == 0) {M[i][j - 1] = M[i][j];M[i][j --] = 0;}}// combine the same numberfor (j = 0; j < SIZE - 1; j ++) {if (M[i][j] == M[i][j + 1]) {M[i][j] += M[i][j + 1];M[i][j + 1] = 0;}}// delete 0 between the numberfor (j = 1; j < SIZE; j ++) {if (M[i][j] == 0) {continue;}// M[i][j] != 0 herewhile (j != 0 && M[i][j - 1] == 0) {M[i][j - 1] = M[i][j];M[i][j --] = 0;}}}break;case TOP:for (j = 0; j < SIZE; j ++) {for (i = 1; i < SIZE; i ++) {if (M[i][j] == 0) {continue;}while (i != 0 && M[i - 1][j] == 0) {M[i - 1][j] = M[i][j];M[i --][j] = 0;}}for (i = 0; i < SIZE - 1; i ++) {if (M[i][j] == M[i + 1][j]) {M[i][j] += M[i + 1][j];M[i + 1][j] = 0;}}for (i = 1; i < SIZE; i ++) {if (M[i][j] == 0) {continue;}while (i != 0 && M[i - 1][j] == 0) {M[i - 1][j] = M[i][j];M[i --][j] = 0;}}}break;case RIGHT:for (i = 0; i < SIZE; i ++) {for (j = SIZE - 2; j >= 0; j --) {if (M[i][j] == 0) {continue;}while (j != SIZE - 1 && M[i][j + 1] == 0) {M[i][j + 1] = M[i][j];M[i][j ++] = 0;}}for (j = SIZE - 1; j >= 1; j --) {if (M[i][j] == M[i][j - 1]) {M[i][j] += M[i][j - 1];M[i][j - 1] = 0;}}for (j = SIZE - 2; j >= 0; j --) {if (M[i][j] == 0) {continue;}while (j != SIZE - 1 && M[i][j + 1] == 0) {M[i][j + 1] = M[i][j];M[i][j ++] = 0;}}}break;case BOTTOM:for (j = 0; j < SIZE; j ++) {for (i = SIZE - 2; i >= 0; i --) {if (M[i][j] == 0) {continue;}while (i != SIZE - 1 && M[i + 1][j] == 0) {M[i + 1][j] = M[i][j];M[i ++][j] = 0;}}for (i = SIZE - 1; i >= 1; i --) {if (M[i][j] == M[i - 1][j]) {M[i][j] += M[i - 1][j];M[i - 1][j] = 0;}}for (i = SIZE - 2; i >= 0; i --) {if (M[i][j] == 0) {continue;}while (i != SIZE - 1 && M[i + 1][j] == 0) {M[i + 1][j] = M[i][j];M[i ++][j] = 0;}}}break;default:break;}}void showM() {cout << endl << endl; cout << " ┏━━━━┳━━━━┳━━━━┳━━━━┓" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ "; setView(M[0][0]); cout << " ┃ "; setView(M[0][1]); cout << " ┃ ";setView(M[0][2]); cout << " ┃ "; setView(M[0][3]); cout << " ┃ " << endl; cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┣━━━━╋━━━━╋━━━━╋━━━━┫" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ";setView(M[1][0]);cout << " ┃ ";setView(M[1][1]);cout << " ┃ ";setView(M[1][2]);cout << " ┃ ";setView(M[1][3]);cout << " ┃ " << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┣━━━━╋━━━━╋━━━━╋━━━━┫" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ";setView(M[2][0]);cout << " ┃ ";setView(M[2][1]);cout << " ┃ ";setView(M[2][2]);cout << " ┃ ";setView(M[2][3]);cout << " ┃ " << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┣━━━━╋━━━━╋━━━━╋━━━━┫" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ";setView(M[3][0]);cout << " ┃ ";setView(M[3][1]);cout << " ┃ ";setView(M[3][2]);cout << " ┃ ";setView(M[3][3]);cout << " ┃ " << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┃ ┃ ┃ ┃ ┃" << endl;cout << " ┗━━━━┻━━━━┻━━━━┻━━━━┛" << endl;}void setView(int number) {if (number == 0) {cout << " ";} else {cout << setw(4) << number;}}bool isDead() {for (int i = 0; i < SIZE; i ++) {for (int j = 0; j < SIZE; j ++) {if (M[i][j] == 0) {return false;}}}return true;}
0 0
- 小游戏——2048的简易实现
- 简易小游戏扫雷——C语言编程实现
- android 简易的猜拳小游戏
- 2048小游戏后端的实现
- Jquery 实现的2048小游戏
- html5 canvas 实现简易马祖小游戏
- C语言实现简易三子棋小游戏
- 简易小游戏(类似打飞机)的简单实现cocos2d-x-2.1.5
- C语言小游戏—迷宫游戏的实现
- android小游戏——2048 核心功能的实现(1)
- cocos2dx + Lua 实现的2048小游戏
- 经典小游戏2048C++的console实现
- Android小游戏2048的简单实现
- WIN32API实现的2048无尽版小游戏
- html5之小游戏2048的实现
- HTML/CSS/JavaScript实现的2048小游戏
- C语言实现的2048小游戏
- 小游戏的processing实现
- RGB排序
- github 配置
- say hello
- union的读写问题
- STM32命名规则
- 小游戏——2048的简易实现
- 程序人生(一)
- android AsyncTask
- 彻底清空SharePoint回收站
- tocmat一闪而过
- window多线程及同步实现
- 选项卡组件和ListView组件结合模拟新浪微博
- JI——第200篇原创博文
- 第一次启动android模拟器报:emulator-5554 disconnected! 错误