gpt4 book ai didi

c# - 纸牌游戏,纸牌建筑

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

我仍在从 Python 背景学习 C# 的来龙去脉。

考虑到这一点,假设我正在制作游戏。为简单起见,让我们以万智牌或任何其他流行的集换式纸牌游戏为基础。在这样的游戏中,可以玩多张牌。这些卡将具有不同的类型和效果。例如,可以有生物牌,也可以有法术牌。

这些类型的卡片具有不同的属性。例如,生物将具有 attack 属性和 health 属性,而法术可能具有 effect 属性。然而,这些不同的类型仍然是卡片,并且有很多共同点,比如 cost 属性。这些不同的卡片可能由 Manager 类管理。此类游戏的基本代码示例可能如下所示:

public class Manager
{
public CreatureCard card1 = new CreatureCard();
public SpellCard card2 = new SpellCard();
}

public class Card
{
public int cost;
}

public class CreatureCard : Card
{
public int attack;
public int health;
}

public class SpellCard : Card
{
public SpellEffect effect;
}

我基本上想做的是创建卡片并将它们存储在管理器类中,而事先不知道它们是咒语还是生物。经理类可能看起来像这样:

public class Manager
{
public Card card1;
public Card card2;
}

卡片将从其他地方分配。

现在,这实际上行不通。例如,将无法访问卡的 health 属性。这是非常合乎逻辑的,因为卡片可能甚至 health 属性。这就是为什么我正在寻找一种确实有效的方法,同时保持结构大致相同。所以会有一个 Card 类,里面有很多东西,以及从它派生的其他类(CreatureCardSpellCard)。

有没有办法让它工作?我来自这里的 Python,所以这种方法在 C# 中实际上可能是完全错误的。如果是这样,请告诉我我可以使用哪种方法来代替我现在尝试开始工作的方法。

最佳答案

您可以通过适本地转换 Card 实例来实现:

public class Manager
{
public Card card1;
public Card card2;
}

...
var manager = new Manager
{
card1 = new CreatureCard();
card2 = new SpellCard();
}
if (manager.card1 is CreatureCard)
{
var health = ((CreatureCard)manager.card1).Health;
Console.WriteLine(health);
}
if (manager.card2 is SpellCard)
{
var effect = ((SpellCard)manager.card2).effect;
Console.WriteLine(effect);
}

或者像这样:

var creatureCard = manager.card1 as CreatureCard;
var spellCard = manager.card2 as SpellCard;
if (creatureCard != null)
{
Console.WriteLine(creatureCard.health);
}
if (spellCard != null)
{
Console.WriteLine(spellCard.effect);
}

对此进行扩展:

  • 要测试卡片是否属于指定类型,请使用 is operator :

    bool isCardType = myCard is CardType;
  • 使用(CardType)cast / convert卡到指定类型:

    CardType specificCardType = (CardType)myCard;
  • 要安全地将卡片转换为特定类型或如果不是该类型则返回 null,请使用 as operator :

    CardType specificCardType = myCard as CardType;
    if (specificCardType != null) {
    ...
    }

关于c# - 纸牌游戏,纸牌建筑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20524837/

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