1. 程式人生 > >利用java集合框架實現撲克牌比大小遊戲

利用java集合框架實現撲克牌比大小遊戲

程式實現前提:
1.瞭解java集合框架
2.Collections工具類
3.Comparable,Comparator介面

遊戲要求:
遊戲有兩個玩家,分別會得到兩張紙牌,然後進行比較大小,拿到紙牌最大者獲勝,比較規則:比較數字(2,3,4,5,6,7,8,9,10,J,Q,K,A)按這個順序,越往後越大,數字一樣則比較花色(黑桃,紅桃,梅花,方塊),越往後越大。

程式碼分析:
首先需要有Player類,Card類,裡面封裝了玩家和紙牌的屬性和方法,然後還需要GameBegin類開始遊戲,這個類需要實現以下功能,建立一副撲克牌,洗牌,建立人物,發牌,比較大小,有幾個要點需要注意:

1.先後順序很重要,先建立撲克牌後建立人物,發牌

2.建立人物時注意初始化List,以防空指標異常

3.發牌:List.get(index),所以只需要產生隨機數即可實現發牌這個效果

4.比較大小需要重新Compara方法

實現效果圖:
這裡寫圖片描述

實現程式碼:

/**
 * 牌類
 */
public class Card {
    public String number;
    public String color;

    public Card(String color,String number) {
        super();
        this.number = number;
        this
.color = color; } public String getNumber() { return number; } public String getColor() { return color; } }
/**
 * 玩家類
 */
public class Player {
    public String name;
    public List<Card> list=new ArrayList<Card>();

    public Player(String name) {
        this
.name = name; } }
/**
 * 比較規則類
 */
public class Compara implements Comparator<Card>{

    @Override
    public int compare(Card arg0, Card arg1) {
        String color="黑桃  紅桃 梅花 方塊";
        String numbers="2 3 4 5 6 7 8 9 10 J Q K A";

        int result=numbers.indexOf(arg0.number)-numbers.indexOf(arg1.number);

        if(result<0){
            return -1;
        }else if(result>0){
            return 1;
        }else {
            int result2=color.indexOf(arg0.color)-color.indexOf(arg0.color);
            if(result2>0){
                return 1;
            }else if(result<0){
                return -1;
            }else{
                return 0;
            }
        } 
    }
}
public class GameBegin {

    private static Scanner console=new Scanner(System.in);
    private Random random=new Random();
    private List<Card> cardsList=new ArrayList<Card>();
    private static Player playA;
    private static Player playB;

    public static void main(String[] args) {
        GameBegin gb=new GameBegin();
        gb.createCardsList();

        System.out.println("\n****************GAME IS ON******************");

        System.out.println("hello,player A ,please input you name:");
        String nameA=console.next();
        playA=gb.getPlayer(nameA);

        System.out.println("\nhello,player B ,please input you name:");
        String nameB=console.next();
        playB=gb.getPlayer(nameB);

        gb.lastTEST();
    }


    /**
     * 建立撲克牌
     */
    public List<Card> createCardsList(){
        String[] color={"黑桃","紅桃","梅花","方塊"};
        String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        for(String temp:color){
            for(int i=0;i<numbers.length;i++){
                Card card=new Card(temp,numbers[i]);
                cardsList.add(card);
            }
        }
        mixCardsList();
        return cardsList;
    }


    /**
     * 洗牌
     */
    private void mixCardsList(){
         Collections.shuffle(cardsList);
    }

    /**
     * 建立玩家
     */
    public Player getPlayer(String name){
        Player play=new Player(name);
        for(int i=0;i<2;i++){
            play.list.add(cardsList.get(getRandomNumber()));
        }
        outputPlayerCards(play);
        return play;
    }

    /**
     * 發牌-產生隨機數
     */
    private int getRandomNumber(){
        int k;
        k=random.nextInt(51);
        return k;
    }

    /**
     * 顯示玩家拿到的牌
     */
    private void outputPlayerCards(Player play){
        System.out.print("Player you got:");
        for(Card c:play.list){
            System.out.print(c.getColor()+" "+c.getNumber()+"   ");
        }
        Collections.sort(play.list,new Compara());
        System.out.println("  the biger card is :"+play.list.get(1).color+" "+play.list.get(1).number);
    }



    /**
     * 得到兩個玩家中較大的牌,分出勝負
     */
    public void lastTEST(){
        List<Card> lastCards=new ArrayList<Card>();
        lastCards.add(playA.list.get(1));
        lastCards.add(playB.list.get(1));
        Collections.sort(lastCards,new Compara());
        System.out.println("the biger card is: "+lastCards.get(1).color+lastCards.get(1).number);

        if(lastCards.get(1).color.equals(playA.list.get(1).color)){
            System.out.println("\n"+playA.name+" is win!");
        }else{
            System.out.println("\n"+playB.name+" is win!");
        }
    }
}