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

📄 pokerhand.java.bak

📁 一个风靡世界的扑克牌游戏
💻 BAK
字号:
import java.util.Random;
class Card
{
	protected String suit;
	protected int number;
	protected String name;
	public Card()
	{}
	public Card(String suit,int number,String name)
	{
		this.suit = suit;
		this.number = number;
	    this.name = name;
	}
   
    public String toString()
	{
		return name + " of " + suit;
	}

    public String getName()
	{
		return name;
	}

    public String getSuit()
	{
		return suit;
	}

    public int getNumber()
	{
		return number;
	}

}


class Ace extends Card
{
	public Ace(String suit)
	{
		super(suit,14,"Ace");
	}
}

class Two extends Card
{
	public Two(String suit)
	{
		super(suit,2,"Two");
	}
}

class Three extends Card
{
	public Three(String suit)
	{
		super (suit, 3,"Three");
	}
}


class Four extends Card
{
	public Four(String suit)
	{
		super(suit,4,"Four");
	}
}

class Five extends Card
{
	public Five(String suit)
	{
		super(suit,5,"Five");
	}
}

class Six extends Card
{
	public Six(String suit)
	{
		super(suit,6,"Six");
	}
}

class Seven extends Card
{
	public Seven(String suit)
	{
		super(suit,7,"Seven");
	}
}

class Eight extends Card
{
	public Eight(String suit)
	{
		super(suit,8,"Eight");
	}
}

class Nine extends Card
{
	public Nine(String suit)
	{
		super(suit,9,"Nine");
	}
}

class Ten extends Card
{
	public Ten(String suit)
	{
		super(suit,10,"Ten");
	}
}

class Jack extends Card
{
	public Jack(String suit)
	{
		super(suit,11,"Jack");
	}
}

class Queen extends Card
{
	public Queen(String suit)
	{
		super(suit,12,"Queen");
	}
}

class King extends Card
{
	public King(String suit)
	{
		super(suit,13,"King");
	}
}

class DeckOfCards
{
	protected Card[] deck = new Card[52];
	public DeckOfCards()
	{
		String[] suit = {"Hearts","Diamonds","Clubs","Spades"};
		int j = 0;
		for ( int i = 0 ; i<4 ; i++ )
		{
			deck[j++] = new Ace(suit[i]);
			deck[j++] = new Two(suit[i]);
			deck[j++] = new Three(suit[i]);
			deck[j++] = new Four(suit[i]);
	        deck[j++] = new Five(suit[i]);
			deck[j++] = new Six(suit[i]);
			deck[j++] = new Seven(suit[i]);
			deck[j++] = new Eight(suit[i]);
			deck[j++] = new Nine(suit[i]);
			deck[j++] = new Ten(suit[i]);
			deck[j++] = new Jack(suit[i]);
			deck[j++] = new Queen(suit[i]);
			deck[j++] = new King(suit[i]);
		}
	} 

    public PokerHand deal()
	{
		PokerHand deal = new PokerHand(this);
		for (int i = 0 ; i<5 ; i++ )
		{
			deal.CardsOfHand[i] = nextCard();
		}
		return deal;
	}

    public void shuffle()
	{
		Random dice = new Random(System.currentTimeMillis());
		int num1,num2;
		Card temp = new Card();
		for ( int i = 0 ; i<1000 ; i++ )
		{
			num1 = Math.abs(dice.nextInt())%52;
			num2 = Math.abs(dice.nextInt())%52;
		    temp = deck[num1];
		    deck[num1] = deck[num2];
		    deck[num2] = temp;
			
		}
	    	
	    DeckOfCards newDeck = new DeckOfCards();
		int j = 0 ;
		for (int i = 0 ; i<52 ; i++ )
		{
			newDeck.deck[i] = null; 
		}
	    for ( int i = 0 ; i<52 ; i++ )
	    {
			if(deck[i] != null)
			{
				newDeck.deck[j] = deck[i];
				j++;
			}
	    }
	    deck = newDeck.deck;
	}

    public Card nextCard()
	{
        Card copy = new Card(); 
		DeckOfCards newDeck = new DeckOfCards();
		for (int i = 0 ; i<52 ; i++ )
        {
			if (deck[i] != null)
			{
				copy =  deck[i];
				deck[i] = null;
			    
				//to rearrange the sequence of the cards(delete blanks)
				
		        int j = 0 ;
		        for (int k = 0 ; k<52 ; k++ )
		        {
			        newDeck.deck[k] = null; 
		        }
	          
			    for ( int k = 0 ; k<52 ; k++ )
	            {
			        if(deck[k] != null)
			        {
				        newDeck.deck[j] = deck[k];
				        j++;
			        }
	            }
	            deck = newDeck.deck;
			    return copy;
			} 
        }

        return null;
	}

    public String toString()
	{
		String str = "";
		for ( int i = 0 ; i<52 ; i++ )
		{
			if (deck[i] != null)
			{
				str += deck[i].toString()+"\n"; 
			}
		}
	    return str;
	}

}

public class PokerHand
{
	protected Card[] CardsOfHand = new Card[5];
	static DeckOfCards thisDeck ;
	public PokerHand(DeckOfCards deck)
	{
        for (int i = 0 ; i < 5 ; i++ )
        {
			CardsOfHand[i] = deck.nextCard(); 
        }
	    thisDeck = deck;
	}
    public void discard(int num)
	{
		Card badCard = CardsOfHand[num];
		CardsOfHand[num] = thisDeck.nextCard();
		for (int i = 0 ; i<52 ; i++  )
		{
			
			if(thisDeck.deck[i] == null)
			{
				thisDeck.deck[i] = badCard;
				break;
			}
		}
	}

    public void discard(int num1,int num2)
	{
		discard(num1);
		discard(num2);
	}
	
	public void discard(int num1,int num2,int num3)
	{
		discard(num1);
		discard(num2);
		discard(num3);
	}

    public String toString()
	{
		String str = "";
		for ( int i = 0 ; i<5 ; i++ )
		{
            str += "Card " + i + " is : " + CardsOfHand[i].toString() + "\n";
		}
	    return str;
	}

    public void Sort()
	{
        int max = 0;
		int pocision = 0;
		Card temp = new Card();
		for ( int i = 0 ; i < 5 ; i++ )
		{
			for ( int j = i ; j < 5 ; j++)
			{
				if (CardsOfHand[j].getNumber() >= max)
				{
					max = CardsOfHand[j].getNumber();
					pocision = j;
				}
			}
		    
			temp = CardsOfHand[i];
			CardsOfHand[i] = CardsOfHand[pocision];
			CardsOfHand[pocision] = temp;
			max = 0;
		}
	}

//------------------------------------------------------------------------------------------------------------------
//                           methods to decide which kind of hand is
//------------------------------------------------------------------------------------------------------------------


    public boolean isRoyalFlush()
	{
		Sort();
		if ( CardsOfHand[0].getName().equals("Ace") && CardsOfHand[1].getName().equals("King") 
			&& CardsOfHand[3].getName().equals("Queen") &&  CardsOfHand[4].getName().equals("Jack")
			&& CardsOfHand[3].getName().equals("Ten"))
		{
			if ( CardsOfHand[0].getSuit().equals("Spades") && 
				 CardsOfHand[1].getSuit().equals("Spades") &&
				 CardsOfHand[2].getSuit().equals("Spades") && 
				 CardsOfHand[3].getSuit().equals(CardsOfHand[4].getSuit()) )
			{
				System.out.println("Your hand is a RoyalFlush :\n");
				return true;
			}
		}
	
	    return false;
	}
	
    
	public boolean isStraightFlush()
	{
		if (isFlush()&&isStraight())
		{
			System.out.println("Your hand is a StraightFlush :\n");
			return true;
		}
	    return false;
	}
	
	public boolean isFlush()
	{
		Sort();
		if (CardsOfHand[0].getSuit().equals(CardsOfHand[1].getSuit()) && 
		    CardsOfHand[1].getSuit().equals(CardsOfHand[2].getSuit()) &&
		    CardsOfHand[2].getSuit().equals(CardsOfHand[3].getSuit()) && 
			CardsOfHand[3].getSuit().equals(CardsOfHand[4].getSuit()) )
		{
			System.out.println("Your hand is a Flush :\n");
			return true;
		}
	    return false;
	}
	
	public boolean isStraight()
	{
		Sort();
		if ( ( (CardsOfHand[0].getNumber() - CardsOfHand[1].getNumber() == 1) || (CardsOfHand[0].getNumber() == 14) )
			 && (CardsOfHand[1].getNumber() - CardsOfHand[2].getNumber() == 1)
			 && (CardsOfHand[2].getNumber() - CardsOfHand[3].getNumber() == 1)
             && (CardsOfHand[3].getNumber() - CardsOfHand[4].getNumber() == 1) )
			
		{
            System.out.println("Your hand is a Straight :\n");
			return true;
		}
	    return false;
	}

	public boolean isFourOfAKind()
	{
		Sort();
		if( CardsOfHand[0].getNumber() == CardsOfHand[3].getNumber() || CardsOfHand[1].getNumber() == CardsOfHand[4].getNumber())
		{
			System.out.println("Your hand is a Four Of A Kind :\n");
			return true;
		}
	    return false;
	}
	
	public boolean isFullHouse()
	{
		Sort();
		if( (CardsOfHand[0].getNumber() == CardsOfHand[2].getNumber() &&  CardsOfHand[3].getNumber() == CardsOfHand[4].getNumber()) 
			|| (CardsOfHand[2].getNumber() == CardsOfHand[4].getNumber() &&  CardsOfHand[0].getNumber() == CardsOfHand[1].getNumber() ))
		{
			System.out.println("Your hand is a FullHouse :\n");
			return true;
		}
		return false;
	}
	
	public boolean isTwoPairs()
	{
        Sort();
		if ((CardsOfHand[0].getNumber() == CardsOfHand[1].getNumber() &&  CardsOfHand[2].getNumber() == CardsOfHand[3].getNumber()) 
			|| (CardsOfHand[1].getNumber() == CardsOfHand[2].getNumber() &&  CardsOfHand[3].getNumber() == CardsOfHand[4].getNumber()) 
			|| (CardsOfHand[0].getNumber() == CardsOfHand[1].getNumber() &&  CardsOfHand[3].getNumber() == CardsOfHand[4].getNumber()) )
		{
			System.out.println("Your hand is a Two Pairs :\n");
			return true;
		}
	    return false;
	}
	
	public boolean isThreeOfAKind()
	{
		Sort();
		if ( (CardsOfHand[0].getNumber() == CardsOfHand[2].getNumber())
			||(CardsOfHand[1].getNumber() == CardsOfHand[3].getNumber())
			||(CardsOfHand[2].getNumber() == CardsOfHand[4].getNumber()) )
		{
			System.out.println("Your hand is Three Of A Kind\n");
		    return true;
		}
	    return false;
	}
	
	public boolean isAPair()
	{
        Sort();
		if ( CardsOfHand[0].getNumber() == CardsOfHand[1].getNumber() 
			|| CardsOfHand[1].getNumber() == CardsOfHand[2].getNumber() 
			|| CardsOfHand[2].getNumber() == CardsOfHand[3].getNumber() 
			|| CardsOfHand[3].getNumber() == CardsOfHand[4].getNumber()  )
		{
			System.out.println("Your hand is a Pair :\n ");
			return true;
		}
	    return false;
	}
	
	public boolean isCardHigh()
	{
		Sort();
		if (!isRoyalFlush() && !isFlush()  && !isStraightFlush() && !isStraight()
			&& !isFourOfAKind() && !isFullHouse() && !isTwoPairs() && !isThreeOfAKind() && !isAPair())
		{
            System.out.println("Your hand is "+CardsOfHand[0].getName()+"'s high :\n");
		    return true;
		}
	   System.out.println("error");
		return false;
	}
	
	public void categorize()
	{
        if (isRoyalFlush());
        else if (isStraightFlush());
		else if (isStraight());
		else if (isFlush());
		else if (isFourOfAKind());
		else if (isFullHouse());
		else if (isTwoPairs());
		else if (isAPair());
		else if (isCardHigh());
	}
	
	public static void main(String[] args)
	{
		
		DeckOfCards deck = new DeckOfCards();
		deck.shuffle();
		PokerHand testHand = new PokerHand(deck);
		testHand.categorize();
		System.out.println(testHand.toString());
		testHand.discard(4);
        System.out.println(testHand.toString());
	}

}

//------------------------------------------------------------------------------------------------------------------
//                       classes of all kinds of hands
//------------------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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