基于Python实现的五子棋游戏设计(alpha-beta剪枝技术)

news2024/9/21 7:53:41

目录
第1章 问题描述 3
第2章 问题分析 3
第3章 算法设计 4
3.1 算法概述 4
3.2 极大极小树 4
3.3 α-β剪枝算法 5
3.3总体设计 6
3.3.1 系统流程图 7
3.3.2 基本设计 7
3.4 预处理 8
第4章 算法实现 11
4.1 估价函数 11
4.2 alpha-beta剪枝算法 15
4.2.1 算法流程图 15
4.2.2 代码实现 16
第5章 成果展示与性能分析 18
5.1 成果展示 18
5.2 性能分析 23
第6章 结论与心得体会 23
6.1 结论 23
6.2 实验心得 24
参考文献 28
3.3.2 基本设计
1.界面设计:基于tkinter设计的界面,包括游戏模式菜单、残局菜单,关于菜单三个部分组成,游戏模式菜单部分包括了人机对弈(AI先手)、人机对弈(玩家先手)、双人对弈(白子先手)、双人对弈黑子先手)等多种模式,各种模式的随意切换,突出程序灵活的特性。残局菜单栏我们设计了五种残局,难易程度程度依次递增,增强了游戏的趣味性,这个五个残局我们在网上小程序找的棋局,难度还可以。‘关于’菜单栏部分我们设计的事宜子界面,里面就显示我们小组开发过程负责的各模块的信息。
2. 棋盘设计:
我们的程序棋盘的显示部分是利用tkinter库的画布实现的,画布的背景设置为粉色,界面的美观性大大增强。在画布上画上1414的小格子表示棋盘,交点处放棋子,所以棋盘的大小为1515。程序中的棋盘对应15*15的二维数组chess_b,初始化为0,黑子用1填充数组,白子用2填充数组。至于画棋子,我们是根据棋盘数组将对应的位置用贴图的方法将黑棋白棋贴上去。
3. 胜负判断:
只需考虑横、竖、左斜和右斜四个方向,当棋盘数组chess_b中某个方向存在连续的五个‘1’或者‘2’时即黑子或者白子胜利,程序调用重置函数,清空棋盘,进入初始换界面,然后选择模式可继续开新局。
3.4 预处理
1.设定:
黑子:1
白子:2
空白:0
人机对弈时AI用白子,人用黑子。
2.五子棋估值函数主要的棋型:
五连:
五子棋是以谁先把五颗同色棋子连成一线为胜。 我们把五颗子同色棋子连在一起的棋形称为“五连”或‘“连五”。



def winner(chessboard):
    #横方向
    for i in range(15):
        for j in range(0,11):
            if chessboard[i][j]==chessboard[i][j+1]==chessboard[i][j+2]==chessboard[i][j+3]==chessboard[i][j+4]==1:
                return 1
            if chessboard[i][j]==chessboard[i][j+1]==chessboard[i][j+2]==chessboard[i][j+3]==chessboard[i][j+4]==2:
                return 2

    #竖方向
    for j in range(15):
        for i in range(0, 11):
            if chessboard[i][j] ==chessboard[i+1][j]==chessboard[i+2][j]==chessboard[i+3][j]==chessboard[i+4][j] ==1:
                return 1
            if chessboard[i][j] ==chessboard[i+1][j]==chessboard[i+2][j]==chessboard[i+3][j]==chessboard[i+4][j] ==2:
                return 2
    #右斜
    for  i in range(4,15):
        for j in range(11):
            if chessboard[i][j] == chessboard[i -1][j+1] == chessboard[i -2][j+2] == chessboard[i - 3][j+3] == \
                    chessboard[i - 4][j+4] == 1:
                return 1
            if chessboard[i][j] == chessboard[i -1][j+1] == chessboard[i -2][j+2] == chessboard[i - 3][j+3] == \
                    chessboard[i - 4][j+4] == 2:
                return 2

    # 左斜
    for i in range(10,-1,-1):
        for j in range(11):
            if chessboard[i][j] == chessboard[i + 1][j + 1] == chessboard[i + 2][j + 2] == chessboard[i + 3][j + 3] == \
                    chessboard[i + 4][j + 4] == 1:
                return 1
            if chessboard[i][j] == chessboard[i + 1][j + 1] == chessboard[i + 2][j + 2] == chessboard[i + 3][j + 3] == \
                    chessboard[i + 4][j + 4] == 2:
                return 2
    return 0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

issac gym安装与运行 (一)

目录 1.安装 1.1 下载 ​编辑 1.2 安装 .2 初步运行 2.1 demo1 .3 官方demo 3.1 下载及安装 3.2 demo启动 3.3 加载训练好的模型 其他 References: nIsaac-gym(1): 安装及官方demo内容_hongliyu_lvliyu的博客-CSDN博客_isaac安装 NVIDIA Isaac Gym安装…

安卓宿舍管理系统源码

开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclipse),Android Studio 技术说明: springboot mybatis android 代码注释齐全,没有多余代码,适合学习&#xff08…

孤儿进程与终端的关系

孤儿进程与终端的关系 孤儿进程 在本篇文章当中主要给大家介绍一下有关孤儿进程和终端之间的关系。 首先我们的需要知道什么是孤儿进程,简单的来说就是当一个程序还在执行,但是他的父进程已经退出了,这种进程叫做孤儿进程,因为…

C#中Convert与强制转换之间的区别

Reference Source Convert与强转最大的区别是 增加了范围校验,如果不在范围内,直接抛出异常 Convert 类 (System) | Microsoft Learn 小数转化为整数 使用基本数据类型强制转化原理:小数转化为整数,舍弃小数点后的所有数字。 …

HTTP响应是什么?

文章目录HTTP响应1. 响应行2. 响应头3. 空行与响应体4. HTTP响应示例HTTP响应 当客户端发起一个请求后,一般都会得到一个服务器的响应,断网或者服务器宕机的情况下除外。服务器发送给客户端的 HTTP 响应用于向客户端提供其请求的资源,以及客…

开源项目-绩效管理系统

开源项目-绩效管理系统 哈喽,今天给大家带来一个开源系统-绩效管理系统 源码下载​​​​​​​ 系统介绍 本系统为绩效考核系统,系统分为三大模块:考核设置,绩效考核,系统管理。 可满足小企业对员工进行考核。本系…

自定义maven骨架的添加与删除——完整详细介绍

目录一、创建好自己所需的目录结构二、命令配置2.1 配置总览2.2 指令配置说明2.3 指令配置详情三、配置Idea中maven新模板3.1 找到信息文件3.2 创建实例模板四、删除自定义模板4.1 删除本地仓库中的文件4.2 删除archetype-catalog.xml文件中的配置4.3 删除idea中的配置一、创建…

傻白入门芯片设计,指令集架构、微架构、处理器内核(十一)

早期计算机出现时,软件的编写都是直接面向硬件系统的,即使是同一计算机公司的不同计算机产品,它们的软件都是不能通用的,这个时代的软件和硬件紧密的耦合在一起,不可分离。 IBM为了让自己的一系列计算机能使用相同的软件,免去重复…

毕业设计-深度学习机器视觉铝型材表面缺陷识别

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

excel表格怎么换行?单元格内换行的4个方法

今天分享一个excel单元格内换行的小技巧,希望对大家有用。我们在编辑excel文本时经常会遇到这样的情况:将文字内容用一种方式快速从中间插入。比如我们在制作表格时,要将区域内的数据全部合并到一张表格中(即单元格区域&#xff0…

破茧化蝶,从Ring Bus到Mesh网络,CPU片内总线的进化之路

文章目录**为什么需要片内总线?****星型连接****环形总线(Ring Bus)****Mesh网络****结论**转载于:https://zhuanlan.zhihu.com/p/32216294 在大多数普通用户眼里,CPU也许就是一块顶着铁盖子的电路板而已。但是如果我…

【基于Tansformer的融合方法:感知损失:传递-感知损失】

HyperTransformer: A Textural and Spectral Feature Fusion Transformer for Pansharpening (超级Transformer:一种用于全色锐化的纹理和光谱特征融合Transformer) 先看这一篇简单了解Transformer (是一篇高光谱图像融合&#x…

[附源码]计算机毕业设计JAVA疫情背景下叮当买菜管理系统

[附源码]计算机毕业设计JAVA疫情背景下叮当买菜管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: S…

postgresql_internals-14 记录

梳理一下之前理解不太清楚的知识点,重点内容可能会再拆出来单独研究。 原书链接:Index of / 一、 数据组织 1. pg系统库 template0:用于从逻辑备份还原,或创建不同字符集的数据库,不可以修改template1:真…

i.MX 6ULL 驱动开发 二十九:向 Linux 内核中添加自己编写驱动

一、概述 Linux 内核编译流程如下: 1、配置 Linux 内核。 2、编译 Linux 内核。 说明:进入 Linux 内核源码,使用 make help 参看相关配置。 二、make menuconfig 工作原理 1、menuconfig 它本身是一个软件,只提供图形界面配…

Android App 秒开实践方案~

一、背景 启动速度可以说是一个 APP 的门面,对用户体验至关重要。随着业务不断增加,需要初始化的任务也越来越多,如果放任不管,启动时长会逐步增加,为此雪球客户端针对应用启动时长做了大量优化工作。本文从应用启动基…

[读论文] Monocular 3D Object Reconstruction with GAN inversion (ECCV2022)

概述 项目主页:https://www.mmlab-ntu.com/project/meshinversion/ 方法名称:MeshInversion 输入:单目图像 (in the wild,有背景的,没有抠图的) 输出:textured 3D mesh key challen…

【metaRTC学习】metaRTC的demo运行说明(一)

metaRTC的github的地址为:GitHub - metartc/metaRTC: A cross-platform WebRTC SDK 其作者杨高峰的博客为:metaRTC的博客_CSDN博客-metaRTC,解决方案领域博主 其博客对其自己的demo的运行说明不够详细,刚入门的会一脸懵,本文对其…

Netty(二)- NIO三大组件之Buffer

文章目录一、Buffer 基本介绍二、Buffer 类及其子类三、Buffer 的使用四、关于Buffer 的注意事项和细节1. put和get的数据类型应该相同2. 可以将一个普通 Buffer 转成只读 Buffer3. 可以使用MappedByteBuffer让文件直接在内存中修改4. 可以通过 Buffer 数组完成读写操作&#x…

富文本编辑器 ck-editor5 的使用

最近在项目中需要用到富文本编辑器,据说ck-editor5很不错,于是就使用它了,不过在期间也遇到了很多问题,这里记录下。 一、引入ck-editor5 文档地址:Predefined builds - CKEditor 5 Documentation 这里有个坑&#…