Python 五子棋游戏(人人对战人机对战)【含Python源码 MX_006期】

系统简介:

        五子棋是一种双人对弈的策略棋类游戏,玩家轮流在棋盘上落子,目标是通过在水平、垂直或对角线上连成一条直线的方式,最先在棋盘上形成连续的五颗棋子。五子棋的规则相对简单,但是需要玩家在落子过程中进行深思熟虑,以避免对手形成连线,同时寻找机会自己形成连线,在游戏中,玩家轮流选择黑色或白色的棋子,然后在棋盘上落子。通过合理的布局和防守,以及对对手的进攻进行及时的应对,玩家可以在游戏中取得胜利。

在五子棋游戏中,通常有两种主要的对战模式:人人对战和人机对战。

  1. 人人对战:这种模式是最经典的五子棋游戏方式,两名玩家轮流在同一台设备上进行对弈。他们可以坐在一起,或者通过远程连接进行游戏。每位玩家都是根据自己的策略和技巧来下棋,互相竞争,直到其中一方获胜或棋局以和局结束。

  2. 人机对战:在这种模式下,玩家与计算机程序进行对战。计算机程序会模拟人类玩家的行为,具有一定的智能和策略。玩家可以选择不同难度级别的程序来挑战自己,从简单的程序到复杂的深度学习模型,以及其他先进的人工智能算法。

界面图:

人机界面(PVE)

人人界面(PVP)

部分代码:

def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption('五子棋')

    font1 = pygame.font.SysFont('SimHei', 36)
    font2 = pygame.font.SysFont('SimHei', 72)
    fwidth, fheight = font2.size('黑方获胜')

    checkerboard = Checkerboard(Line_Points)
    cur_runner = BLACK_CHESSMAN
    winner = None

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_RETURN:
                    if winner is not None:
                        winner = None
                        cur_runner = BLACK_CHESSMAN
                        checkerboard = Checkerboard(Line_Points)
            elif event.type == MOUSEBUTTONDOWN:
                if winner is None:
                    pressed_array = pygame.mouse.get_pressed()
                    if pressed_array[0]:
                        mouse_pos = pygame.mouse.get_pos()
                        click_point = _get_clickpoint(mouse_pos)
                        if click_point is not None:
                            if checkerboard.can_drop(click_point):
                                winner = checkerboard.drop(cur_runner, click_point)
                                if cur_runner == BLACK_CHESSMAN:
                                    cur_runner = WHITE_CHESSMAN
                                else:
                                    cur_runner = BLACK_CHESSMAN
                        else:
                            print('超出棋盘区域')

        # 画棋盘
        _draw_checkerboard(screen)

        # 画棋盘上已有的棋子
        for i, row in enumerate(checkerboard.checkerboard):
            for j, cell in enumerate(row):
                if cell == BLACK_CHESSMAN.Value:
                    _draw_chessman(screen, Point(j, i), BLACK_CHESSMAN.Color)
                elif cell == WHITE_CHESSMAN.Value:
                    _draw_chessman(screen, Point(j, i), WHITE_CHESSMAN.Color)

        _draw_chessman_pos(screen, (SCREEN_HEIGHT + Stone_Radius2, Start_X + 20), BLACK_STONE_COLOR)
        _draw_chessman_pos(screen, (SCREEN_HEIGHT + Stone_Radius2, Start_X + 20 + Stone_Radius2 * 3), WHITE_STONE_COLOR)

        if winner:
            print_text(screen, font2, (SCREEN_WIDTH - fwidth)//2, (SCREEN_HEIGHT - fheight)//2, winner.Name + '获胜', RED_COLOR)

        if cur_runner == BLACK_CHESSMAN:
            print_text(screen, font1, RIGHT_INFO_POS_X, Start_X, '获胜' if winner else '落子中', BLUE_COLOR)
        else:
            print_text(screen, font1, RIGHT_INFO_POS_X, Start_X + Stone_Radius2 * 3, '获胜' if winner else '落子中', BLUE_COLOR)

        pygame.display.flip()

完整代码:Python 五子棋游戏(人人对战&&人机对战)

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

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

相关文章

python14 字典类型

字典类型 键值对方式,可变数据类型,所以有增删改功能 声明方式1 {} 大括号,示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …

数字人源码部署怎么做?如何高效搭建好用的数字人系统?

作为人工智能时代的风口项目,AI数字人自出现之日起便引发了大量的关注。不少创业者都有了搭建数字人系统的想法,但却苦于没有强大的专业背景和雄厚资金支撑,只能在局外徘徊,而这恰恰为数字人源码公司推出的数字人源码部署服务的火…

第28讲:Ceph集群使用RBD块存储与K8S Volumes集成

文章目录 1.Ceph集群使用RBD块存储与K8S集成简介2.Ceph集群RBD块存储与K8S Volume集成2.1.在Ceph集群中创建K8S集群使用的块存储2.2.创建用于K8S访问Ceph RBD块设备的认证用户2.3.将认证用户的Key存储在K8S Secret资源中2.4.在K8S集群的所有节点中安装Ceph命令2.5.创建Pod资源使…

基于粒子群优化算法的的微电网多目标优化调度----算法改进

前言: 当阅读过前一篇我的博客之后,并且认真去读懂了那篇文章末尾的代码,那么,后续的算法改进对于你来说应当是很容易的了。前文中提及过,粒子群在进行迭代时,每迭代一次,都会根据自己个体最优值…

JAVA小知识22:迭代器iterator与列表迭代器ListIterator

一、迭代器 在 Java 中,迭代器是一个设计模式,用于遍历集合中的元素。Java 提供了 Iterator 接口来实现这一功能。迭代器的主要作用是提供一种通用的遍历集合的方法,而不需要了解集合的具体实现细节。 1.1、迭代器的特点 统一接口&#xf…

MySQL中实现行列转换的示例

在 MySQL 中进行行列转换(即,将某些列转换为行或将某些行转换为列)通常涉及使用条件逻辑和聚合函数。虽然 MySQL 没有像 Oracle/SQL Server 中的 PIVOT 和 UNPIVOT 那样的直接功能,但你可以通过结合 CASE 语句、UNION 或 UNION AL…

Linux下Shell脚本基础知识

主要参考视频: 这可能是B站讲的最好的Linux Shell脚本教程,3h打通Linux-shell全套教程,从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档: Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…

银行数仓项目实战(一)--什么是数据仓库

文章目录 数据仓库特点目的:监管报送监管报送的系统主要有?监管报送报送的数据 OLTP和OLAP 架构 数据仓库 数据仓库是一个面向主题的,集成的,非易失的且随时间变化的数据集合,用来支持管理人员的决策。 数据仓库是一个…

采集罗克韦尔AB、西门子等PLC数据发布成HTTP接口

智能网关IGT-DSER集成了多种PLC的原厂协议,方便实现各种PLC的原厂协议转换为HTTP协议的服务端,通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址,即可接收来自客户端的GET、PUT和POST命令,解析和打包JSON文件(JSON文件格…

两个链表合并升序-链表题

21. 合并两个有序链表 - 力扣(LeetCode) 非递归 class Solution { public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if(list1 nullptr && list2 ! nullptr)return list2;if(list2 nullptr && list1 ! nullptr)re…

电子传真怎么在国产系统上使用?一文看懂网络传真信创方案

国产化浪潮正在逐步深入,越来越多的企业开始关注如何在国产系统上高效、安全地使用办公软件,电子传真系统也不例外。 作为网络电子传真领域的重要品牌,EastFax也对原Windows电子传真系统进行了信创改造,全面支持国产化操作系统、…

取证工作: SysTools SQL Log Analyzer, 完整的 SQL Server 日志取证分析

天津鸿萌科贸发展有限公司是 Systools 系列软件的授权代理商。 SysTools SQL Log Analyzer 是 Systools 取证工具系列之一,用于调查 SQL Server 事务日志,以对数据库篡改进行取证分析。 什么是 SQL Server 事务日志? 在深入研究 SQL 事务日…

【工作】计算机行业相关的十六类工作简介

本文简单介绍了计算机行业相关的工作类别,共16种,包括常见招聘要求与平均工资。平均工资信息来源:米国企业点评职场社区glassdoor(https://www.glassdoor.com/index.htm) (一)软件工程师 软件…

【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术

🔥 个人主页:空白诗 文章目录 引言一、图数据及其应用场景1.1 图数据的定义和特征1.2 常见的图数据结构1.2.1 社交网络1.2.2 知识图谱1.2.3 分子结构1.2.4 交通网络 1.3 图数据在不同领域的应用实例1.3.1 社交网络中的推荐系统1.3.2 知识图谱中的信息检索…

流量卡怎么办理的攻略

一、确定需求 在办理流量卡之前,你需要明确自己的需求。根据不同的使用场景,你可能需要考虑以下几个方面: 月租费用:不同运营商提供的流量卡套餐价格各异,从低至19元到高达199元不等。 流量大小:从30GB到3…

ChromeDriver新手教程:一步步指导Chrome 114到127版本的驱动安装

114之前版本下载链接在这里 ​​​​​​125以后版本下载链接在此,只有后面status是绿色对勾的才可以下载,驱动大版本一致就可以使用,不需版本号一模一样;下载所需版本只需点击对应的版本名称即可跳转到对应版本的下载位置。 以…

同三维T80004JEH2-4K60 双路4K60 HDMI解码器

输出:2路HDMI2路3.5音频,最高支持1路4K60HDMI输出 可以同源/独立分屏输出两种模式可选:对应两个HDMI输出一样和不一样的信号 同源可以解码36路网络流(1/4/9/16/25/36),两个HDMI输出一样的信号&#xff…

《骑行健身:“柳叶刀”研究揭示的健康与经济双赢策略》

在这个物价飞涨、经济压力日益加重的时代,普通人如何在不增加额外负担的情况下提升生活质量?《柳叶刀》的最新研究为我们揭开了一个意想不到的秘密:坚持健身,尤其是骑行,竟等同于每年为自己赚取了一笔不小的财富。这一…

表格识别工具哪个好?简单操作,一键识别表格

随着2024年高考的圆满结束,考生们迎来了新的挑战——志愿填报。这不仅是一个技术活,更是一个信息战。 面对海量的高校信息和复杂的数据表格,考生们需要一种快速、准确的方法来整理和分析这些数据。幸运的是,现代科技提供了多种表…

【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)

🔥引言 本篇将深入解析单链表:探索底层逻辑,理解底层是如何实现并了解该接口实现的优缺点,以便于我们在编写程序灵活地使用该数据结构。 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 &…