五子棋AI(学习笔记)

181225五子棋

一、需求分析

(一)、基本玩法

1、基本玩法和胜负判断

  • 黑白双方相互下棋,然后谁现将五个棋子连城一条线即可获胜
  • 注意事项,下棋位置不能超过棋盘,判断的时候有四个方向,左右、上下、左上左下、右上右下

2、三种玩法

  • 附带、悔棋、跟换新手

  • 本机对战

  • 人机对战

    • 入门——使用贪心算法,用字典记录数据,进行评分,评分数量比较少
    • 进阶——使用贪心算法,用字典记录数据,进行评分,评分方式比较多。考虑的情况比较多
    • 高手——使用博弈树来进行判分,树的范围涉及三个子树即考虑三成三九个范围
  • 联网

    • 局域网
    • 互联网,多人匹配
    • 游戏大厅

二、知识点

(一)、原理知识

1、博弈树

  • 一般解决博弈类问题的自然想法是将格局组织成一棵树,
  • 树的每一个节点表示一种格局,而父子关系表示由父格局经过一步可以到达子格局。

2、Minimax算法(极小极大值搜索算法)

  • 找出失败的最大可能性中的最小值的算法。
  • 常用于棋类等由两方较量的游戏和程序
  • 基于搜索的博弈算法的基础。该算法是一种零总和算法,即一方要在可选的选项中选择将其优势最大化的选择,而另一方则选择令对手优势最小化的方法。
  • 是悲观算法,即假设对手每一步都会将我方引入从当前看理论上价值最小的格局方向,即对手具有完美决策能力。因此我方的策略应该是选择那些对方所能达到的让我方最差情况中最好的,也就是让对方在完美决策下所对我造成的损失最小。
  • Minimax不找理论最优解,因为理论最优解往往依赖于对手是否足够愚蠢,Minimax中我方完全掌握主动,如果对方每一步决策都是完美的,则我方可以达到预计的最小损失格局,如果对方没有走出完美决策,则我方可能达到比预计的最悲观情况更好的结局。总之我方就是要在最坏情况中选择最好的。
  • 参考链接:https://www.zhihu.com/question/27221568

3、剪枝算法(Alpha-Beta)

  • 为每个节点设立α值和β值,初始α=−∞,β=+∞,表示一个节点的值范围,通过这两个值的传递和更新来完成剪枝。

4、如果获取玩家坐标

  • 这样检测每次鼠标事件的点下,从而将视图坐标转为世界坐标进行处理
  • 使用棋盘的每一个格子对应视图上面的一个单位的虚线。

5、下棋原理和五子连珠原理

  • 通过枚举来变化下棋的角色,每次点击就进行角色身份的变化,每次点击就实例化一个棋子到棋盘上面。
  • 下棋的时候也要判断落棋点是否在棋盘之上,是的话再进行实例化
  • 使用二维数组来记录每次下棋的位置信息,存放到栈当中。方便后面的悔棋操作。
  • 每次都遍历一下下棋点的四个方向又没有连在一起的五个棋子,从而判断是否五子连珠。
  • 当五子连珠之后,胜负的判断也是根据最后落点的角色身份来判别

6、入门级AI相关

  • AI打分表,主要通过字典来进行,给字典两个参数,一个是字符串,表示棋子的情况,一个是int类型的,用来进行评分
  • 往字典里面加入下棋情况和评分,不同的下棋情况对于不同的分值,通过情况的多少控制AI的职能情况。
  • 下棋原理和胜负条件跟玩家一样。

7、开始界面的搭建

  • 主要都是一些UI相关的知识,这里基本都会,不过多描述
  • 要记录的是场景之间的切换都是通过场景事件的发送来完成的,按钮点击,然后发送事件。
  • 模式的选择也一样。

8、局域网下棋

  • 网络部分知识一下再详细总结

(二)、插件知识

1、NetWork Lobby网络游戏大厅插件

  • 简单的使用,官方组件的基础之上添加了改变UI的可视化界面
  • 可以根据自己的需求来改变UI界面

三、遇到问题

1、注意:在写地方的逻辑比较绕,需要看清楚,特别是判断棋盘边界的时候

四、总结

1、基本概况

  • 主要是完成五子棋的制作,主要完成了五子棋基本玩法的实现,和制作了两个基本AI进行下棋,玩法实现主要运用坐标的转换,二维数组存储位置信息,胜负的判断,五子连珠的判断主要是每次都遍历下一下棋点的四个方向上面有没有五个连在一起。
  • 还有就是网络部分的实现,主要有局域网,和互联网部分的实现。

2、最后附上UML图和资源

UML图和资源https://pan.baidu.com/s/1Uqi7XDoYwRq3Z49MA74_Xg

猜你喜欢

转载自blog.csdn.net/Momorey/article/details/85289439