gpt4 book ai didi

c# - 具有复杂板表示的 AI : simulating a single possible move

转载 作者:行者123 更新时间:2023-11-30 18:25:09 25 4
gpt4 key购买 nike

<分区>

我目前正在使用 C# 开发基于回合制的基于网格的策略游戏(类似于魔法门之英雄无敌和奇迹时代)。首先关注战斗部分。
一个格子上有多个单元,轮流进行攻击、射击、施法、移动等。

在 AI 编程上遇到了一些困难。我想要一个可以提前计划的人工智能,所以我认为寻找最佳行动的过程可能是这样的:

  1. 生成可能的 Action 列表
  2. 对于每个可能的移动:
    • 模拟移动
    • 评估状态

然后我在 Minimax 算法中重复这个过程,有点类似于创建国际象棋 AI。

与制作国际象棋 AI 的最大区别在于“棋盘表示”(或状态);这个游戏有很多复杂性,简单地将状态存储为整数数组是不够的。有多个单位,各种领域,储存生命值,攻击类型,他们如何移动和特殊能力等等......。

所以我面临的问题是在“模拟移动”部分。我需要制作一个像 (previous state, move) => state 这样的函数。我通常复制以前的状态并在副本上执行移动。但是我找不到一种有效的方法来复制将执行移动的状态,因为它非常复杂,有很多不同的对象。并且此举不应改变之前的状态。

什么是模拟走法而不让它影响当前棋盘的良好代码结构?

这可能可以通过为每一步都设置一个 Undo() 方法来完成,但是随着逻辑变得复杂,将很难跟踪所有已更改的内容。

我可能正在寻找某种软件设计模式,或者如果有人做过类似的事情,我想知道他们是否遇到过这个问题。

Stack Overflow 上的很多问题都在谈论棋盘游戏 AI,但它似乎总是与具有简单棋盘表示的国际象棋/井字棋有关。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com