简易五子棋的实现(C++)

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)

目录

      • 一、效果图
      • 二、代码(带注释)
      • 三、说明

一、效果图

在这里插入图片描述

二、代码(带注释)

#include <iostream>
#include <vector>using namespace std;const int BOARD_SIZE = 15; // 定义棋盘大小为 15x15
vector<vector<char>> board(BOARD_SIZE, vector<char>(BOARD_SIZE, '.')); // 初始化棋盘,所有位置都是空的(用'.'表示)// 打印棋盘的函数
void printBoard() {for (int i = 0; i < BOARD_SIZE; ++i) {for (int j = 0; j < BOARD_SIZE; ++j) {cout << board[i][j] << " ";}cout << endl;}
}// 落子的函数
bool makeMove(int x, int y, char player) {// 检查落子的位置是否有效if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || board[x][y] != '.') {return false;}board[x][y] = player; // 在指定位置放置玩家的棋子return true;
}// 检查是否赢得比赛的函数
bool checkWin(int x, int y) {char player = board[x][y];int count;// 水平方向检查count = 1;for (int i = x - 1; i >= 0 && board[i][y] == player; --i) count++;for (int i = x + 1; i < BOARD_SIZE && board[i][y] == player; ++i) count++;if (count >= 5) return true;// 垂直方向检查count = 1;for (int i = y - 1; i >= 0 && board[x][i] == player; --i) count++;for (int i = y + 1; i < BOARD_SIZE && board[x][i] == player; ++i) count++;if (count >= 5) return true;// 对角线检查(左上到右下)count = 1;for (int i = 1; x - i >= 0 && y - i >= 0 && board[x - i][y - i] == player; ++i) count++;for (int i = 1; x + i < BOARD_SIZE && y + i < BOARD_SIZE && board[x + i][y + i] == player; ++i) count++;if (count >= 5) return true;// 对角线检查(左下到右上)count = 1;for (int i = 1; x - i >= 0 && y + i < BOARD_SIZE && board[x - i][y + i] == player; ++i) count++;for (int i = 1; x + i < BOARD_SIZE && y - i >= 0 && board[x + i][y - i] == player; ++i) count++;if (count >= 5) return true;return false;
}// 检查棋盘是否已满的函数
bool isBoardFull() {for (int i = 0; i < BOARD_SIZE; ++i) {for (int j = 0; j < BOARD_SIZE; ++j) {if (board[i][j] == '.') {return false;}}}return true;
}// 主函数
int main() {int x, y;char currentPlayer = 'X'; // 初始玩家while (true) {printBoard(); // 打印棋盘cout << "玩家" << currentPlayer << ", 输入行列的来放入棋子: ";cin >> x >> y;if (makeMove(x, y, currentPlayer)) { // 尝试落子if (checkWin(x, y)) { // 检查是否赢得比赛cout << "玩家 " << currentPlayer << " wins!" << endl;break;} else if (isBoardFull()) { // 检查是否平局cout << "平局了!" << endl;break;}currentPlayer = (currentPlayer == 'X') ? 'O' : 'X'; // 更换玩家} else {cout << "无效移动,请重新尝试" << endl;}}return 0;
}

三、说明

上述代码实现了一个简单的棋盘游戏,适用于两位玩家,棋盘大小:15x15。关于实现思路和自定义函数说明如下:

  1. 棋盘初始化:棋盘是一个15x15的网格,初始化时用’.'表示空位。

  2. 打印棋盘printBoard()函数打印当前棋盘的状态。

  3. 落子makeMove()函数允许玩家在棋盘上放置他们的符号(‘X’或’O’),前提是所选单元格为空。

  4. 检查胜利checkWin()函数检查玩家的最后一个动作是否赢得了游戏。它水平、垂直和对角线(两个方向)检查是否有连续的5个相同符号。

  5. 检查棋盘是否已满isBoardFull()函数检查棋盘上是否还有空位。

  6. 游戏循环:在main()中,游戏继续循环,每位玩家轮流进行移动。每次移动后,它检查是否胜利或平局。如果一方胜利或棋盘已满(导致平局),游戏结束。

  7. 用户输入:玩家通过标准输入(cin)输入他们的移动,他们需要输入行号和列号。

  8. 处理无效移动:如果进行了无效的移动,游戏会提示用户重新尝试。

这个棋盘游戏,基于文本实现,在控制台中进行,能够提供一个简单但功能完备的双人棋盘游戏实现。

Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day7--java高级编程:泛型,集合:集合数组互转,迭代器,增强for循环,集合工具类

4. 泛型 4.1 泛型概述 4.1.1 生活中的例子 举例1&#xff1a;中药店&#xff0c;每个抽屉外面贴着标签 举例2&#xff1a;超市购物架上很多瓶子&#xff0c;每个瓶子装的是什么&#xff0c;有标签 举例3&#xff1a;家庭厨房中&#xff1a; Java中的泛型&#xff0c;就…

Cytoscape3.8安装下载及安装教程

Cytoscape3.8下载链接&#xff1a;https://docs.qq.com/doc/DUmhZQ1lqTWhuSXJC 1.选中下载好的安装包右键选择“解压到 Cytoscape3.8.0”文件夹 2.打开解压好的”Cytoscape3.8.0“文件夹 3.选中“Cytoscape_3_8_0_windows_64bit.exe“右键以管理员身份运行 4.点击”Download“&…

网工内推 | 网络工程师,NP认证优先,上市公司,包吃,最高15薪

01 无锡先导智能装备股份有限公司 招聘岗位&#xff1a;高级网络工程师 职责描述&#xff1a; 1.依据项目规划方案提供硬件及网络方案设计&#xff1b; 2.面向客户提供网络技术支持&#xff0c;包括故障的解决、性能的优化、日常维护等&#xff1b; 3.和合作伙伴、供应商的技术…

2024.1.3 Spark on Yarn部署方式与工作原理

目录 Spark集群类型有以下几种&#xff1a; Spark的部署方式有以下几种&#xff1a; Spark on YARN的部署方式有两种&#xff1a;client模式和cluster模式。 Spark底层的工作原理,执行流程 Spark集群类型有以下几种&#xff1a; Standalone模式&#xff1a;这是Spark自带的…

产品Axure的安装以及组件介绍

Axure介绍&#xff1a; Axure是一款用户体验设计工具&#xff0c;可以用于创建交互式原型、线框图和设计文档。它支持快速原型开发、界面设计、信息架构、流程图和注释等功能&#xff0c;可以帮助设计师快速地创建和共享交互式原型&#xff0c;从而更好地与客户和团队协作。 …

【C++】HP-Socket(一): 下载、Linux上编译、Windows远程编译Linux版本

1、简介 国产、高性能、跨平台网络通信框架。 作者于2024-01-01更新了Release版本v5.9.4&#xff0c;辛苦了&#xff0c;向作者致敬&#xff01; 源码下载&#xff1a; https://gitee.com/mirrors/hp-socket https://github.com/ldcsaa/HP-Socket 2、编译 2.1 在Linux上编…

《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比

前言 2024 年 啦&#xff01;Vue2 也于 2023.12.31 寿终正寝 &#xff01; 然而我的 Vue3 升级一再拖延&#xff08;惭愧不已&#xff09;~ 赶起来吧~ 今天用 vue-cli 和 vite 分别创建了 Vue3 项目&#xff0c;具体实现步骤见如下两篇。 《基于 Vue Cli4.x Vue3 TS styl…

OceanBase入选Gartner®云数据库管理系统魔力象限“荣誉提及”

近日&#xff0c;全球IT市场研究和咨询公司Gartner发布最新报告《Magic Quadrant™ for Cloud Database Management Systems》&#xff08;全球云数据库管理系统魔力象限&#xff09;。全自研分布式数据库 OceanBase 入选“荣誉提及”&#xff0c;2022 年推出的云数据库 OB Clo…

优思学院|为什么精益生产在你的企业就不管用呢?

精益生产&#xff08;Lean Production&#xff09;是一种旨在提高效率、减少浪费、优化流程的生产管理理念。然而&#xff0c;尽管它的理念广受推崇&#xff0c;但在实际应用中&#xff0c;许多企业却发现精益生产似乎并不奏效。那么&#xff0c;问题出在哪里呢&#xff1f; 企…

基于华为ENSP模拟器-vlan划分网络

需求 不连外网的内网。需求隔离故障和隔离广播风暴&#xff0c;并要保证网络的连通。 解决方案使用三层交互机&#xff0c;设置vlan用于隔离网络&#xff0c;并在三层交互机为网关保证各个vlan之间的通讯。 实现 使用三层交互机&#xff0c;设置vlan用于隔离网络&#xff0…

TB-C/C++

1.main函数之前之后执行的代码 设置栈指针初始化静态变量和全局变量&#xff08;.data段内容&#xff0c;已初始化且不为0&#xff09;赋初值&#xff08;.bss段内容&#xff0c;未初始化的全局变量和静态变量&#xff09;传参&#xff08;argc,argv&#xff09;atexit() 在…

Paddle3D 2 雷达点云CenterPoint模型训练

2 Paddle3D 雷达点云CenterPoint模型训练–包含KITTI格式数据地址 2.0 数据集 百度DAIR-V2X开源路侧数据转kitti格式。 2.0.1 DAIR-V2X-I\velodyne中pcd格式的数据转为bin格式 参考源码&#xff1a;雷达点云数据.pcd格式转.bin格式 def pcd2bin():import numpy as npimport…

【EDA软件】国产嘉立创EDA使用

嘉立创&#xff08;JLCPCB&#xff09; 嘉立创&#xff08;JLCPCB&#xff09;提供的EDA专业版是一款在线的原理图设计与PCB设计工具&#xff0c;可以协助用户完成电子设计项目。以下是使用嘉立创EDA专业版的一般步骤&#xff1a; 注册与登录&#xff1a; 首先&#xff0c;你需…

实习知识整理11:确认订单并将订单的相关信息插入用户订单表和订单详情表

用户订单表&#xff1a; 订单详情表&#xff1a; 思路分析&#xff1a;首先我们需要知道当点击了确认订单按钮后&#xff0c;需要向后端传递哪些数据&#xff0c;先看用户订单表&#xff1a;ORDER_ID是不需要传的&#xff0c;这个可以在后台生成就行了&#xff1b;USER_ID是需要…

2023年12月GESP C++七级编程题转Python真题解析

七、2023年12月GESP C(Python)七级编程题 2023年12月GESP Python最高六级&#xff0c;但C与Python同级编程题相同。本篇引用2023年12月GESPC七级编程题&#xff0c;用Python实现。 【七级编程题1】 【试题名称】&#xff1a;商品交易 时间限制&#xff1a;1.0 s 内存限制&…

微信公众号请求获取相关权限后端代码

用微信的东西&#xff0c;总要避免到各种与微信那边的交互。 1.首先要有个接口&#xff0c;证明你是服务端&#xff08;填写服务器配置&#xff09; 接入概述 | 微信开放文档 主代码 /*** 服务器配置验证* param* return*/PassTokenGetMapping("/giveWxCheck")publi…

详解Vue3中的事件监听方式

本文主要介绍Vue3中的事件监听方式。 目录 一、v-on指令二、使用符号简写三、事件修饰符四、动态事件名五、常见的监听事件六、自定义事件 在Vue3中&#xff0c;事件监听的方式与Vue2有一些不同。 下面是Vue3中事件监听方式的详细介绍&#xff1a; 一、v-on指令 Vue3中仍然使…

​LeetCode解法汇总2487. 从链表中移除节点

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个…

WPF容器的背景对鼠标事件的影响

背景&#xff1a;在实现鼠标拖动窗口的过程中发现对父容器设置了鼠标拖动窗口的事件MouseLeftButtonDown private void DragWindow(object sender, MouseButtonEventArgs e) {if (e.LeftButton MouseButtonState.Pressed)DragMove(); } 问题&#xff1a;非常困惑的是&#x…

C# windows服务程序开机自启动exe程序

我们使用传统的Process.Start(".exe")启动进程会遇到无法打开UI界面的问题&#xff0c;尤其是我们需要进行开启自启动程序设置时出现诸多问题&#xff0c;于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序&#xff0c;并且是显式运行。 首先是打开…