我已经制作了一个无敌的井字游戏AI,但我想让它变得“更笨”

我使用以下规则制作了一个井字游戏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();

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注