⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dealer.java

📁 24点扑克牌游戏~为了运行这个程序
💻 JAVA
字号:
import java.util.*;

	//BLACKJACK become WIN or PUSH if dealer has bj
	class Status
	{
		private final String name;
		//Ordinal of next suit to be created
		private static int nextOrdinal = 0;
		
		//Assign an ordinal to this Status
		private final int ordinal = nextOrdinal++;
		
		private Status(String name)
		{
			this.name = name;
		}
		public String toString()
		{
			return name;
		}
		public int compareTo(Object o)
		{
			return ordinal - ((Status)o).ordinal;
		}
		//黑杰克:起手牌为A+(10 或 J 或 Q 或 K)
		static final Status BLACKJACK = new Status(Cfg.isChina?"黑杰克":"blackjack");
		//赢 		
		static final Status WIN = new Status(Cfg.isChina?"赢":"win");
		//输  
		static final Status LOSE = new Status(Cfg.isChina?"输":"lose");
		//推:筹码退回,不收取任何费用		
		static final Status PUSH = new Status(Cfg.isChina?"平手":"push");		
	}
//玩者
class Dealer
{
	Dealer(int numDecks,int cutCardPosition)	
	{
		this.numDecks =numDecks;
		this.cutCardPosition = cutCardPosition;
		dealer = null;
	}
	//加入玩家(可以是PlayerHand玩家牌手或SimulatedPlayerHand电脑仿真的玩家牌手)
	void assignPlayerHand(BlackJackHand hand)
	{
		players.addElement(hand);
	}
	//设置庄家(只能是StandardDealerHand庄家牌手)
	void setDealerHand(BlackJackHand hand)
	{
		dealer = hand;
	}
	//重新来一幅已洗好的牌
	void newShoe()
	{
		
		theDeck.burnIt();//仍掉此幅牌的所有牌
		theDeck.addDeck(numDecks);//加一幅新牌
		theDeck.shuffle();//洗牌
	}
	//发牌
	void deal()
	{
		
		setMoney(getMoney()-getBet());		setTotal(getBet());
		isDouble = false;
		
		if (theDeck.remainingCards() <= cutCardPosition )
			newShoe();

		boolean somebodyPlaying = false;
		
		// 把所有玩家手里的牌扔掉
		for(Enumeration e = players.elements();e.hasMoreElements();)
		{
			BlackJackHand currentPlayer = (BlackJackHand)e.nextElement();
			currentPlayer.reset();
		}

		dealer.reset(); //把庄家手里的牌扔掉

		
		//给每个玩家和庄家发两张牌
		for(int i=0; i<2; i++)
		{
			for(Enumeration e = players.elements(); e.hasMoreElements();)
			{
				BlackJackHand currentPlayer = (BlackJackHand) e.nextElement();
				dealCard(currentPlayer);
			}
			dealCard(dealer);
		}

/*
		if(dealer.isBlackJack() )
		{
		}
		else
		{

			//处理每个玩家牌手的走法
			for(Enumeration e = players.elements();e.hasMoreElements();)
			{
				BlackJackHand currentPlayer = (BlackJackHand) e.nextElement();
				
				somebodyPlaying  = processTurn(currentPlayer) || somebodyPlaying;
			}

			if(somebodyPlaying)
				processTurn(dealer);
		}
*/	
	}	

	//处理走法,如果牌手的走法超过21分,返回为假,否则返回为真
	boolean processTurn(BlackJackHand hand)
	{
		boolean doneturn = false;
		boolean retval = true;

		TurnResult turn;

		while(!doneturn)
		{
			turn = hand.takeTurn();
		
			//如果牌手的走法是要牌的话,那么发一张牌给要牌手,等待下一步走法	
			if(turn == TurnResult.HIT)	
			{				
				dealCard(hand);
				continue;
			}
		
			//如果牌手是爆牌的话,结束走法处理,返回FALSE
			if(turn == TurnResult.BUST)
			{	
				//allow fall through
				retval = false;
				doneturn = true;
				continue;
			}
			
			//如果牌手走发是停牌的话,结束本次走法处理,并返回真
			if(turn == TurnResult.STAND)
			{		
				doneturn = true;
				continue;
			}
			//如果牌手走法是加倍的话,发一张牌给牌手,结束本次走法处理,
			//如果发牌后最高总分大于21,返回假
			if(turn == TurnResult.DOUBLE_DOWN)
			{		
		
				dealCard(hand);
				// did we bust
				retval = hand.highCount() <= 21 ;
				doneturn = true;
				continue;
			}
			//如果牌手走法是分牌的话,抛出没实现异常,等待下一步走法
			if(turn == TurnResult.SPLIT)
			{			
				//throw "Not implemented";
				continue;
			}

			//throw "Illegal result of move";
		}
		return retval;
	}

	//如果,还需要继续走返回真
	 boolean handleTurn(BlackJackHand hand)
	{
		
		TurnResult turn;

		
			turn = hand.takeTurn();
		
			//如果牌手的走法是要牌的话,那么发一张牌给要牌手,等待下一步走法	
			if(turn == TurnResult.HIT)	
			{				
				dealCard(hand);
				
				if(hand.highCount() <= 21)
				{
					return true;
				}
				else
				{
					return false;
				}					
					
			}
		
			//如果牌手是爆牌的话,结束走法处理,返回FALSE
			if(turn == TurnResult.BUST)
			{	
				return false;
			}
			
			//如果牌手走发是停牌的话,结束本次走法处理,并返回真
			if(turn == TurnResult.STAND)
			{		
				return false;
			}
			//如果牌手走法是加倍的话,发一张牌给牌手,结束本次走法处理,
			//如果发牌后最高总分大于21,返回假
			if(turn == TurnResult.DOUBLE_DOWN)
			{		
		
				dealCard(hand);
				money = money-bet;
				bet = bet*2;
				total = total *2;

				isDouble = true;
				return false;
			}
			if(turn == TurnResult.INSURANCE)
			{
				hand.offerInsurance();
				money = money+bet/2;
				bet = bet/2;
				return true;
			}
			//如果牌手走法是分牌的话,抛出没实现异常,等待下一步走法
			if(turn == TurnResult.SPLIT)
			{			
				//throw "Not implemented";
				//isContinue.ok=true;
				return true;
			}

			//throw "Illegal result of move";
			return true;
	}

	// 得到某玩家手中牌的状态(判断此局牌,结局状态)
	Status getPlayerStatus(final BlackJackHand hand)
	{
		
		int pCount = hand.highCount();
		int dCount = dealer.highCount();
		
		
		//玩家是黑杰克
		if( hand.isBlackJack() )
		{
			//玩家上了保险,结局是玩家赢
			if( hand.tookInsurance() )
				return  Status.WIN;
			
			//玩家没上保险
			
				//庄家也是黑杰克,结局是推
				if ( dealer.isBlackJack() )
					return Status.PUSH;
			
				//庄家不是黑杰克,结局是玩家黑杰克
				return Status.BLACKJACK;
		}

		//玩家不是黑杰克

			//玩家爆牌,结局是玩家输
			if( pCount > 21)	
				return Status.LOSE;

			//玩家没有爆牌

				//庄家爆牌,结局是玩家赢
				if( dCount > 21 )
					return Status.WIN;
			
				//庄家没有爆牌
			
					//玩家总分大于庄家,结局是玩家赢
					if( pCount > dCount)
						return Status.WIN;
			
					// 玩家总分等于庄家,结局是推
					if ( pCount == dCount  ) 
						return Status.PUSH;
					
					//玩家总数小于庄家分数,结局是玩家输
					return Status.LOSE;
	}
	

	//给某玩家发一张牌
	private boolean dealCard(BlackJackHand  hand)
	{
		Card card = theDeck.getCard();

		if(card!=null)
			hand.addCard(card);
	
		return card!=null;
	}
	public String toString()
	{
		String s;
		
		s = "numDecks="+numDecks + " ; cutCardPosition="+ cutCardPosition +"\n";
		s += "Deck-> " +theDeck+"\n";
		s += "dealer-> " + dealer+"\n";
		s += "players ->  nums:"+players.size();

		for(int i=0; i<players.size(); i++)
			s+="\n\t" + (BlackJackHand)players.elementAt(i);
		return s;
	}
	Vector getPlayers()
	{
		return players;
	}
	
	//表明此幅牌有几套牌(1套52张)
	private  int numDecks =1;

	//表示剩下的牌小于等于几张后开始重新洗牌(确省每玩一局都开始洗牌)
	private   int cutCardPosition=52; 


	//一幅牌
	private Deck theDeck = new Deck();
	
	//玩家牌手的集合,包括真实玩家PlayerHand和电脑仿真的玩家SimulatedPlayerHand
	private Vector players = new Vector();

	//庄家:玩家的对手
	private BlackJackHand dealer; 

	int getBet()
	{
		return bet;
	}
	void setBet(int b)
	{
		bet = b;
	}
	int getMoney()
	{
		return money;
	}
	void setMoney(int m)
	{
		money = m;
	}
	int getTotal()
	{
		return total;
	}
	void setTotal(int t)
	{
		total =t ;
	}
	
	private int bet =10;	private int money =200;	private int total=0;
	boolean isDouble = false;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -