-
个人简介
#include #include #include #include #include <conio.h> #include #include using namespace std; const int BOARD_SIZE = 4; class Game2048 { private: vector<vector> board; int score;
bool moved;
public: Game2048() { board = vector<vector>(BOARD_SIZE, vector(BOARD_SIZE, 0)); score = 0; addRandomTile(); addRandomTile(); } void addRandomTile() { vector<pair<int, int>> emptyCells; for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == 0) { emptyCells.push_back(make_pair(i, j)); } } } if (!emptyCells.empty()) { int index = rand() % emptyCells.size(); int value = (rand() % 10 == 0) ? 4 : 2; int x = emptyCells[index].first; int y = emptyCells[index].second; board[x][y] = value; } } void printBoard() { system("cls"); cout << "2048游戏 - 得分: " << score << "\n"; cout << "使用WASD移动,R重置,Q退出\n\n"; for (int i = 0; i < BOARD_SIZE; i++) { cout << "+------+------+------+------+\n"; for (int j = 0; j < BOARD_SIZE; j++) { cout << "|"; if (board[i][j] != 0) { cout << setw(5) << board[i][j] << " "; } else { cout << " "; } } cout << "|\n"; } cout << "+------+------+------+------+\n\n"; } void move(int dir) { moved = false; if (dir == 1) rotateBoard(); else if (dir == 2) rotateBoard(3); else if (dir == 3) rotateBoard(2); for (int j = 0; j < BOARD_SIZE; j++) { for (int i = 0; i < BOARD_SIZE; i++) { if (board[i][j] == 0) continue; for (int k = i + 1; k < BOARD_SIZE; k++) { if (board[k][j] == 0) continue; if (board[i][j] == board[k][j]) { board[i][j] *= 2; board[k][j] = 0; score += board[i][j]; moved = true; } break; } } for (int i = 0; i < BOARD_SIZE; i++) { if (board[i][j] != 0) continue; for (int k = i + 1; k < BOARD_SIZE; k++) { if (board[k][j] != 0) { board[i][j] = board[k][j]; board[k][j] = 0; moved = true; break; } } } } if (dir == 1) rotateBoard(3); else if (dir == 2) rotateBoard(1); else if (dir == 3) rotateBoard(2); if (moved) { addRandomTile(); } } void rotateBoard(int times = 1) { vector<vector> newBoard = board; for (int t = 0; t < times; t++) { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { newBoard[j][BOARD_SIZE - 1 - i] = board[i][j]; } } board = newBoard; } } bool isGameOver() { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == 0) return false; } } for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (j < BOARD_SIZE - 1 && board[i][j] == board[i][j + 1]) { return false; } if (i < BOARD_SIZE - 1 && board[i][j] == board[i + 1][j]) { return false; } } } return true; } bool hasWon() { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == 2048) { return true; } } } return false; } void reset() { board = vector<vector>(BOARD_SIZE, vector(BOARD_SIZE, 0)); score = 0; addRandomTile(); addRandomTile(); } void run() { char input; bool quit = false; while (!quit) { printBoard(); if (hasWon()) { cout << "恭喜你达到了2048! 继续游戏还是退出?(C继续/Q退出): "; } else if (isGameOver()) { cout << "游戏结束! 最终得分: " << score << "\n"; cout << "按R重新开始,按Q退出: "; } input = _getch(); switch (tolower(input)) { case 'w': move(0); break; case 'd': move(2); break; case 's': move(3); break; case 'a': move(1); break; case 'r': reset(); break; case 'q': quit = true; break; } } } }; int main() { srand(time(0)); Game2048 game; game.run(); return 0; } -
通过的题目
-
最近活动
- C2027届语法高级&基础算法-结构体 作业
- C2027届语法高级&基础算法-字符串 作业
- C2027届语法高级&基础算法-递归及其应用 作业
- C2027届语法高级&基础算法-函数及其应用 作业
- C2027届语法高级&基础算法-二维数组进阶 作业
- C2027届语法高级&基础算法-初识二维数组 作业
- C2027届语法高级&基础算法-数值排序 作业
- C2027届语法高级&基础算法-文件重定向和对拍 作业
- C2027届基础语法-循环和一维数组综合练习 作业
- C2027基础语法阶段性测试 OI
- C2027届基础语法-一维数组进阶 作业
- C2027届基础语法-一维数组基础 作业
- C2027届基础语法-循环结构复习 作业
- C2027届基础语法中期测试 OI
- C2027届基础语法-循环结构实例练习 作业
- C2027届基础语法-循环嵌套练习题 作业
- C2026届(树与搜索:二叉树基础、建树与遍历) 作业
- C2027届基础语法-while循环结构练题 作业
- C2027届基础语法-for循环结构练题 作业
- 2025年4月4日C2027届课堂测试 乐多
- C2027届基础语法-选择结构练题 作业
- C2027届基础语法-选择结构嵌套 作业
- C2027届基础语法-选择结构基础 作业
- C2027届基础语法-顺序结构进阶 作业
- C2027届基础语法-顺序结构基础 作业
题目标签
- 基础语法
- 91
- 基础问题
- 24
- 数组问题
- 24
- 顺序
- 23
- 顺序结构
- 21
- 循环
- 19
- 简单循环
- 17
- 分支
- 17
- 二维数组
- 16
- ABC
- 13
- AtCoder
- 13
- 入门
- 12
- 分支问题
- 12
- 其他
- 10
- 嵌套循环
- 10
- 排序
- 9
- 普及组一阶测试题
- 8
- 一维数组
- 7
- 需要找规律的循环
- 7
- 文件重定向
- 6