我对flash很新,但我学得很快。我了解阵列等但是我已经答应我的孩子们会尝试为他们制作一个游戏王游戏。我知道有一些已经出来但我想对原版进行一些修改。我无法解决的问题是数组名称。您使用的大多数纸牌游戏有两种类型,rank
和suit
。使用Yu-Gi-Oh,您可以使用大约10个,例如name
,type
,attack
,defense
等。
考虑到所有这些,我搜索了谷歌并找到了两种方法来做到这一点,一个XML文件,我不知道如何使用,但最有希望的似乎是制作卡片定义{{1}已经存储了卡名的卡类使用了它。
本质上,卡片def类用于说一张名为dragon的卡片,其中包含所有值,而卡片类则包含所有不同的卡片名称。通过这种方式,我可以从卡类中说出6张卡片名称,并且每张卡片都可以从该卡片中调用该值。当然知道该做什么以及知道如何编程是两件事。任何人都可以告诉我一个方法可以工作,请记住我一直试图学习闪光只有几个星期。
编辑,我不允许再过5小时回答我自己的问题所以现在只需编辑这个问题以回复下面的答案。
感谢Floran的回复。我想我可以很容易地计算出比较器。困难的部分是需要保留的所有数据。作为一个例子[" Alexandrite Dragon1"," monster"," light",4," dragon",2000,100]是统计数据亚历山大的龙。我正在考虑将其作为亚历山大龙的数组,并为每张卡片中的其中一个进行卡片def类。
之后我会想要一个卡片阵列,它可以容纳这些阵列,以便阵列可能是[alexandrite dragon,ganbara knight]等所以当我发牌时如果有人从卡阵列中抽出了alex龙[0]那么我想也许可以获得卡片[k]可能会得到它甚至卡[0 [5]]。我显然不确定这是否可行,并在花了3天搜索谷歌等我认为它可能更容易问。
答案 0 :(得分:0)
目前你正在处理两个问题。
关于结构和规则的思考可以单独进行,但由于你必须对卡片应用规则,这决定了很多游戏的基本思想,我试着稍微压缩它。
如前所述,卡片应该是代表游戏卡所需的所有数据。这意味着它拥有一个标签,可以显示一个有意义的名称,一些属性,如类型,攻击或防御等。
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类添加方法。
现在,您可以创建卡片并进行比较。接下来的事情是一个集合,可以是一个数组或矢量。但是不要使用它们来存储属性。这只会带你进入地狱的厨房。
但我想这是首发。