假设开发⽃地主纸牌游戏。⼀副牌总共54张,顺序为A、2~10、J~K、⼩王、⼤王;除了⼤⼩王 之外,其它依次为红桃、⿊桃、⽅块和梅花;类Card,它包含数据字段:flush,表示花⾊; number,范围[1, 13](⼤⼩王除外)。花⾊由枚举Flush定义:HEART,0,红桃;SPADE,1,⿊ 桃;DIAMOND,2,⽅块;CLUB,3,梅花;JOKER,4,⼤⼩王(⼤王的number为1,⼩王的 number为0);类Deck,其私有数据字段List cards,包含所有的纸牌;成员⽅法boolean add(Card card)和boolean add(Flush fluash, int number)向其中添加⼀张牌,如果已经有了18张 牌,返回false;否则,返回true;成员⽅法boolean contain(Flush flush, int number)确定是否包含 参数给定的纸牌;成员⽅法bool isFull()确定是否已经包含了18张牌;成员⽅法void reset()执⾏复 位,即清空所有的纸牌;类Poker,私有数据字段:deckA、deckB、deckC,类型为Deck,表示发 给三个玩家的牌,要求能够获取它们;公有成员⽅法void deal()实现为三个玩家随机发牌并确保在 发牌之前,将deckA、deckB、deckC复位;可根据情况添加辅助⽅法;PokerGame,在其⼊⼝点 main()中创建Poker的⼀个实例,调⽤其deal()函数随机发牌,获取三个玩家的牌,并输出到控制台 (终端)窗⼝中。
Java代码实现:import java.util.ArrayList; import java.util.List; public class PokerGame { public static void main(String[] args) { Poker p = new Poker(); p.deal(); } } class Card{ private int number; private Flush flush; public Card(Flush flush,int number) { this.number = number; this.flush = flush; } public Flush getFlush() { return flush; } public void setFlush(Flush flush) { this.flush = flush; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } //重写contains方法中调用的equals方法 @Override public boolean equals(Object obj){ Card c = (Card)obj; return this.getFlush().equals(c.getFlush()) && this.getNumber() == c.getNumber(); } } enum Flush{ HEART("0","红桃"), SPADE("1","黑桃"), DIAMOND("2","方块"), CLUB("3","梅花"), JOKER("4","大小王"); private final String FlushName; private final String FlushDesc; private Flush(String FlushDesc,String FlushName){ this.FlushName = FlushName; this.FlushDesc = FlushDesc; } public String getFlushName() { return FlushName; } public String getFlushDesc() { return FlushDesc; } } class Deck{ private Listcards; public Deck() { this.cards = cards; cards = new ArrayList<>(); reset(); } public List getCards() { return cards; } //成员⽅法boolean add(Card card)和boolean add(Flush fluash, int number)向其中添加⼀张牌,如果已经有了18张 牌,返回false;否则,返回true; public boolean add(Card card){ card = new Card(card.getFlush(),card.getNumber()); if(this.getCards().size() <= 18){ this.getCards().add(card); return true; }else return false; } public boolean add(Flush flush, int number){ if(cards.size() < 18){ cards.add(new Card(flush,number)); return true; }else return false; } //成员⽅法boolean contain(Flush flush, int number)确定是否包含 参数给定的纸牌; public boolean contain(Flush flush, int number){ if(cards.contains(new Card(flush,number))){//需重写contains方法 return true; }else return false; } //成员⽅法bool isFull()确定是否已经包含了18张牌; public boolean isFull(){ if(getCards().size() == 18) return true; else return false; } //成员⽅法void reset()执⾏复 位,即清空所有的纸牌 public void reset(){ getCards().clear(); } } class Poker{ private Deck deckA; private Deck deckB; private Deck deckC; public Deck getDeckA() { return deckA; } public Deck getDeckB() { return deckB; } public Deck getDeckC() { return deckC; } //公有成员⽅法void deal()实现为三个玩家随机发牌并确保在 发牌之前,将deckA、deckB、deckC复位; public void deal(){ Flush[] flush = Flush.values(); deckA = new Deck();//Deck构造器中调用reset()方法实现复位 deckB = new Deck(); deckC = new Deck(); int i = 0; int j = 0; int k = 0; System.out.println("deckA的牌:"); while(!deckA.isFull()){ int n = (int)(Math.random()*(14-1)+1); int f = (int)(Math.random()*(5-0)+0); if(f == 4){ n = (int)(Math.random()*(2-0)+0); } if(!deckA.contain(flush[f],n)){ deckA.add(flush[f],n); System.out.print(deckA.getCards().get(i).getFlush().getFlushName() + deckA.getCards().get(i).getNumber() + " "); i++; } } System.out.println(); System.out.println("deckB的牌:"); while(!deckB.isFull()){ int n = (int)(Math.random()*(14-1)+1); int f = (int)(Math.random()*(5-0)+0); if(f == 4){ n = (int)(Math.random()*(2-0)+0); } if(!deckA.contain(flush[f],n) && !deckB.contain(flush[f],n)){ deckB.add(flush[f],n); System.out.print(deckB.getCards().get(j).getFlush().getFlushName() + deckB.getCards().get(j).getNumber() + " "); j++; } } System.out.println(); System.out.println("deckC的牌:"); while(!deckC.isFull()){ int n = (int)(Math.random()*(14-1)+1); int f = (int)(Math.random()*(5-0)+0); if(f == 4){ n = (int)(Math.random()*(2-0)+0); } if(!deckA.contain(flush[f],n) && !deckB.contain(flush[f],n) && !deckC.contain(flush[f],n)){ deckC.add(flush[f],n); System.out.print(deckC.getCards().get(k).getFlush().getFlushName() + deckC.getCards().get(k).getNumber() + " "); k++; } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)