我使用以下规则制作了一个井字游戏AI:(https://en.wikipedia.org/wiki/Tic-tac-toe)
赢:如果玩家有两子连成一线,他们可以放第三子以获得三子连线。
阻挡:如果对手有两子连成一线,玩家必须自己放第三子以阻挡对手。
分叉:创造一个玩家有两个赢的威胁的机会(两条未被阻挡的两子线)。阻挡对手的分叉:
选项1:玩家应该创造两子连线,迫使对手防守,只要这不会导致对手创造分叉。例如,如果“X”占据一个角,“O”占据中心,“X”也占据对角,那么“O”必须避免占据角以赢得游戏。(在这种情况下占据角会为“X”创造分叉机会,从而赢得游戏。)
选项2:如果存在对手可以分叉的配置,玩家应该阻挡那个分叉。
中心:玩家标记中心。(如果是游戏的第一步,在角落下棋会给“O”更多犯错的机会,因此可能是更好的选择;然而,对于完美玩家来说,这没有区别。)
对角:如果对手在角落,玩家下在对角。
空角:玩家在角落方格下棋。
空边:玩家在任意四个边的中间方格下棋。
所以现在,我想实现某种系统,以动态改变其难度。
回答:
你可以根据难度应用上述规则的子集,例如:
简单 – 阻挡,空角,空边,赢
中等 – 阻挡,中心,空角,空边,赢
困难 – 阻挡,中心,空角,空边,对角,赢
疯狂 – 阻挡,分叉,中心,空角,空边,对角,赢
这并不难实现,只需添加一个与难度单选按钮绑定的类型枚举,在开始时停用。然后在每次检查时检查难度:
If(some stuff && difficulty.In("HARD", "INSANE")) OppositeCorner();