【问题标题】:How to code simple AI for a windows phone board game?如何为 Windows Phone 棋盘游戏编写简单的 AI?
【发布时间】:2012-02-22 02:55:11
【问题描述】:

类似这样的:

我不知道如何为此编写代码,因为我只编写了非游戏应用程序。例如,在玩家下手后,您如何确定最佳着法?我不需要完美的动作,只要有足够的挑战性。

我不知道我是否必须扫描所有可能的动作等等。在如图所示的游戏中,可能的动作数量非常有限,对吧?所以我可以把它们都计算出来。但我不确定哪一个会更好,等等。

【问题讨论】:

    标签: c# .net windows-phone-7 artificial-intelligence


    【解决方案1】:

    在像井字游戏这样的小型简单游戏中,您可以构建一棵树,其中:

    • 每个节点都是一个棋盘位置
    • 每个叶子节点都是一个已完成的游戏,+1 表示 X 胜,-1 表示 O 胜,0 表示平局
    • 每个子节点都是从其父节点合法移动的结果

    然后 X 正在寻找将最大化最小结果的移动,知道 O 将搜索(在他随后的回合)将最小化最大结果的移动,知道 X 将搜索(在他随后的轮到那个) 的举动将...

    这是极小极大算法。

    在井字游戏中,树只能达到 9 层深度,如果您想要更流畅,可以利用一些棋盘对称性并保持计算和数据结构的可管理性。

    请注意,对于更复杂的游戏,这将因某种原因而失败(国际象棋是确定性的,但太大而无法以这种方式处理;西洋双陆棋需要概率技术等),但许多方法都是这个主题的变体。

    【讨论】:

    • +1。查看en.wikipedia.org/wiki/Alpha-beta_search 了解更多信息。 @Joan Venge,请注意,在简单的游戏中,让电脑玩家获胜很容易,但要让电脑玩家以惊人的方式输掉比赛则更加困难和有趣,因此玩家确实有战斗的机会。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多