当前位置: 首页 > news >正文

2048小游戏

熟悉的2048小游戏,环境:Windows10及以上,dev.c++5.11及以上或控制台(可能有警告,不影响运行)

付代码:

#include <iostream>
#include <cstdlib>
#include <ctime>using namespace std;const int SIZE = 4;
int board[SIZE][SIZE];// 初始化游戏棋盘,随机两个位置生成 2 或 4
void initialize() {for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {board[i][j] = 0;}}srand(time(0));int x1 = rand() % SIZE;int y1 = rand() % SIZE;board[x1][y1] = (rand() % 2 == 0) ? 2 : 4;int x2, y2;do {x2 = rand() % SIZE;y2 = rand() % SIZE;} while (x2 == x1 && y2 == y1);board[x2][y2] = (rand() % 2 == 0) ? 2 : 4;
}// 打印游戏棋盘
void printBoard() {system("cls");for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if (board[i][j] == 0) {cout << ".\t";} else {cout << board[i][j] << "\t";}}cout << endl;}
}// 在空白位置随机生成一个 2 或 4
void generateRandomTile() {int emptyTiles = 0;for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if (board[i][j] == 0) {emptyTiles++;}}}if (emptyTiles > 0) {int randomTile = rand() % emptyTiles;int count = 0;for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if (board[i][j] == 0) {if (count == randomTile) {board[i][j] = (rand() % 2 == 0) ? 2 : 4;return;}count++;}}}}
}// 判断是否还有空白位置
bool hasEmptyTile() {for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if (board[i][j] == 0) {return true;}}}return false;
}// 判断是否还有可合并的相邻方块
bool canMerge() {for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if (i > 0 && board[i][j] == board[i - 1][j]) {return true;}if (i < SIZE - 1 && board[i][j] == board[i + 1][j]) {return true;}if (j > 0 && board[i][j] == board[i][j - 1]) {return true;}if (j < SIZE - 1 && board[i][j] == board[i][j + 1]) {return true;}}}return false;
}// 判断游戏是否结束
bool isGameOver() {return!hasEmptyTile() &&!canMerge();
}// 向上移动
void up() {bool moved = false;for (int j = 0; j < SIZE; ++j) {for (int i = 1; i < SIZE; ++i) {if (board[i][j] != 0) {int k = i;while (k > 0 && board[k - 1][j] == 0) {board[k - 1][j] = board[k][j];board[k][j] = 0;k--;moved = true;}if (k > 0 && board[k - 1][j] == board[k][j]) {board[k - 1][j] *= 2;board[k][j] = 0;moved = true;}}}}if (moved) {generateRandomTile();}
}// 向下移动
void down() {bool moved = false;for (int j = 0; j < SIZE; ++j) {for (int i = SIZE - 2; i >= 0; --i) {if (board[i][j] != 0) {int k = i;while (k < SIZE - 1 && board[k + 1][j] == 0) {board[k + 1][j] = board[k][j];board[k][j] = 0;k++;moved = true;}if (k < SIZE - 1 && board[k + 1][j] == board[k][j]) {board[k + 1][j] *= 2;board[k][j] = 0;moved = true;}}}}if (moved) {generateRandomTile();}
}// 向左移动
void left() {bool moved = false;for (int i = 0; i < SIZE; ++i) {for (int j = 1; j < SIZE; ++j) {if (board[i][j] != 0) {int k = j;while (k > 0 && board[i][k - 1] == 0) {board[i][k - 1] = board[i][k];board[i][k] = 0;k--;moved = true;}if (k > 0 && board[i][k - 1] == board[i][k]) {board[i][k - 1] *= 2;board[i][k] = 0;moved = true;}}}}if (moved) {generateRandomTile();}
}// 向右移动
void right() {bool moved = false;for (int i = 0; i < SIZE; ++i) {for (int j = SIZE - 2; j >= 0; --j) {if (board[i][j] != 0) {int k = j;while (k < SIZE - 1 && board[i][k + 1] == 0) {board[i][k + 1] = board[i][k];board[i][k] = 0;k++;moved = true;}if (k < SIZE - 1 && board[i][k + 1] == board[i][k]) {board[i][k + 1] *= 2;board[i][k] = 0;moved = true;}}}}if (moved) {generateRandomTile();}
}int main() {initialize();while (true) {printBoard();if (isGameOver()) {cout << "Game Over!" << endl;break;}char input;cin >> input;switch (input) {case 'w':up();break;case 's':down();break;case 'a':left();break;case 'd':right();break;default:cout << "请输入'w', 's', 'a',d'" << endl;}}return 0;
}

http://www.dtcms.com/a/316789.html

相关文章:

  • VUE2 学习笔记 合集
  • 如何在nuxt项目中使用axios进行网络请求?
  • 【STM32】HAL库中的实现(三):PWM(脉冲宽度调制)
  • C语言线程同步详解(互斥锁、信号量、条件变量和读写锁)
  • GPU 安装
  • 前端包管理器深度对比
  • 双模对讲机是什么意思?与模拟/数字对讲机有什么区别?
  • 使用 ECharts 实现小区住户数量统计柱状图
  • Leetcode-2080区间内查询数字的频率
  • Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql
  • 02--类和对象
  • 大厂面试题
  • React在使用create-react-app创建项目慢的解决办法
  • TanStack React Query 完全指南:从0到精通
  • Flux.1系列模型解析--Flux.1 Tools
  • 【模电笔记】—— 直流稳压电源——整流、滤波电路
  • 无线网络扫描工具 ‌WifiInfoView‌
  • 高通平台Wi-Fi Display学习-- 调试 Wi-Fi Display 问题
  • 人工智能领域、图欧科技、IMYAI智能助手2024年全年历史更新大事件汇总
  • 人工智能领域、图欧科技、IMYAI智能助手2025年6月更新月报
  • RHCA05--进程管理与文件系统管理
  • 基于SpringBoot的青少年网络安全教育系统
  • C语言:20250805学习(文件预处理)
  • 系统集成项目管理工程师【第十一章 规划过程组】项目管理计划、范围管理与收集需求篇
  • VUE丢失long类型精度,使用 json-bigint 库解析大整数
  • 基于腾讯iOA的企业安全防护体系融合升级指南:从边界防御到无边界纵深防护
  • 前端工程化:Vue3(二)
  • 在X86架构Linux中创建虚拟根目录并下载指定架构(如aarch64)的软件包(含依赖)
  • opencv 阈值分割函数
  • ASP3605I同步降压调节器的高频化设计与多相扩展技术优化方案