使用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.mfbz.cn/a/569537.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习第四天

文章目录 yaml 三大组件的方式交互流程hive 使用安装mysql(hadoop03主机)出现错误解决方式临时密码 卸载mysql (hadoop02主机)卸载mysql(hadoop01主机执行)安装hive上传文件解压解决版本差异修改hive-env.sh修改 hive-site.xml上传驱动包初始化元数据在hdfs 创建hive 存储目录启…

怎么选出一个95分的产品?选品的逻辑到底是什么?如何不选错

大家好&#xff0c;我是电商花花。 选品定生死。 做电商的应该都会听过这句话&#xff0c;可能有些商家也只是听听就过去&#xff0c;如果没有遇到选品的问题就很难感受到。 如果你体验到一款好的产品带来的流量红利&#xff0c;体验一次爆单&#xff0c;就会知道选出优质的…

Reactor 核心概念-响应式编程-003

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: We build what we loveApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceReactor 核心库在: reactor-core, 实现。 引入 (gradl…

【头文件】对.h文件的理解

目录 &#x1f31e;1. 头文件的概念 &#x1f30a;1.1 头文件的由来 &#x1f30a;1.2 头文件的作用 &#x1f30a;1.3 在.h文件中实现函数也不会出错的原因 &#x1f31e;2. 简单示例 &#x1f30a;2.1 头文件addition.h &#x1f30a;2.2 头文件接口实现addition.cpp …

Leetcode 119 杨辉三角 II

目录 一、问题描述二、示例及约束三、代码方法一&#xff1a;递推方法二&#xff1a;线性递推 四、总结 一、问题描述 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。   在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。   自我…

【JavaEE网络】深入理解Socket套接字及其在网络编程中的应用

目录 Socket套接字UDP VS TCP有连接 VS 无连接可靠传输 VS 不可靠传输面向字节流 VS 面向数据报 全双工 VS 半双工 UDP数据报套接字编程DatagramSocket APIDatagramPacket APIInetSocketAddress APIUDP回显客户端服务器服务器和客户端的工作流程UDP翻译客户端服务器 Socket套接…

轻松找回误删文件,告别企业数据丢失,如何有效利用teamOS二级回收站,提升数据管理效率

在数字化时代&#xff0c;我们越来越依赖电子文件来记录和管理重要信息。 然而&#xff0c;伴随着这种便利的同时&#xff0c;误删或恶意操作导致的文件丢失也成为了一个令人头疼的问题。 那么本文就来谈一谈&#xff0c;企业网盘如何解决误删、甚至恶意删除的问题。 可道云…

高效的数据采集如何促进企业发展?

大数据开启了一个大规模生产、分享和应用数据的时代&#xff0c;它给技术和商业带来了巨大的变化。麦肯锡研究表明&#xff0c;在医疗、零售和制造业领域&#xff0c;大数据每年可以提高劳动生产率0.5-1个百分点。大数据在核心领域的渗透速度有目共睹&#xff0c;然而调查显示&…

ctfshow——XSS

文章目录 XSS介绍什么是xss&#xff1f;XSS危害XSS的分类常用XSSpayload web316——反射型XSSweb317——过滤<script> web318——过滤script、imgweb319——不止过滤script、imgweb320——过滤空格web321——不止过滤空格web322——不止过滤空格web323web324web 325web32…

ubuntu下安装python模块 pip intall xxx报错

报错内容大概如下&#xff1a; WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0fc68d6370>: Failed to establ…

Python 基础、流程、容器、函数

一、基础语法 1.1 前言 1.1.1 Python简介 Python是一门编程语言&#xff0c;Python的作者是Guido van Rossum&#xff08;龟叔&#xff09; Python优点&#xff1a;简单易学 Python与嵌入式、集成电路行业 强大的库和工具生态系统&#xff1a;Python拥有广泛而强大的库和…

javaWeb项目-社区医院管理服务系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java技术 Java语…

什么是全局特征,什么又是局部特征

全局特征和局部特征是用来描述数据中信息的两种不同方式&#xff0c;特别是在图像处理、模式识别和机器学习领域中经常被提到。它们有助于理解和分析数据的不同层面&#xff1a; 全局特征&#xff08;Global Features&#xff09; 全局特征描述了整个数据集的整体属性。在图像…

布局香港之零售小店篇 | 香港一人小企与连锁超市的竞争

近年来&#xff0c;内地品牌入驻香港市场开拓业务已成大势所趋。香港特区政府早前公布的「2023年有香港境外母公司的驻港公司按年统计调查」显示&#xff0c;2023年母公司在海外及内地的驻港公司数量高达9039家。内地品牌在香港的成功落地&#xff0c;不仅为香港市民带来了丰富…

杰理695的UI模式LED灯控制

UI模式LED灯修改每个模式对应的LED灯闪烁修改在ui_normal_status_deal(u8 *status, u8 *power_status, u8 ui_mg_para)

质量精美的UI设计素材库:3000+图标设计资源免费下载!

作为一名设计师&#xff0c;你的设计灵感来自哪里&#xff1f;想象一下吗&#xff1f;事实上&#xff0c;材料库仍然是大多数设计师必不可少的东西&#xff0c;如果你能更方便地找到他们可用的设计材料&#xff0c;那么在创作中&#xff0c;无疑可以用一半的努力得到两倍的结果…

【技巧】Git 版本控制工具没有图标提示怎么办?

Git 版本控制工具在日常开发中使用率是非常高的&#xff0c;多数情况下会安装 TortoiseGit 之类的插件&#xff0c;让文件夹显示图标&#xff0c;方便观察文件的状态。但是有时装完插件之后发现&#xff0c;文件夹/文件并没有图标显示&#xff0c;可以按照以下思路进行排查&…

TCP三次握手详解

目录 什么是TCP TCP头格式组成 三次握手 第一次握手 第二次握手 第三次握手 三次握手的好处 为什么需要三次握手&#xff1f; 什么是TCP 传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。 面向连接&#xff1a; 应用…

AI时代的GPU集群网络算力分析

浅谈GPU集群网络、集群规模和集群算力 引言在生成式AI&#xff08;GenAI&#xff09;和大模型时代&#xff0c;不仅需要关注单个GPU卡的算力&#xff0c;更要关注GPU集群的总有效算力。单个GPU卡的有效算力可以通过该卡的峰值算力来测算&#xff0c;例如&#xff0c;对于Nvidia…

力扣HOT100 - 98. 验证二叉搜索树

解题思路&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return recur(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean recur(TreeNode root,long lower,long upper){if(rootnull) return true;if(root.val<lower||root.val>upper) re…