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