人机交互 之 AI 五子棋
1. AI策略逻辑
1.1 实现原理
设计AI时,最重要的就是对整个局势的分析和对下一步的执行方向进行前进,利用都 Analysis()函数假设自己再下一步器,对局势进行分析,然后利用局势进行打分,具体打分规 则下述,然后在从打好分的点上进行选择,取最大的点进行返回执行。如果要进行多层分析,则需要对打分的点进行优化,算出需要进行计算的点,提高效率
1.2 实现流程
- 计算局势计算范围
每当玩家落子后AI需要遍历所有空位为其打分,其实有很多空位是可以直接排除掉 的,每次都要计算一些无用的空位,所以在时间上就造成了浪费。玩过五子棋的人都知道,除第一手棋外,我们的棋子一般下到其他棋子的附近,也就是说那些远离棋子的空 位是不需要考虑的,只有那些在非空位附近的位置才是需要考虑的.利
用 getAllCalcutePoints();
函数进行计算范围确定,返回一个list。
- 对计算范围中的点评估局势
遍历计算范围中的点,假设这个点已经被AI落子,然后从横,纵,正斜,反斜四个方 向进行分析,对所有的四个方向,都有一个局势评估函数,利用函数计算出有多少个己 方棋子落在一切,用count表示,连在一起的这些棋子周围的状况怎么样 leftStatus,rightStatus,leftStatus1,rightStatus1
四个状态表示。
.3. 利用计算出来的局势进行打分
利用打分表,比如成五,活四,死三等等对算出来的状态进行打分,打分函数又分为 两个,分别为AI和玩家打分 AIScoreOfPostions() , playerScoreOfPostions(); ,然 后对不同的情况设置不同的分数,如果想设置AI为攻势,则提高AI的打分表,同理也可以为防守型。
4.算出最高分的点的集合
对最高分点的集合进行分析,拿出最高分点加入集合
5.随机返回 对最高分点集合进行随机返回,保证程序的随机性。 6.多步策略分析 多步策略是在一步的基础上,再分析一步,再次对局势进行评估分析出两步都好的程 序,然后对其打分,取出最高分,再第一步算出maxPoint的集合上往下移分析取出最好 的逻辑,
2. 线下棋盘设计
2.1 实现原理
利用 Java Swing
对棋盘进行自定义,编写一个class GUI
继承Java的JPanel,对其进行方法的 重写,调用一些父类写好的函数,自定义一些函数,实现棋盘,然后利用添加鼠标点击事件对下棋
进行处理,然后repaint(),使得能够进行更新。
2.2 主要函数
1)public void paint(Graphics g1)
重写该方法,绘制棋盘、棋子
2)public void drawBoard(Graphics2D g)
绘制棋盘,设置颜色,画线,画点,
3)public void drawList(Graphics2D g) 绘制棋子
4)自定义一个MyOptionPane显示对局信息
5)落子函数和判断输赢函数
3. 天梯对战
同线下的主要不同为Json和String的格式问题,利用 changeToJson() 转化为网页上的 request