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

news2025/4/24 22:14:59

系统简介:

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

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

  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.coloradmin.cn/o/1823417.html

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

相关文章

C++数据结构02 队列及其应用

目录 队列及其特点 利用数组模拟队列的基本操作 创建队列 空队条件 元素入队 元素出队 模拟超市收银问题 队列操作 初始化 入队操作 出队操作 取出队首元素 STL模板中队列的基本使用 训练:约瑟夫问题 参考程序 队列及其特点 队列是一种特殊的线性表&am…

学习笔记——网络管理与运维——SNMP(概述)

一、SNMP概述 1、SNMP背景 SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。 通过网络,管理员可以管理…

一键实现电脑投屏到电视机,轻松享受更大画面

在数字化的今天,我们常常希望在更大的屏幕上分享电脑上的内容,观看视频、展示演示文稿,或者与家人一同欣赏照片。而实现电脑屏幕投射到电视机上,成为了许多人追求的方便而实用的功能。本文将为您详细介绍电脑投屏到电视机的方法&a…

Qt creator day2练习

使用手动连接,将登录框中的取消按钮使用第二种方式,右击转到槽,在该函数中,调用关闭函数,将登录按钮使用Qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为“admin”,密…

实现搜索功能中搜索内容高亮效果,本文通过fuzzysort库方案实现

目录 一:fuzzysort1.fuzzysort 介绍:2.需求所用方法介绍:gohighlight 3.效果实现 一:fuzzysort 1.fuzzysort 介绍: fuzzysort 是一个 JavaScript 库,用于对字符串数组进行模糊搜索和排序。它特别适用于自动补全&#…

只要往前走,至少能到达自己所能做到的部分

很多说自己力不足的人,往往是中道而废,在通往目标的途中就失败了。 无论怎么力不足,只要往前走,至少也能到达自己所能做到的部分。 《刻意练习》有个原则:如果有人能做到一件事,其他人就都能做到。 &…

【最新鸿蒙应用开发】——ArkWeb1——arkts加载h5页面

1. Web组件概述 Web组件用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。 页面加载:Web组件提供基础的前端页面加载的能力,包括:加载网络页面、本地页面、html格式文本数据。 页面交互&#…

测试记录4:在windows wsl2上配置ubuntu20.04

1.下载ubuntu20.04 (1) 在microsoft store中下载ubuntu20.04 (2) 在powershell中检查ubuntu20.04 wsl --listwsl -l -v安装成功 2.安装界面 见测试记录3 3.安装必要的功能包 sudo apt install zip sudo apt install gedit 出现问题: Command: xacro /home/buaa…

HCIA 15 AC+FIT AP结构WLAN基础网络

本例配置AC+FIT,即瘦AP+AC组网。生活中家庭上网路由器是胖AP,相当于AC+FIT二合一集成到一个设备上。 1.实验介绍及拓扑 某企业网络需要用户通过 WLAN 接入网络,以满足移动办公的最基本需求。 1. AC 采用旁挂核心组网方式,AC 与AP 处于同一个二层网络。 2. AC 作为DHCP …

【QT5】<重点> IMX6ULL开发板运行QT

目录 1. 安装交叉编译器 2. 命令行交叉编译QT项目 3. 运行该可执行程序 4. 开发板上运行UDP程序与Ubuntu通信 1. 安装交叉编译器 第一步:进入正点原子论坛找到IMX6ULL开发板的资料,下载“开发工具”,将“交叉编译工具”中的fsl-imx-x11-…

【递归、搜索与回溯】DFS解决FloodFill算法

一、经验总结 之前我们已经研究过了BFS解决FloodFill算法:【优选算法】BFS解决FloodFill算法-CSDN博客 DFS只是遍历顺序发生了变化,其他需要注意的点大差不差。 二、相关编程题 2.1 图像渲染 题目链接 733. 图像渲染 - 力扣(LeetCode&am…

少样本学习元学习

基本概念 首先是机器学习: 然后,什么是元学习(what is meta learning?) 之前,Component都是让人自己设置的。在Meta Learning中,我们期望它能够自己学出来。 不同的meta learning方法就是想办法去学learning algori…

GoogLeNet(InceptionV3)模型算法

GoogLeNet 团队在给出了一些通用的网络设计准则,以期望在不提高网络参数 量的前提下提升网络的表达能力: 避免特征图 (feature map) 表达瓶颈:从理论上讲,尺寸 (seize) 才包含了相关结构等重要因素,维度(channel) 仅仅…

教师博览杂志教师博览杂志社教师博览编辑部2024年第15期目录

高校教师园地 “心流”融入高职劳动教育课程的思考探究 宫婷婷;柳学知; 4-6 高职院校思政教育与就业创业指导融合机制研究 袁晓旭; 7-9 职教社助力乡村人才振兴的实践探索和功能定位——以江西省为例 涂恬; 10-12 育人之道《教师博览》投稿:cn7kantouga…

这家来自内蒙古的物流企业,用另一种方式减碳超500吨

2016年,多蒙德实业集团整合旗下物流及运销板块,组建成立了内蒙古多蒙德科技有限公司(以下简称“多蒙德”),整合互联网、大数据及智慧物流为一体,自主研发多蒙达网络货运平台及多个供应链智慧系统&#xff0…

对话分析数据:揭秘企业销售场景的隐形金矿

在数字化浪潮席卷全球的今天,企业对于数据的依赖愈发显著。尤其是在销售领域,数据不仅能够帮助企业精准定位市场,还能在竞争激烈的商海中为企业指明航向。每一个电话、每一次会议、每一段对话,都是企业宝贵的数据资产。然而&#…

机器学习二分类数据集预处理全流程实战讲解

本文概述 本文对weatherAUS数据集进行缺失值分析并剔除高缺失特征,合理填补剩余缺失值,利用相关性筛选关键特征,采用多种机器学习模型(如逻辑回归、随机森林等)在80%训练集上训练,并在20%测试集上预测明日降…

NG32031单片机串口初始化

目录 1. 串口基础 2. 串口配置步骤 3. N32G031串口初始化示例 3.1开启时钟 3.2 配置GPIO 3.3 配置USART 3.4 使能中断(如果需要) 3.5. 示例代码 4. 调试和验证 5. 注意事项 6. 额外功能 NG32G031单片机的串口(UART)通常…

【硬件模块】SSD1306 OLED屏幕(含GD32ESP32驱动代码)

OLED屏幕 最近在写GD32的文章,之前STM32有OLED屏幕来展示数据,ESP32可以直接打印到电脑屏幕上,GD32的话手上就没有办法了。 虽然是可以直接把STM32的OLED屏幕的驱动代码改改移植到GD32上面,不过想了想干脆写一个文章来说说如何驱…

苍穹外卖笔记-13-导入地址簿功能代码、用户下单、订单支付

文章目录 1. 导入地址簿功能代码1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码导入1.2.1 Mapper层1.2.2 Service层1.2.3 Controller层 1.3 功能测试 2. 用户下单2.1 需求分析和设计2.1.1 产品原型2.1.2 接口设计2.1.3 表设计 2.2 代码开发2.2.1 DTO设计…