在哪里嵌套用于操作ArrayLists的方法

时间:2019-10-04 12:51:47

标签: java oop shuffle

我目前正在尝试为涉及扑克牌的游戏建立一个基本的游戏引擎。我正在做一些研究,并且意识到我所采用的方法似乎与其他在线发布的方法有所不同,这些方法涉及操纵卡片组(或任何集合)的方法包含在哪些类中。我正在寻求一些建议,说明为什么一种方法似乎比另一种方法更受欢迎(我的...)。

我当前的设置使用通用的CardList class,其中包含专门设计用于处理纸牌“套牌”的各种方法,尽管它也可以用于玩家的手等。它是一种通用的“堆”的牌,可能会或可能不会被订购,并且每个玩家可能会或可能不会看到。

作为一个例子,假设我想要一种允许我随机播放一副纸牌的方法。我的方法是在CardList class中包括一个公用方法shuffle(),该方法可以对列表中的卡进行洗牌。因此在游戏循环中将其称为deck1.shuffle()

我看到的是其他人在主游戏循环中设置了改组方法,并提供了他们想改组的副牌作为输入。例如,他们可以改用shuffle(deck1)

我目前正在尝试(当然,实际代码更复杂):

public static void main(String[] args) {
    // main game loop goes here
    CardList deck1 = new CardList();
    deck1.shuffle();
    // more code
}

public class CardList {
    // attributes and other methods

    public void shuffle() {
        // shuffle code
    }
}

更常见的方法似乎是:

public static void main(String[] args) {
    // main game loop goes here
    Game game1 = new Game();
    CardList deck1 = new CardList();
    // more code
    game1.shuffle(deck1); // or alternatively, within a method in the Game class
    // more code
}

public class Game {
    public void shuffle(CardList list) {
        // shuffle code
    }
    // attributes and other methods
}

public class CardList {
    // attributes and methods
}

所以问题似乎是,它应该是对象自身类中的固有方法,还是应该将要改组的对象作为输入的外部方法?

我很想听听两种方法的优缺点-我看不出为什么我会比1个人更喜欢2!

1 个答案:

答案 0 :(得分:1)

首先,将suffle方法放在名为Game的类中是不合逻辑的;您不能“随机播放”游戏:)

对我来说,洗牌List的最佳方法是使用本机Collection库:

ArrayList<Card> cardlist = new ArrayList<>();
cardlist.add("card1");
Collections.shuffle(cardlist);

https://www.geeksforgeeks.org/collections-shuffle-java-examples/

对于您的课程CardList,我建议这样做:

public class CardList {
    // attributes and other methods

    ArrayList<Card> cardlist = new ArrayList<>();

    public CardList shuffle() {
        Collections.shuffle(cardlist);

        return this;
    }
}

这样做,您可以使用链方法调用来随机播放并立即返回随机播放的列表:

myCardListObject.shuffle().otherMethod()...