gpt4 book ai didi

java - 交易卡牌游戏中卡牌效果的基本逻辑/流程

转载 作者:行者123 更新时间:2023-11-30 08:56:46 27 4
gpt4 key购买 nike

之前做过一个简单的纸牌游戏,对程序的整体流程有自己的想法。我最关心的是卡片触发器。

假设我们有一张名为“Guy”的牌,其效果为“每当你打出另一张牌时,获得 2 点生命”。我将如何将其合并到我的代码中?每次我打牌时,我是否必须检查 Guy 是否在场上,如果他在场上是否会运行代码以获得 2 点生命?由于所有潜在的触发器,当我在游戏中获得更多卡片时,这似乎会使我的代码的主要部分非常快。我想找出执行此操作的最佳方法。

最佳答案

在这种情况下避免代码困惑的一个好方法是定义您的游戏中可能会发生哪些类型的“事件”,您的卡片可能需要对其使用react。对于每个这样的事件,在你的卡片的基类中定义一个方法(我假设你知道继承和抽象方法和类;否则,你需要先阅读它),并在每个子类。

public abstract class Card {
protected Player owner; // Assume there's a constructor that sets this
public abstract void anotherCardWasPlayed(Card theOtherCard);
}

public class GuyCard extends Card {
public void anotherCardWasPlayed(Card theOtherCard) {
owner.gainLife(2);
}
}

每当游戏中发生特定事件时,循环遍历所有卡片并调用相应的方法。

如果大多数卡片类不需要为特定事件做任何事情,您可能希望将方法设为非抽象,这样您就不必在对此不感兴趣的卡片类。

以控制事件流的一些额外代码为代价,这将每张卡片的特殊规则的代码保留在该卡片的类中。这种方法本质上是 Observer pattern ,这在 Java 框架中非常普遍。

如果您对相互作用的成对卡片有特殊规则,请查看 Double dispatch模式。

关于java - 交易卡牌游戏中卡牌效果的基本逻辑/流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28467095/

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