package hw_poker;

import java.util.Random;

class Card {
    int Suit;                                   //花色
    char Number;                            //牌面數字 
}
public class Hw_poker {
    static Card[] OneCard = new Card[52];  //儲存每張撲克的花色、數字
    //顯示撲克牌
    static void showCard() {
        int i, j;
        String s = "";     //代表花色

        for (i = 0, j = 0; i < 52; i++, j++) //撲克牌迴圈一遍
        {
            if (j % 13 == 0) {                      //控制每種花色一行
                System.out.print("\n");
            }
            switch (OneCard[i].Suit) {          //枓據花色屬性,顯示花色符號
                case 1:                             //1,代表黑桃
                    s = "黑桃";
                    break;
                case 2:                             //2,代表紅心
                    s = "紅心";
                    break;
                case 3:                              //3,代表方塊
                    s = "方塊";
                    break;
                case 4:                              //4,代表梅花
                    s = "梅花";
                    break;
                default:
                        ;
            }
            System.out.printf("    " + s + OneCard[i].Number);   //輸出顯示
        }
        System.out.print("\n");
    }

    //洗牌
    static void shuffle() {
        int i, j;
        Card tempcard = new Card();         //交換過程中臨時備份用
        Random r = new Random();                //隨機種子
        for (i = 0; i < 52; i++) //換52次牌
        {
            j = r.nextInt(52);                      //隨機取牌
            tempcard = OneCard[j];          //換牌
            OneCard[j] = OneCard[i];
            OneCard[i] = tempcard;
        }
    }

    public static void main(String[] args) {
        initial();       //產生一副新牌
        System.out.printf("一副新牌的初始排列如下:\n");
        showCard();                   //顯示新牌的排列
        shuffle();                      //洗牌
        System.out.print("\n洗牌後的排列如下:\n");
        showCard();                 //顯示洗牌後的排列
    }
    //產生一副新牌
    private static void initial() {
        int i, temp;
        int suit;
        suit = 0;
        for (i = 0; i < 52; i++) //產生52張牌
        {
            if (i % 13 == 0) //每13張牌改變花色
            {
                suit++;                         //改變花色
            }
            Card t = new Card();        //產生撲克牌物件
            t.Suit = suit;                   //儲存花色
            temp = i % 13;              //牌面數字不超過13
            switch (temp) {
                case 0:
                    t.Number = 'A';         //第一個數從0開始,代表 A
                    break;
                case 9:
                    t.Number = '0';         //代表A
                    break;
                case 10:
                    t.Number = 'J';         //代表J
                    break;
                case 11:
                    t.Number = 'Q';         //代表Q
                    break;
                case 12:
                    t.Number = 'K';         //代表K
                    break;
                default:
                    t.Number = (char) (temp + '1');    //其他普通數字,注意加1
            }
            OneCard[i] = t;                     //儲存撲克
        }
    }
}


執行結果:

一副新牌的初始排列如下:

    黑桃A    黑桃2    黑桃3    黑桃4    黑桃5    黑桃6    黑桃7    黑桃8    黑桃9    黑桃0    黑桃J    黑桃Q    黑桃K
    紅心A    紅心2    紅心3    紅心4    紅心5    紅心6    紅心7    紅心8    紅心9    紅心0    紅心J    紅心Q    紅心K
    方塊A    方塊2    方塊3    方塊4    方塊5    方塊6    方塊7    方塊8    方塊9    方塊0    方塊J    方塊Q    方塊K
    梅花A    梅花2    梅花3    梅花4    梅花5    梅花6    梅花7    梅花8    梅花9    梅花0    梅花J    梅花Q    梅花K

洗牌後的排列如下:

    黑桃4    紅心7    紅心0    黑桃5    方塊0    紅心3    黑桃9    方塊9    方塊3    黑桃2    黑桃0    黑桃J    紅心J
    方塊J    紅心6    方塊4    紅心K    黑桃A    梅花7    梅花A    梅花Q    紅心2    梅花K    紅心8    黑桃7    方塊2
    紅心9    黑桃3    梅花4    梅花J    黑桃6    紅心A    梅花5    方塊7    梅花6    梅花8    方塊A    方塊6    紅心Q
    紅心4    黑桃K    黑桃Q    方塊5    紅心5    黑桃8    梅花9    方塊K    方塊8    梅花0    梅花2    方塊Q    梅花3

arrow
arrow
    文章標籤
    Java
    全站熱搜
    創作者介紹
    創作者 mingyilai 的頭像
    mingyilai

    mingyilai的部落格

    mingyilai 發表在 痞客邦 留言(0) 人氣()