Java 上机作业 1.8 Poker 实现随机发牌和洗牌

Java 上机作业 1.8 Poker 实现随机发牌和洗牌,第1张

Java 上机作业 1.8 Poker 实现随机发牌和洗牌 题目要求:

假设开发⽃地主纸牌游戏。⼀副牌总共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 List cards;
	
	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++;
				}
			}
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5481400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存