我正在使用LibGDX中的一个游戏而且我坚持使用数组列表。我的计划是拥有一张20张牌。数组列表中的每个位置都有自己的卡,其中包含统计信息的值。
以下是我的卡片类:
public class Card {
private String name;
private int force;
private int attack;
private int defense;
private int cost;
public Card(String name, int force, int attack, int defense, int cost){
this.name = name;
this.attack = attack;
this.cost = cost;
this.defense = defense;
this.force = force;
}
public int force (){
return this.force;
}
public int attack (){
return this.attack;
}
public int defense (){
return this.defense;
}
public int cost (){
return this.cost;
}
public String name(){
return this.name;
}
}
这是我的套牌类,我需要帮助处理实现卡片值的代码。
public class Deck {
private Array<Card> cards;
private String name;
private int force;
private int attack;
private int defense;
private int cost;
public Deck(){
cards.size = 20;
}
public void createDeck(){
}
public void shuffle(){
}
public void draw(){
}
public void add(){
}
}
简而言之,我需要帮助运行数组列表并将攻击,防御,成本和力量放置到每个阵列位置。任何帮助或建议将不胜感激。
答案 0 :(得分:0)
您是否尝试过像这样制作一个String数组
int ammountOfMethods = 7; //Arbitrary number, but whatever you'd need
String[] stringArray = new String[ammountOfMethods];
stringArray[0] = "force";
//Etc...
答案 1 :(得分:0)
如果您可以使用Java 8,我建议使用流API。 例如,
public void createDeck(Array<Card> cards, String name){
this.cards = cards;
this.name = name;
this.force = cards.stream()//a stream is a functional, glorified forEach with a nice API
.mapToInt(Card::force) //changes the stream into ints (the card's force value)
.sum(); //gets the total.
. . .
}
有关详细信息,请参阅https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html和https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html。
如果您需要其他指导,请发表评论并进行阐述。
答案 2 :(得分:0)
为什么牌组具有与牌相同的统计值(名称,力量,攻击,防御,成本)?因为牌组似乎只能拿牌,然后每张牌都有自己的统计数据,每张牌的统计数据会有所不同。
关于创建卡片并给出初始值,不知何故,您必须指定每张卡片的统计数据。您可以对这些值进行硬编码,或者如果您希望每次播放时卡的统计信息不同,您可以使用随机数生成来选择具有指定范围的值。然后,您需要从这些值中实例化(创建)卡片并将它们添加到您的卡片组中。
createDeck()方法是你想要创建卡片组,创建卡片以及它们到你的套牌的地方。
这是一个硬编码卡“骑士”,“巨魔”和“向导”的统计值并将它们添加到卡组中的示例:
public void createDeck(){
cards = new Array<Card>(Card.class);
cards.add(new Card("Knight", 50, 25, 35, 200));
cards.add(new Card("Troll", 25, 27, 29, 350));
cards.add(new Card("Wizard", 78, 96, 60, 500));
...
}
这样做20次,它将用20张独特的牌填满你的牌组。
答案 3 :(得分:0)
您无法像这样初始化Array
的大小:
public Deck(){
cards.size = 20;
}
Array
是一个接口,因此您需要一个ArrayList
的实例。 ArrayList
是动态数组对象,因此您无需提供数组的大小。
您只需要add
数组的元素。
或者你可以使用原始数组,但是你应该小心,因为这种类型的数组不能动态地改变它的大小。
第一个选项可以是这样的:
private Array<Card> cards;
...
public void createDeck(){
cards = new ArrayList<Card>();
cards.add(new Card("Name1", 1, 2, 3, 4));
cards.add(new Card("Name2", 5, 6, 7, 8));
cards.add(new Card("Name3", 9, 10, 11, 12));
}
原始数组的第二个选项:
private Card cards[];
...
public void createDeck(){
cards = new Card[20];
cards[0] = new Card("Name1", 1, 2, 3, 4);
cards[1] = new Card("Name2", 5, 6, 7, 8);
...
cards[19] = new Card("Name20", 50, 60, 70, 80);
}