使用LibGDX的数组列表变量

时间:2016-01-05 18:48:08

标签: java arrays libgdx

我正在使用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(){       
    }   
}

简而言之,我需要帮助运行数组列表并将攻击,防御,成本和力量放置到每个阵列位置。任何帮助或建议将不胜感激。

4 个答案:

答案 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.htmlhttps://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);

}