小游戏——2048的简易实现
2014-04-26 20:47
555 查看
周六下午花了点时间实现了最近很火的小游戏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 number for (j = 1; j < SIZE; j ++) { if (M[i][j] == 0) { continue; } // M[i][j] != 0 here while (j != 0 && M[i][j - 1] == 0) { M[i][j - 1] = M[i][j]; M[i][j --] = 0; } } // combine the same number for (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 number for (j = 1; j < SIZE; j ++) { if (M[i][j] == 0) { continue; } // M[i][j] != 0 here while (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; }
相关文章推荐
- C语言实现简易2048小游戏
- C语言实现的2048小游戏
- jQuery实现简易的天天爱消除小游戏
- Python练手项目(2)——200行实现2048小游戏
- C语言实现N阶的2048小游戏
- 利用HTML5 <canvas>实现2048小游戏
- android小游戏——2048 核心功能的实现(1)
- js、jQuery实现2048小游戏
- linux下使用C语言实现2048简易字符界面游戏
- 使用graphics.py实现2048小游戏
- 用javascript实现2048的小游戏
- 用vue实现2048小游戏
- vue实现2048小游戏功能思路详解
- 利用C语言实现2048小游戏的方法
- html5之小游戏2048的实现
- java小游戏2048实现
- Python实现小游戏--2048
- 用js实现2048小游戏
- Jquery 实现的2048小游戏
- js+css3实现2048小游戏