五子棋人机游戏(python+tkinter+os+..)(学习笔记)
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
- AI五子棋所用到的库
- tkinter
- os
- 路径操作
- 进程管理
- 环境参数
- 具体流程
- 建立棋盘
- 初始化棋盘
- 布局棋盘
- 绘制棋盘线条及部分交点
- 绘制棋子
- 下棋
- 下棋子
- 显示下过的棋子
- 判断胜负
- 检测是否连五
- 检测哪方棋子赢
- 定义按钮实现各个功能
- 开始函数(startButton)
- 重置函数(resetButton)
- 悔棋函数(BakcAChess)
- 选择执棋颜色(selectColor)
- 选择下棋方式(selectMathod)
- 棋盘处理
- 生成棋谱
- 保存棋谱
- 打开棋谱
- 电脑落子
- 五子棋的几种基本棋形
- 连五
- 活四
- 眠四
- 活三
- 眠三
- 活二
- 眠二
- **==其余知识点==**
更多的见《Python GUI之tkinter窗口视窗教程(转载篇)》
Tkinter是使用python进行窗口视窗设计的模块。
Tkinter支持16个核心的窗口部件。
- Button 按钮
- Canvas 画布
- 可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件。
- Checkbutton 复选框
- Entry 单行文本框
- Frame 框架
- Label 标签
- 用于显示不可编辑的文本或图标
- LabelFrame 容器控件
- Listbox 列表框
- Menu 菜单
- Menubutton 菜单按钮
- Message 消息框
- 类似于标签,但可以显示对行文本
- OptionMenu 选择菜单
- Panedwindow 窗口布局管理
- Radiobutton 单选框
- Scale 进度条
- 允许通过滑块设置一数字值
- Scrollbar 滚动条
- Spinbox 输入控件
- Text 多行文本框
- Toplevel 顶层
- 【【微信】】 消息框
- 用于显示应用程序的消息框
os库提供通用的基本操作系统交互功能,常用路径操作、进程管理、环境参数等几类。
os.path子库以path为入口,用于操作和处理文件路径。
import os
- os.path.abspath(path)
- 返回path在当前路径中的绝对路径
- os.path.normpath(path)
- 归一化path的表示形式,统一用\分隔路径
- os.path.relpath(path)
- 返回当前程序与文件之间的相对路径
- os.path.dirname(path)
- 返回path中目录名称
- os.path.basename
- 返回path中的最后的文件名称
- *os.path.join(path, paths)
- 组合path和paths,返回一个路径字符串
- os.path.exists(path)
- 判断path对应文件或目录是否存在,返回true或false
- os.path.isfile(path)
- 判断path所对应是否为已存在的文件,返回true或false
- os.path.isdir(path)
- 判断path所对应是否为已存在的目录,返回true或false
- os.path.getatime(path)
- 返回path对应文件或目录上一次的访问时间
- os.path.getmtime(path)
- 返回path对应文件或目录最近一次的修改时间
- os.path.getctime(path)
- 返回path对应文件或目录的创建时间
- os.path.getsize(path)
- 返回path对应文件的大小,以字节为单位
os.system(command)
执行程序或命令command,在window系统中,返回值为cmd的调用返回信息。
-
os.chdir(path)
- 修改当前程序操作的路径
-
os.getcwd()
- 返回程序的当前路径
-
os.getlogin()
- 获得当前系统登录用户名称
-
os.cpu_count()
- 获得当前系统的cpu数量
-
os.urandom(n)
- 获得n个字节长度的随机字符串,通常用于加解密运算
参数说明:
- someoneWin:标识是否有人赢了
- humanChessed:人类玩家是否下了
- IsStart:是否开始游戏了
- player:玩家是哪一方(默认为黑棋)
- playmethod:模式,和robot下棋,还是和ai下棋
- bla_start_pos:黑棋开局时下在正中间的位置
- bla_chessed:保存黑棋已经下过的棋子
- whi_chessed:保存白棋已经下过的棋子
- board:棋盘
- window:窗口
- var:用于标记选择玩家颜色的一个变量
- var1:用于标记选择robot或者ai的一个变量
- can:画布,用于绘出棋盘
- net_board:棋盘的点信息
- robot:机器人
- sgf:处理棋谱
- cnn:cnn神经网络
- 初始化棋盘为15*15
部分代码详解:
-
实例化,建立窗口window
-
给窗口的可视化设置title名字
-
geometry 设定窗口的大小(长*宽)
-
resizable()方法允许/禁止窗口根据用户需要进行更改其大小
- window.resizable(0, 0) 限制窗口更改大小(即设定固定大小的窗口)
- window.resizable(True, True) 允许更改窗口大小
- 在图形界面上创建470*470大小、#EEE8AC颜色的画布并放置各种元素
- SGF文件
- sgf是Smart Game Format的简写,绝大多数棋谱文件都是用sgf格式的文件。主要用于读取棋谱并加载训练模型。
- 主窗口循环显示
get_net_board函数
遍历整个棋盘,调用pos_in_board函数查找棋子在棋盘上的位置,并添加到【【微信】】中,返回整个棋盘信息。
绘制棋盘线条及部分交点
绘制出棋盘的所有线条以及突出某些交点。
棋盘格每个单元格为30*30。
知识点
-
.create_line(起始坐标,终点坐标,width=线宽,fill=颜色)
- 画线
-
.create_arc(起始坐标,终点坐标,width=线宽,fill=颜色)
- 画圆弧
-
.create_rectangle(起始坐标,终点坐标,width=线宽,fill=颜色,outline=边框颜色)
- 画矩形
-
.create_oval(四个坐标,fill=填充颜色,outline=边框的颜色)
- 画椭圆
-
.create_polygon(多个点的坐标,fill=颜色,outline=边框颜色)
- 画多边形
-
.create_text(text=“文字”)
- 显示文字
部分代码详解
- 根据坐标,画出行、列。边界处加粗,因此width=2。
- 根据椭圆的四个方向坐标来绘制部分交点(坐标顺序分别为左、下、右、上)
棋盘图
绘制棋子
-
先调用pos_in_qiju函数获取棋盘中的棋子落脚点
-
再调用pos_to_draw函数设置棋子(椭圆)四个方向的坐标
-
如果player为0,则代表黑棋;player为1,则代表白棋。
-
通过.create_oval()绘制棋子,分别保存在bla_chessed、whi_chessed
- bla_chessed:保存黑棋已经下过的棋子
- whi_chessed:保存白棋已经下过的棋子
-
先调用click_in_board函数判断鼠标点击位置是否在棋盘内,保证下的棋子有效
-
再调用get_nearest_po函数获取到两点距离最近的位置
-
如果该位置没有棋子,则调用draw_a_chess函数,根据玩家是黑/白棋进行落子。
-
根据玩家模式为AI或普通玩法,调用不同的下棋方式进行下棋。
-
AIrobotChess AI机器人下棋
-
-
根据预测函数返回某个点,计算出去全局价值最大的点
-
调用ai_no_in_chessed函数判断AI预测出来的点是否已有棋子,
-
-
robotChess 普通机器人下棋
-
- 如果玩家为黑棋,当电脑执黑棋时,则开局优化,落下棋子;否则计算出价值最大的点,调用pos_in_board函数判断此点再棋盘中的位置,落下棋子。
-
-
最后检查是否有哪方获胜
click_in_board函数
click_in_board函数写好边界判断鼠标是否点击再棋盘内,防止棋子落在外面。
get_nearest_po函数
调用**下面get_distance函数计算出距离。如果计算出的距离比原标签小,则替换,并获取且返回最近的距离位置**。
get_distance函数
根据公式(x1?x2)2+(y1?y2)2\sqrt{(x1-x2)^2+(y1-y2)^2}(x1?x2)2+(y1?y2)2? 计算点距离。
no_in_chessed函数
判断该位置没有棋子。
pos_in_board函数
根据点计算该落点在棋盘中的位置。
只要存放白棋的数组(whi_chessed)不为空,则画出其白棋。
只要存放黑棋的数组(bla_chessed)不为空,则画出其黑棋。
判断五子是否连成一线(4个方向均可)断定输赢.
调用**下面**check_chessed函数,检测此处是否有棋子。
- ha【【微信】】函数分别检测四个方向是否五子连成一条线
- (x,y+n) 向下检测
- (x+n,y) 向右检测
- (x,y-n) 向上检测
- (x-n,y) 向左检测
-
创建flag标签,且初始化为0
-
如果没下过,则下棋,并将flag更新为1
-
如果flag为1,则表示此处已有棋子
调用ha【【微信】】函数判断是哪方棋子先连五,则显示哪方赢。
知识点
- Label(win,text=‘文本显示内容’,background=‘背景颜色’,font=(“字体名”,字体大小))
- 设置显示内容
- 设置此文本内容显示位置
-
tk.Button(win,text=’’,command=功能函数)
- 按钮
-
tk.Radiobutton(win,text=’’,command=功能函数)
- 单选按钮
-
place()方法 place(relx,rely,x,y)
-
- 先设置相对坐标(0,0),再使用(495,400)将坐标作偏移(495,400)
-
点击开始按钮,如果开始状态IsStart为false,则改为true。
-
选择玩家颜色和下棋模式后开始
- 清除黑/白棋数组
- 重新初始化棋盘
- 清空画布
- 重新绘制棋盘
知识点
canvas.【【微信】】(“all”)
- 清空画布
如若删除部分内容,则在创建内容时加入标签tags,删除时将“all”更改为设定的标签即可。
- 悔棋的前提是当前没有任何一方赢得比赛。
- 当黑/白棋数组不为null,则将最后下的棋子出栈,然后获取到此位置,修改棋盘中此位置变为无棋子。
在点击开始前选择玩家执棋颜色。
**注:**已经开始后,再点击执棋颜色按钮无效。
在点击开始前选择下棋方式。
**注:**已经开始后,再选择下棋方式无效。
-
定义存放棋谱的数组 qipu=[]
-
获取该局棋盘总步数totalstep
- 黑/白棋数组中的步数相加
-
获取到棋子在棋盘中的位置并加入到qipu数组中
-
最后返回qipu数组,方便保存棋谱
- 先获取到生成的棋谱数组
- 设置文件名,获取存储数据
- 打开文件,写入数据,保存棋谱
知识点
-
asksa【【微信】】(filetypes=((‘sgf file’, ‘.sgf’),(‘All File’, '.*’)))
- 支持保存的文件类型
-
file.close()
- 关闭文件
-
file.name
- 文件名
-
os.rename(src,dst )
-
重命名文件
- src:要修改的目录名
- dst:修改后的目录名
-
f = 【【淘密令】】name, ‘w’)
-
打开文件,并设置可写
-
f.write()
- 写文件
createdata函数
生成的data数据为:(;time;B[];W[];…😉
例:(;202086135756;B[hh];W[gf];B[ig];W[ij];B[fh];W[ki];B[gi];W[hi];B[
如何选择笔记本电脑配置常识 新手了解笔记本电脑配置基本知识
如何选择笔记本电脑配置常用软件,如何选择笔记本电脑配置常用系统,如何选择笔记本电脑的配置,怎么选择笔记本配置今天给大家分享一个关于了解笔记本电脑配置知识的问题。以下是这个问题的总结。让我们来看看。
?随着科技的不断发展,笔记本电脑越来越成为人们工作和娱乐的必需品。了解笔记本电脑的基本配置信息,对于选择一款适合自己的笔记本电脑非常重要。
作为笔记本电脑的“大脑”,处理器的性能将直接影响电脑的运行速度和反应能力。
常见的处理器品牌有Intel和AMD,其中Intel的i3、i5、i7、i9系列是比较常见的选择。I5处理器性能均衡,适合正常使用;I7处理器性能强劲,适合专业人士,如设计师、工程师等。I9处理器是顶级配置,适合高端游戏或者高强度软件开发等重度应用场景。
内存是笔记本电脑的临时存储,也称为随机存取存储器(RAM)。它存储正在运行的程序和数据,以便CPU可以快速访问它们。
一般来说8GB内存就够了,但是如果使用场景比较复杂或者运行的软件或游戏比较多,16GB以上内存更好。
硬盘是存储笔记本电脑数据的地方,即操作系统、应用程序、文档、图片、音乐、视频等。常见的硬盘类型包括机械硬盘和固态硬盘。
机械硬盘是一种机械设备,用一个旋转的磁盘来存储数据,速度慢但是便宜。固态硬盘没有机械部件,访问速度比机械硬盘快很多,但也更贵。
放弃和得到之间是有取舍的。选购笔记本电脑时,可以选择固态硬盘作为操作系统安装的硬盘,以提高电脑的运行速度,将一些大文件,如视频、音乐文件等存储在机械硬盘上。
图形卡(或显示适配器)是连接处理器和显示器的组件。显卡对于游戏和图形应用程序至关重要,因为它们处理计算机图形并将图形发送到显示器。
一般来说,集成显卡足够一般办公和日常使用,但如果需要处理图形应用场景,就需要购买高端的独立显卡,比如英伟达和AMD镭龙。
除了以上几个方面,适合自己的笔记本电脑还要考虑其他因素,比如电脑的尺寸、重量、充电时间、电池寿命、需要的接口类型等。综合考虑这些因素,选择一款更符合需求和预算的笔记本电脑是非常重要的,而了解笔记本电脑的基本配置信息是选购过程中必不可少的一环。
以上是关于了解笔记本电脑配置知识及相关问题的回答。希望关于了解笔记本电脑配置知识的问题【了解笔记本电脑配置知识】对你有用!