【定制开发】【M3】基于Python+pygame实现的人机AI对战五子棋游戏(保姆级入门讲解)
一、效果展示
二、功能介绍
五子棋是一种两人对弈的纯策略型棋类游戏。五子棋有两种玩法。玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。玩法二:自己形成五子连线就替换对方任意一枚棋子。被替换的棋子可以和对方交换棋子。最后以先出完所有棋子的一方为胜。本代码实现的是第一种玩法。
三、开发环境搭建
首先安装Python,再安装pip命令,最后安装pygame模块。
目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。
- 从python官网:https://www.python.org/ 下载
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。pip 官网: https://pypi.org/project/pip 注意:Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。
你可以通过以下命令来判断是否已安装:pip --version
3. 安装pygame:pip install pygame
四、关键代码
1. 设置棋盘宽高颜色,棋子尺寸等样式
SIZE = 30 # 棋盘每个点之间的间隔
Line_Points = 19 # 棋盘每行/每列点数
Outer_Width = 20 # 棋盘外宽度
Border_Width = 4 # 边框宽度
Inside_Width = 4 # 边框跟实际的棋盘之间的间隔
Border_Length = SIZE * (Line_Points - 1) + Inside_Width * 2 + Border_Width # 边框线的长度
Start_X = Start_Y = Outer_Width + int(Border_Width / 2) + Inside_Width # 网格线起点(左上角)坐标
SCREEN_HEIGHT = SIZE * (Line_Points - 1) + Outer_Width * 2 + Border_Width + Inside_Width * 2 # 游戏屏幕的高
SCREEN_WIDTH = SCREEN_HEIGHT + 200 # 游戏屏幕的宽Stone_Radius = SIZE // 2 - 3 # 棋子半径
Stone_Radius2 = SIZE // 2 + 3
Checkerboard_Color = (0xE3, 0x92, 0x65) # 棋盘颜色
BLACK_COLOR = (0, 0, 0)
WHITE_COLOR = (255, 255, 255)
RED_COLOR = (200, 30, 30)
BLUE_COLOR = (30, 30, 200)
2. 绘制棋盘
# 画棋盘
def _draw_checkerboard(screen):# 填充棋盘背景色screen.fill(Checkerboard_Color)# 画棋盘网格线外的边框pygame.draw.rect(screen, BLACK_COLOR, (Outer_Width, Outer_Width, Border_Length, Border_Length), Border_Width)# 画网格线for i in range(Line_Points):pygame.draw.line(screen, BLACK_COLOR,(Start_Y, Start_Y + SIZE * i),(Start_Y + SIZE * (Line_Points - 1), Start_Y + SIZE * i),1)for j in range(Line_Points):pygame.draw.line(screen, BLACK_COLOR,(Start_X + SIZE * j, Start_X),(Start_X + SIZE * j, Start_X + SIZE * (Line_Points - 1)),1)
3. 胜负判定
def _get_direction_score(self, point, x_offset, y_offset):count = 0 # 落子处我方连续子数_count = 0 # 落子处对方连续子数space = None # 我方连续子中有无空格_space = None # 对方连续子中有无空格both = 0 # 我方连续子两端有无阻挡_both = 0 # 对方连续子两端有无阻挡# 如果是 1 表示是边上是我方子,2 表示敌方子flag = self._get_stone_color(point, x_offset, y_offset, True)if flag != 0:for step in range(1, 6):x = point.X + step * x_offsety = point.Y + step * y_offsetif 0 <= x < self._line_points and 0 <= y < self._line_points:if flag == 1:if self._checkerboard[y][x] == self._my.Value:count += 1if space is False:space = Trueelif self._checkerboard[y][x] == self._opponent.Value:_both += 1breakelse:if space is None:space = Falseelse:break # 遇到第二个空格退出elif flag == 2:if self._checkerboard[y][x] == self._my.Value:_both += 1breakelif self._checkerboard[y][x] == self._opponent.Value:_count += 1if _space is False:_space = Trueelse:if _space is None:_space = Falseelse:breakelse:# 遇到边也就是阻挡if flag == 1:both += 1elif flag == 2:_both += 1if space is False:space = None
五、启动命令
启动游戏:python aivsman.py
重置游戏: 任一方获胜后,按esc或enter键复原初始状态
六、源码下载
【源码】【G1】基于Python+pygame实现的人机AI对战五子棋游戏.zip-其他文档类资源-CSDN下载
【定制开发】【M3】基于Python+pygame实现的人机AI对战五子棋游戏(保姆级入门讲解)相关推荐
- autocad python二次开发_基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术
AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...
- 学习《Flask Web开发:基于Python的Web应用开发实战》分享
学习<Flask Web开发:基于Python的Web应用开发实战>分享一直在说学习Python,对同事,对朋友,都说我正在学习Python,这无形给自己一定的压力,促使自己要去学习,进步 ...
- 《FlaskWeb开发:基于Python的Web应用开发实战》笔记
开源库的cdn加速 可以在这里直接搜索复制script链接 https://www.bootcdn.cn/ requirements.txt文件的生成与使用 生成requirements文件:$ pi ...
- 《Flask Web开发:基于Python的Web应用开发实战》笔记(原创)
内容提要 在学习"狗书"<Flask Web开发:基于Python的Web应用开发实战>的过程中,一直遇到各种各样的坑.该书的第一部分是"Flask简介&qu ...
- Flask Web开发:基于Python的Web应用开发实战
<Flask Web开发:基于Python的Web应用开发实战> 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 201 ...
- 基于Python pygame简易版斗兽棋小游戏源代码
基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼& ...
- 基于java平台和运用5种设计模式的五子棋游戏
软件设计模式--基于java平台和运用5种设计模式的五子棋游戏 点击链接查看文档代码 二.设计要求 仿照教材上面围棋软件的设计思路,设计一款五子棋,采用至少5种设计模式. 三.引言 五子棋相传起源于四 ...
- python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...
Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium .Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozi ...
- python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解
第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...
- 基于python的abaqus二次开发_基于PYTHON的ABAQUS二次开发实例讲解
第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...
最新文章
- MaxCompute动态更新表中某个(多个)字段的数据
- Maven在Windows上的安装与配置
- go get 命令提示没有权限问题解决
- 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc
- LeetCode 链表的插入排序
- 使用IDEA在引入Schema空间时报错URI is not registered解决方法
- (06)Vivado约束基础
- git获得当前分支url_笔记本拿出来!软件工程师必须要知道的Git命令语句大汇总...
- 团队作业3 需求分析与系统设计
- php 通过 谷歌邮箱发送邮件
- 生活在压力下不得不读的好书---《此生未完成》读后感
- 是香蕉还是芭蕉,芭蕉和香蕉的区别
- 本科阶段学习经验分享(未整理)
- 【PostgreSQL-15的 \watch命令】
- C++ boost库中的sp_counted_base实现解析
- android ca证书的安装,如何在Android上以编程方式安装CA证书,无需用户交互
- 虚拟偶像2022:复制下一个A-SOUL?
- 学人工智能需要什么学历?AI学历要求
- 万魔手游豆 1MORE × omthing AirFree Buds
- 软件测试需要学什么(软件测试人员怎么入行)?
热门文章
- TeeChart Pro Activex 2022.1/32/64/Crack
- Linux系统版本大全
- 【转载】扫描渗透等工具介绍
- 如果可以不上班《不上班的23种活法》免费下载及经典语录
- 计算机课用英语怎么说cute,原来英语可以如此cute
- pinterest类网站差异化发展 时光轴成稀饭网突围利器
- linux脚本对登录密码加密,shell 脚本明文密码加密小工具
- 45分布式电商项目 - SpringDataSolr 入门例子
- 程序员这口饭,职业规划解决方案---程序员职业规划(二)
- puk码怎么查询_手机PUK码怎么查询?使用PUK码解锁手机电话SIM/USIM卡的教程