五子棋AI对战算法

avatar 2019年6月13日18:22:40 2 294 views

我们小组(6个后端小哥哥,2个前端小姐姐)每两周都有一个两个小时(一般是周五下午3点)的交流分享会,一般都是大家分享最近看到什么有趣的东西,看的,玩的,什么都可以说,就是给大家放松的两个小时。如果大家没什么讲的,小组长也会给大家讲讲算法。上周是分享自己看的书和电影, 快结束的时候,给我们分了两个小组,让我们回去写五子棋对弈的算法或决策。然后下次来,两组AI对弈。

算法应该不复杂,根据自己实战时的想法来编码即可,主要是根据坐标权重选举最优的坐标。

算法总结就是,遍历整个棋牌的坐标(x,y),比如现在该黑棋下了,然后从(0,0)遍历到(18,18),寻找棋盘不为null的坐标,求它(假设当前坐标落黑棋之后)的横方向、竖方向、左斜方向、右斜方向连续的黑棋个数,然后求权重总和,具体权重可以这样算:2个连续的+1分,3个连续的+3分,4个连续的+10分,5个连续的+100分。

除了判断我方棋子的权重,还得以对方(白棋)的立场,判断该坐标对方的权重。所有权重找到最大值,返回(x,y)坐标即可。

然后需要考虑如果某一条线路上有棋子被堵了一边,分数需要减少,具体减多少,需要调。

还有如果我方是三个即将连成一线,对方也是三个即将连成一线,目前该我方下,应该是下在我方的那个点。

目前需要调优的是,如果有两个相同权重的,应该怎么分析更优的点(为长远打算)。

 

 

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  2   博主  0

    • avatar 烽火离别 0

      所以最后去解决了么

      • avatar 新酱 1

        丝毫不会算法的路过……