-2

我对 Flash 很陌生,但我学得很快。我了解数组等,但我已经向我的孩子们保证我会尝试为他们制作一个 Yu-Gi-Oh 游戏。我知道有一些已经出来了,但我想对原作做一些改动。我无法解决的问题是数组名称。您使用的大多数纸牌游戏有 2 种类型,rank并且suit. 使用 Yu-Gi-Oh,您可以使用大约 10 个,例如nametypeattackdefense

考虑到所有这些,我通过谷歌搜索并找到了两种方法,一个我不知道如何使用的 XML 文件,但最有希望的似乎是制作一个class卡类使用的卡定义只存储卡名。

本质上,卡定义类,比如一张名为龙的卡,持有它的所有值,而卡类持有所有不同的卡名。这样我就可以从卡片类中分配出 6 个卡片名称,并且每张卡片都可以调用卡片 def 中的值。当然,知道该做什么和知道如何编程是两件不同的事情。谁能告诉我一种可行的方法,请记住,我一直在尝试学习 Flash 仅几个星期。

编辑,我不允许在另外 5 小时内回答我自己的问题,所以现在只编辑这个以回复下面的答案。

感谢弗洛兰的回复。我想我可以很容易地计算出比较器。困难的部分是需要保存的所有数据。例如 ["Alexandrite Dragon1", "monster", "light", 4, "dragon", 2000, 100] 是 Alexandrite Dragon 的统计数据。我正在考虑将其作为紫翠玉龙的阵列,并为每张卡片都在卡片 def 类中执行其中 1 个。

在那之后,我想要一个卡片阵列,它可以容纳其中的每一个,这样阵列可能是 [亚历山大变石龙,ganbara 骑士] 等,所以当我发牌时,如果有人从卡片阵列 [0] 中抽出亚历克斯龙,那么我想也许要获得那张卡片,可能会得到卡片 [0] [5] 甚至卡片 [0[5]] 之类的东西。我显然不确定这是否可行,在花了 3 天时间搜索谷歌等之后,我认为问起来可能更容易。

4

1 回答 1

0

您目前正在解决两个问题。

  1. 结构体
  2. 规则

考虑结构和规则可能会分开进行,但由于您必须将规则应用于卡牌,这决定了很多游戏的基本理念,我尝试对其进行压缩。

如前所述,卡片应该包含代表游戏卡片所需的所有数据。这意味着它拥有一个标签,给它一个可以显示的有意义的名称,一些属性,如类型、攻击或防御或更多。

package net.icodeapps.examples {
  public class Card {
    public var label:String,
               type:String,
               attack:int,
               defense:int;
  }
}

这是创建卡片的最基本方法。但是为了与卡片所持有的数据进行交互,您需要某种比较器:哪张卡片更强大。

package net.icodeapps.examples {
  public class CardComparator {
     public function attackCompare(card1:Card, card2:Card):Card {
       if (card1.attack < card2.attack) return -1;
       if (card1.attack > card2.attack) return 1;
       return 0;
     }

     public function defenseCompare(card1:Card, card2:Card):Card {
       if (card1.defense < card2.defense) return -1;
       if (card1.defense > card2.defense) return 1;
       return 0;
     }
  }
}

通过这种方式,您可以确定攻击或防御中更强的卡。如果您需要更复杂的方法来确定值:

package net.icodeapps.examples {
  public class CardComparator {
    public function compare(card1:Card, card2:Card):Card {
      const diff1:int = card1.attack - card2.defense,
            diff2:int = card2.attack - card1.defense;
      if (diff1 < diff2) return -1;
      if (diff1 > diff2) return 1;
      return 0;
    }
  }
}

但是你看,模式是一样的。将状态与“行为”隔离开来(尽管它只是说明的一个小上下文)。如果像类型这样的属性起作用,请增强比较器。如果需要增强类属性,则需要向 Card 类添加方法。

现在,您可以创建卡片并进行比较。接下来是一个集合,它可以是一个数组或向量。但不要使用这些来存储属性。这只会带你进入地狱的厨房。

但我想这是一个首发。

于 2012-12-31T16:01:06.327 回答