1. 程式人生 > 其它 >JAVA資料結構-----使用順序表實現一副撲克牌洗牌發牌功能

JAVA資料結構-----使用順序表實現一副撲克牌洗牌發牌功能

技術標籤:JAVA資料結構java資料結構

實現一副撲克牌的洗牌 + 發牌功能。

(程式碼中詳細註釋!)


//一張撲克牌
/*
體會“抽象”,一張撲克牌上面有哪些資訊?提取核心資訊(抽象)----花色,點數!
 */
public class Card {
    //花色
    public String suit;
    //點數
    public String rank;

    public Card(String suit, String rank) {
        this.suit = suit;
        this.rank = rank;
    }

    //為了方便列印牌的內容,就可以重寫toString方法。
@Override public String toString() { return "(" + this.suit + this.rank + ")"; } }
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class pokerGame {
        //使用陣列把四種花色提前準備好
        public static final String[] suits ={"❤"
,"♦","♣","♠"}; //一副牌中有許多張單牌組成,所以用一個List線性表來“裝載”。 private static List<Card> creatPoker(){ List<Card> poker = new ArrayList<>(); //用這層迴圈處理四種花色。 for (int i=0;i<4;i++){ //這層迴圈處理每種花色的13張牌,J,Q,K,A,大小王單獨處理。
for (int j=2;j<=10;j++){ poker.add(new Card(suits[i],""+j)); //String.valueOf(j)可以用 ""+j 替換。將int型別轉換成字串型別。 } poker.add(new Card(suits[i],"J")); poker.add(new Card(suits[i],"Q")); poker.add(new Card(suits[i],"K")); poker.add(new Card(suits[i],"A")); } poker.add(new Card("","big Joker")); poker.add(new Card("","small Joker")); return poker; } //list自身是可變物件,直接修改poker的內容就會對List本身造成影響,就不需要額外返回list<Card>了。 // 洗牌思路:從後往前遍歷List,取到當前位置元素和前面隨機位置元素進行交換。 private static void shuffle(List<Card> poker) { Random random = new Random(); for (int i = poker.size() - 1; i > 0; i--) { // 產生 [0, i) 的隨機數, 要和哪個位置的元素交換 int pos = random.nextInt(i); swap(poker, i, pos); } } private static void swap(List<Card> poker, int i, int j) { Card tmp = poker.get(i); poker.set(i, poker.get(j)); poker.set(j, tmp); } public static void main(String[] args) { //1.需要先創建出一副牌。 List<Card> poker = creatPoker(); //2.洗牌。 shuffle(poker); //3. 發牌, 假設有三個玩家, 每個玩家, 給發 5 張牌 /* //每個玩家手裡有 5 張牌, 這 5 張牌就使用另外一個 ArrayList 表示. //此時可以把這三個玩家也放到一個 List 中. List<Card> player1 = new ArrayList<>(); List<Card> player2 = new ArrayList<>(); List<Card> player3 = new ArrayList<>(); */ // players 型別仍然是 List, 泛型引數, 是一個 List<Card> , 每個元素就是一個 List<Card> List<List<Card>> players = new ArrayList<>(); // 每次 add 的元素都是一個 ArrayList<Card> 型別 players.add(new ArrayList<>()); players.add(new ArrayList<>()); players.add(new ArrayList<>()); for (int i = 0; i < 5; i++) { for (int j = 0; j < 3; j++) { Card top = poker.remove(0); List<Card> player = players.get(j); player.add(top); } } // 4. 展示手牌 for (int i = 0; i < players.size(); i++) { List<Card> player = players.get(i); System.out.println("玩家" + i + " 的手牌是: " + player); } } }