我已经制作了一个无敌的井字游戏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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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