我有一个“连接4”游戏的java实现(有可变数量的列和行)。
此实现使用(根据用户的选择)Mini-max的Mini-max算法,具有Alpha-beta修剪,最大搜索深度 maxDepth
我现在的问题是为电路板的状态设计良好的评估功能(这是在maxDepth返回的值)。
值介于 -100(最差选择,它对应于失败情况)和 100(最佳选择,它对应于获胜情况)其中 0 应该是“抽奖”情况。
实际上我已经实现了两个函数(我报告伪代码,因为代码很长)
1)
- >如果表格已满==>画(0)
- >如果表格不满==>不确定的情况(50)
- >如果我赢了:100
- >如果赢了对手:-100
2)
Of me:
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow[1] = maximum number of pieces in a VERTICAL in a row
- InARow[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow[3] = maximum number of pieces in a DIAGONAL (descending) in a row
Of the opponent
- InARow2[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow2[1] = maximum number of pieces in a VERTICAL in a row
- InARow2[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow2[3] = maximum number of pieces in a DIAGONAL (descending) in a row
value = (100* (InARow[0] + InARow[1] + InARow[2] + InARow[3]) )/16 - (100* (InARow2[0] + InARow2[1] + InARow2[2] + InARow2[3]) )/16
我需要设计一个第三个(如果可能的话更好)功能。有什么建议吗?
提前谢谢。
答案 0 :(得分:4)
只计算每个玩家仍然可以制作的4行数,并相互减去。
例如,两位玩家的得分均为7*4 (horizontal) + 4*7 (vertical) + 4*4 (diagonal up) + 4*4 (diagonal down)
。如果红色在左下角放置一个,则黄色会失去1 + 1 + 1 + 0 = 3
的分数。但是如果红色将一个放在中间,则黄色会失去4 + 1 + 1 + 1 = 7
的分数。
当然,如果任何一名玩家获胜,那么无论上述系统如何,其他玩家的得分均为-infinity
。
答案 1 :(得分:3)
你已经解决了基本情况:我的胜利= 100分,我的损失= -100,平局= 0。你可以杀死的“不确定”的情况,它并不反映董事会的“善意”。所以现在你需要填补空白。您要考虑的案例并将值分配给:
答案 2 :(得分:0)
以下是连接4
的两个独立评估函数对于较大的项目,可以手动调整权重或自学。