gpt4 book ai didi

c# - 为拼字游戏的游戏实现设计灵活且可扩展的奖励系统

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:26 25 4
gpt4 key购买 nike

假设我正在实现我自己的拼字游戏版本。我目前有一个包含大量 SquaresBoard 类。 Square 又由 IBonusPiece 组成。奖励实现实际上是拼字游戏的常见奖励,但我可能会尝试添加一些新的和扭曲的奖励来为游戏增添趣味——这里的灵 active 是最重要的!

alt text

经过一段时间的思考,我得出的结论是,要让 IBonus 实现正常工作,他们需要知道整个 Board 及其当前位置(在Board,所以它知道它在哪里,它可以检查与奖金在同一个方格中的棋子)。这让我印象深刻,因为它基本上需要了解大量信息。

所以,我天真的实现是将 Board 作为参数传递给 IBonus.calculate() 方法,IBonus.calculate(Board board, Point position ),即。

此外,它似乎创建了一个循环引用。还是我错了? alt text

我不是特别喜欢这种方法,所以我正在寻找其他可能的方法。我知道我可以让 calculate 接受一个接口(interface)而不是一个具体的类,即 calculate(IBoard board) 但我认为这并不比第一种情况好.

我担心过于专注于我当前的实现,以至于无法想到至少适合这个问题的完全不同的设计以及解决方案。也许我可以重新设计整个游戏并将奖金放在其他地方,以便于计算?也许我太专注于让他们进入 Board?我当然希望有其他方法可以解决这个问题!

谢谢

最佳答案

我假设 Board 具有游戏的可见状态,并且会有其他对象,例如 Rack(每个玩家一个)和 DrawPile。

“如果单词包含真实(非空白)Z,则双倍得分”- 需要您输入单词或棋盘和单词的位置。

“如果单词在棋盘上最长,则加倍得分”需要整个棋盘。

“如果单词的第一个字母与从 DrawPile 中随机选择的字母相匹配,则获得双倍分数”当然需要 DrawPile。

所以对我来说,这仅取决于您实现的规则。我愿意将 Board 传递给 IBonus score() 实现。

编辑 - 更多想法。

所以一 block 棋盘有 17x17 个正方形,或其他任何东西。我会为棋盘的每个方 block 分配一个 IBonus 实现(会有一个名为 PlainEmptySquare 的惰性实现。)您只需要实例化 IBonus 的每个实现一次——它可以被多次引用。我可能会走低调的道路,明确地实例化每一个,传递所需的参数。如果一种类型需要 Board,则将其传入。如果另一种类型需要 DrawPile,则将其传入。在您的实现中,您可能会有 12 行丑陋代码。/耸肩

关于c# - 为拼字游戏的游戏实现设计灵活且可扩展的奖励系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019234/

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