使用linux,c++,创作一个简单的五子棋游戏

#include <iostream>  
#include <vector>  
#include <unordered_map>  using namespace std;  // 棋盘大小  
const int BOARD_SIZE = 15;  // 棋子类型  
enum ChessType {  EMPTY,  BLACK,  WHITE  
};  // 棋盘类  
class ChessBoard {  
private:  vector<vector<ChessType>> board;  public:  ChessBoard() {  board.resize(BOARD_SIZE, vector<ChessType>(BOARD_SIZE, EMPTY));  }  // 打印棋盘  void print() {  for (int i = 0; i < BOARD_SIZE; ++i) {  for (int j = 0; j < BOARD_SIZE; ++j) {  switch (board[i][j]) {  case BLACK: cout << "● "; break;  case WHITE: cout << "○ "; break;  default: cout << "· "; break;  }  }  cout << endl;  }  }  // 下棋  bool placeChess(ChessType type, int x, int y) {  if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || board[x][y] != EMPTY) {  return false;  }  board[x][y] = type;  return true;  }  // 检查是否胜利  bool checkWin(ChessType type, int x, int y) {  // 检查八个方向(上下左右,四个对角线)  vector<pair<int, int>> directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1},  {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};  for (auto dir : directions) {  int count = 1;  for (int i = 1; i < 5; ++i) {  int nx = x + i * dir.first;  int ny = y + i * dir.second;  if (nx >= 0 && nx < BOARD_SIZE && ny >= 0 && ny < BOARD_SIZE && board[nx][ny] == type) {  ++count;  } else {  break;  }  }  for (int i = 1; i < 5; ++i) {  int nx = x - i * dir.first;  int ny = y - i * dir.second;  if (nx >= 0 && nx < BOARD_SIZE && ny >= 0 && ny < BOARD_SIZE && board[nx][ny] == type) {  ++count;  } else {  break;  }  }  if (count >= 5) {  return true;  }  }  return false;  }  
};  int main() {  ChessBoard board;  ChessType currentPlayer = BLACK;  bool gameOver = false;  while (!gameOver) {  board.print();  cout << (currentPlayer == BLACK ? "Black" : "White") << ", enter your move (x y): ";  int x, y;  cin >> x >> y;  if (board.placeChess(currentPlayer, x, y)) {  if (board.checkWin(currentPlayer, x, y)) {  board.print();  cout << (currentPlayer == BLACK ? "Black wins!" : "White wins!") << endl;  gameOver = true;  } else {  currentPlayer = (currentPlayer == BLACK) ? WHITE : BLACK;  }  } else {  cout << "Invalid move. Try again." << endl;  }  }  return 0;  
}

编译通过后的执行效果:

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

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

相关文章

CHiME-8多通道远场语音识别Baseline介绍

语音领域每年都有很多比赛&#xff0c;每个比赛都有自己的侧重点&#xff0c;其中CHiME系列比赛的侧重点就是多通道远场语音识别&#xff0c;与其他的语音识别比赛有所区别的是&#xff0c;CHiME提供分布式麦克风和麦克风阵列数据&#xff0c;这样可以选择合适的前端算法以降低…

创建Spring Boot项目

选择Maven Archetype,之后再Archetype选择webapp 两个都打勾 这是当前的打勾 这个是以后都默认勾上 打开对应的路径&#xff0c;用vscode打开settings.xml 加入国内源 阿里云 若没有此文件可上网查找 若jar包出现问题&#xff0c;可在repostitory文件内全删除 之后在Maven刷…

第12章 最佳的UI体验——Material Design实战

第12章 最佳的UI体验——Material Design实战 其实长久以来&#xff0c;大多数人都认为Android系统的UI并不算美观&#xff0c;至少没有iOS系统的美观。以至于很多IT公司在进行应用界面设计的时候&#xff0c;为了保证双平台的统一性&#xff0c;强制要求Android端的界面风格必…

HarmonyOS开发案例:【 自定义弹窗】

介绍 基于ArkTS的声明式开发范式实现了三种不同的弹窗&#xff0c;第一种直接使用公共组件&#xff0c;后两种使用CustomDialogController实现自定义弹窗&#xff0c;效果如图所示&#xff1a; 相关概念 [AlertDialog]&#xff1a;警告弹窗&#xff0c;可设置文本内容和响应回…

了解HTTP代理服务器:优势、分类及应用实践

在我们日常的网络使用中&#xff0c;我们经常听到HTTP代理服务器这个术语。那么&#xff0c;HTTP代理服务器到底是什么&#xff1f;它有什么优势和分类&#xff1f;又如何应用于实践中呢&#xff1f;让我们一起来了解一下。 HTTP代理服务器是一种位于客户端和服务器之间的中间…

图像处理基础知识

图像处理基础知识 图像 1、模拟图像 模拟图像&#xff0c;又称连续图像&#xff0c;是指在二维坐标系中连续变化的图像&#xff0c;即图像的像点是无限稠密的&#xff0c;同时具有灰度值&#xff08;即图像从暗到亮的变化值&#xff09;。 2、数字图像 数字图像&#xff0…

Python基础知识—运算符和if语句(二)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》 《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 1.输入和输出函数1.1输出函数1.2输入函数 2.常见运算符2.1赋值运算符2.2比较运算符2.3逻辑运算符2.4and逻辑与2.5or逻辑或2.6not逻…

ceph介绍

一、前言 Ceph 是一个完全分布式的系统&#xff0c;它将数据分布在整个集群中的多个节点上&#xff0c;以实现高可用性和容错性&#xff0c;ceph支持对象存储、块存储、文件存储所以被称为统一存储&#xff0c;ceph的架构由以下组件组成:mon、mgr、osd、mds、cephfs、rgw&#…

深度学习Day-14:RNN实现心脏病预测

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a; 本地读取并加载数据&#xff1b;了解循环神经网络RNN的构建过程&#xff1b;测试集accuracy达到87%…

自己搭建的大疆无人机RTMP流媒体服务延迟太大

流程&#xff1a;无人机摄像头->图传->遥控器->流媒体服务器->取流播放&#xff0c;延迟有10秒来的&#xff0c;大家有没有什么好的方案。

C# 结合JavaScript实现手写板签名并上传到服务器

应用场景 我们最近开发了一款笔迹测试功能的程序&#xff08;测试版&#xff09;&#xff0c;用户在手写板上手写签名&#xff0c;提交后即可测试出被测试者的心理素质评价分析。类似功能的场景还比如&#xff0c;在银行柜台办理业务&#xff0c;期间可能需要您使用手写设备进…

2023最新!nginx安装配置保姆级教程

2023最新!nginx安装配置保姆级教程 这篇文章了参考了这位的教程:https://blog.csdn.net/qq_36838700/article/details/129971765 导航 文章目录 2023最新!nginx安装配置保姆级教程一、nginx下载二、编译安装nginx安装pcre安装openssl、zlib、gcc依赖安装nginx 二、拓展 一、n…

低空经济+飞行汽车:载人无人机技术详解

低空经济与飞行汽车是近年来备受关注的话题。随着科技的不断进步&#xff0c;尤其是无人机技术的快速发展&#xff0c;飞行汽车已经从科幻概念逐渐变为现实。以下是对低空经济与飞行汽车&#xff0c;特别是载人无人机技术的详解&#xff1a; 1. 低空经济&#xff1a; 定义&…

javaEE--多线程学习-进程调度

进程调度不明白&#xff1f;看这一篇文章就够了&#xff0c;逻辑衔接严密&#xff0c;文末附有关键面试题&#xff0c;一个海后的小故事让你瞬间明白这里面的弯弯绕绕&#xff01; 目录 1.什么是进程&#xff1f; 2.进程控制块&#xff08;PCB&#xff09; 2.1 一个PCB就是一…

已解决java.lang.IllegalThreadStateException: 非法线程状态异常的正确解决方法,亲测有效!!!

已解决java.lang.IllegalThreadStateException: 非法线程状态异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 场景描述 报错原因 解决思路 解决方法 检查线程状态 正确管理线程生命周期 异常处理 总结 博主v&#xff1a…

JavaEE >> Spring Boot(1)

Spring Boot 前面已经介绍了 Spring &#xff0c;是为了简化 Java 程序开发的&#xff0c;而在前面创建的过程中就会发现其实 Spring 还是有点复杂&#xff0c;此时 Spring Boot 就诞生了&#xff0c; Spring Boot 是为了简化 Spring 程序开发的。 Spring Boot 即 Spring 脚手…

history日志发送到远程日志服务器

主要目标是设置history信息包含谁、源IP、在哪个目录下、做了什么工作&#xff0c;并实时将日志发送到日志审计服务。 &#xff08;一&#xff09;基础知识 1.logger 是一个shell接口&#xff0c;可以通过该接口使用rsyslog的日志模块 2./etc/profile.d/history.sh比配置/etc…

Android某钉数据库的解密分析

声明 1 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 目的 1 解密app数据库&#xff0c;用数据库软件打开查看信息内容 入手…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件&#xff0c;在安装页面&#xff0c;单击“Next” 在安装路径选择页面&#xff0c;保持默认&#xff0c;单击“Next” 在功能组件选择页面&#xff0c;保持默认&#xff0c;单击“Next” 在开始菜单文件夹设置页面&#xff0c;保持默认&am…

浅谈rDNS在IP情报建设中的应用

在当今数字化世界中&#xff0c;互联网已经成为人们日常生活和商业活动中不可或缺的一部分。在这个庞大而复杂的网络生态系统中&#xff0c;IP地址是连接和识别各种网络设备和服务的基础。然而&#xff0c;仅仅知道一个设备的IP地址并不足以充分理解其在网络中的角色和行为。为…