我们小组(6个后端小哥哥,2个前端小姐姐)每两周都有一个两个小时(一般是周五下午3点)的交流分享会,一般都是大家分享最近看到什么有趣的东西,看的,玩的,什么都可以说,就是给大家放松的两个小时。如果大家没什么讲的,小组长也会给大家讲讲算法。上周是分享自己看的书和电影, 快结束的时候,给我们分了两个小组,让我们回去写五子棋对弈的算法或决策。然后下次来,两组AI对弈。
算法应该不复杂,根据自己实战时的想法来编码即可,主要是根据坐标权重选举最优的坐标。
算法总结就是,遍历整个棋牌的坐标(x,y),比如现在该黑棋下了,然后从(0,0)遍历到(18,18),寻找棋盘不为null的坐标,求它(假设当前坐标落黑棋之后)的横方向、竖方向、左斜方向、右斜方向连续的黑棋个数,然后求权重总和,具体权重可以这样算:2个连续的+1分,3个连续的+3分,4个连续的+10分,5个连续的+100分。
除了判断我方棋子的权重,还得以对方(白棋)的立场,判断该坐标对方的权重。所有权重找到最大值,返回(x,y)坐标即可。
然后需要考虑如果某一条线路上有棋子被堵了一边,分数需要减少,具体减多少,需要调。
还有如果我方是三个即将连成一线,对方也是三个即将连成一线,目前该我方下,应该是下在我方的那个点。
目前需要调优的是,如果有两个相同权重的,应该怎么分析更优的点(为长远打算)。
算法应该不复杂,根据自己实战时的想法来编码即可,主要是根据坐标权重选举最优的坐标。
算法总结就是,遍历整个棋牌的坐标(x,y),比如现在该黑棋下了,然后从(0,0)遍历到(18,18),寻找棋盘不为null的坐标,求它(假设当前坐标落黑棋之后)的横方向、竖方向、左斜方向、右斜方向连续的黑棋个数,然后求权重总和,具体权重可以这样算:2个连续的+1分,3个连续的+3分,4个连续的+10分,5个连续的+100分。
除了判断我方棋子的权重,还得以对方(白棋)的立场,判断该坐标对方的权重。所有权重找到最大值,返回(x,y)坐标即可。
然后需要考虑如果某一条线路上有棋子被堵了一边,分数需要减少,具体减多少,需要调。
还有如果我方是三个即将连成一线,对方也是三个即将连成一线,目前该我方下,应该是下在我方的那个点。
目前需要调优的是,如果有两个相同权重的,应该怎么分析更优的点(为长远打算)。
2019年11月26日 11:27:22
做过类似的,思路类似上述的内容,但是就是运算太慢了(可能也是我不太会优化,后来也没有时间做优化,凑合着下还行)
2019年09月09日 12:40:52
所以最后去解决了么
2019年06月26日 15:43:55
丝毫不会算法的路过……