淘姐妹

淘姐妹

五子棋人机游戏(python+tkinter+os+..)(学习笔记)

电脑 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

五子棋python人机对弈,五子棋人机算法思路,五子棋人机对战视频,五子棋小程序人机
  • 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镭龙。

除了以上几个方面,适合自己的笔记本电脑还要考虑其他因素,比如电脑的尺寸、重量、充电时间、电池寿命、需要的接口类型等。综合考虑这些因素,选择一款更符合需求和预算的笔记本电脑是非常重要的,而了解笔记本电脑的基本配置信息是选购过程中必不可少的一环。

以上是关于了解笔记本电脑配置知识及相关问题的回答。希望关于了解笔记本电脑配置知识的问题【了解笔记本电脑配置知识】对你有用!