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

五子棋小游戏

五子棋小游戏

好久没有碰C++了,最近写个五子棋的小游戏玩玩。

代码如下:

#include<iostream>
#include<vector>
using namespace std;// 棋盘的大小
const int SIZE = 15;
// 棋子的类型(空格、黑棋、白棋)
const char EMPTY = ' ';
const char BLACK = 'X';
const char WHITE = 'O';// 初始化棋盘
void init_board(vector<vector<char>>& board) {for (int i = 0; i < SIZE; ++i) {board[i].assign(SIZE, EMPTY);}
}// 打印棋盘
void print_board(vector<vector<char>>& board) {cout << "  ";//空两格// 打印列号for (int i = 0; i < SIZE; ++i) {printf("%2d", i + 1);}cout << endl;// 打印棋盘内容for (int i = 0; i < SIZE; ++i) {printf("%2d", i + 1);for (int j = 0; j < SIZE; ++j) {cout << "|" << board[i][j];}cout << "|" << endl;// 打印分隔线if (i != SIZE - 1) {cout << "  ";for (int j = 0; j < SIZE; ++j) {cout << "+-";}cout << "+" << endl;}}cout << endl;
}// 胜负判断
bool check_win(vector<vector<char>>& board, int x, int y, char player) {// 用于遍历方向(水平、垂直、左斜、右斜)int dirs[4][2] = { {0, 1}, {1, 0}, {1, 1}, {1, -1} };for (auto dir : dirs) {int dx = dir[0];int dy = dir[1];int count = 0; // 统计该方向上的连续棋子数(不含当前位置)for (int i = -4; i <= 4; ++i) {if (i == 0) continue; // 跳过当前位置int nx = x + dx * i;int ny = y + dy * i;if (nx >= 0 && nx < SIZE && ny >= 0 && ny < SIZE && board[nx][ny] == player) {count++;}else {break; // 遇到边界或不同棋子,停止该方向检查}}if (count + 1 >= 5) return true; // 加上当前位置,共5个则获胜}return false;
}int main() {cout << "五子棋游戏" << endl;cout << "输入格式:行号 列号。例如输入:1 2(表示在第1行第2列落子)" << endl;vector<vector<char>> board(SIZE, vector<char>(SIZE));init_board(board);  // 先初始化print_board(board); // 再打印初始棋盘char cur_player = BLACK; // 黑棋先行bool game_over = false;int x, y;while (!game_over) {cout << ((cur_player == BLACK) ? "黑棋(X)落子: " : "白棋(O)落子: ");cin >> x >> y;x--; // 转换为0-based索引(用户输入1~15 → 0~14)y--;// 检查输入合法性if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) {cout << "输入无效,请输入1-" << SIZE << "之间的数字" << endl;continue;}if (board[x][y] != EMPTY) {cout << "该位置已经有棋子!请重新落子" << endl;continue;}// 落子board[x][y] = cur_player;print_board(board);// 检测是否获胜if (check_win(board, x, y, cur_player)) {cout << (cur_player == BLACK ? "黑棋(X)获胜!" : "白棋(O)获胜!") << endl;game_over = true;}// 检测是否平局else {bool is_full = true;for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if (board[i][j] == EMPTY) {is_full = false;break;}}if (!is_full) break;}if (is_full) {cout << "平局!" << endl;game_over = true;}}// 仅在游戏未结束时切换玩家if (!game_over) {cur_player = (cur_player == BLACK) ? WHITE : BLACK;}}cout << "游戏结束!" << endl;return 0;
}

大概效果如下:

在这里插入图片描述

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

相关文章:

  • 如何让自己的网站被百度收录cms系统干什么的
  • 用wordpress做购物网站网络设计报告书
  • 自然语言处理(NLP)——自然语言处理原理、发展历程、核心技术
  • 人大金仓数据库 导入 命令
  • 栈与队列:从底层原理到实际应用
  • 法人变更在哪个网站做公示wordpress扒主题代码
  • 【Qt】定时器--滚动相册
  • Qt 与 VS Studio 结合使用
  • 咸宁做网站的公司那家便宜闵行网站制作哪里有
  • 高压输电线背景下无人机检测输电线和周围树木以及计算两者之间的距离
  • MySQL锁机制详解
  • 用户网站模板厦门唯一官方网站
  • 介绍化工项目建设和招聘的网站做网站app要注册哪类商标
  • milvus容器restart不成功,但docker仍在running问题排查
  • 女的和男的做那个视频网站广西网站建设公司电话
  • 织梦网站首页模板更换重要新闻头条
  • ABAP 静态代码分析 - 语法分析
  • 【VPX315】基于 3U VPX 总线架构的 JFMQL100TAI + FT-M6678 智能信号处理平台
  • 建个什么网站赚钱大连发布: 大连发布
  • 南京网站建设工作室企业网站推广是不是必要的
  • 网站制作html代码网站开发工作量
  • Sprintf Boot 之 Nacos 配置中心实践(spring.config.import=optional:nacos:)
  • 东莞行业网站建设中国电子商务中心官网
  • 山东住房和城乡建设厅网站登陆怎么打广告宣传自己的产品
  • 网站建设公司营业执照图片免费图片在线制作
  • 参加科学大会(dijkstra(堆优化版))
  • 百度上如何做优化网站wordpress 目录权限设置
  • 涪陵建设工程信息网站除了红动中国还有哪些设计网站
  • JVM虚拟机入门到实战(持续更新中)
  • 苏州网站建设与网络营销网络销售的好处和意义