91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現簡易的洗牌和發牌功能

發布時間:2023-04-11 15:11:22 來源:億速云 閱讀:118 作者:iii 欄目:開發技術

這篇“Java怎么實現簡易的洗牌和發牌功能”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java怎么實現簡易的洗牌和發牌功能”文章吧。

代碼思路

要想發牌跟洗牌我們首先需要有撲克牌,每張不同的牌對應不同的花色跟數字,這里就需要我們抽象出一副撲克牌對象,然后進行洗牌,洗牌我們就隨機打亂撲克牌的順序,然后就是發牌,每個人平均分發相同數量的撲克牌。

代碼實現

我們在這里創建一個Poker的包用來包裝我們跟撲克牌相關的類。在Poker包中創建三個Java文件:Poker文件用來產生撲克牌,包含花色跟點數;Game文件用來實現創建一套撲克牌、洗牌和發牌的功能;而Test文件則是我們用來測試的。

Poker的Java文件抽象出一張撲克牌

package poker;

public class Poker {

//撲克牌的點數
    private int rank;
//撲克牌的花色
    private String suit;

//創建構造方法
    public Poker(int rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

//以下這些方法我們今天暫時用不上
    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

//重寫toString方法
    @Override
    public String toString() {
        return "{ "+rank+" "+suit+"}";
    }
}

Game的Java文件實現洗牌跟發牌功能

創建存放花色的字符串數組的成員變量

這些花色不能被更改,并且僅在當前類中可以使用,所以我們直接用
private static final修飾保證安全性。

private static final String[] suit = {"?","?","?","?"};

創建一副撲克牌

撲克牌我們用數組來存放

public List<Poker> buyPoker() {
        List<Poker> pokers = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <=13 ; j++) {
                Poker poker = new Poker(j,suit[i]);
                pokers.add(poker);
            }
        }
        return pokers;
    }

用Test來看是否創建成功,我們在寫代碼的時候要養成邊寫邊測試的習慣,這樣能及時發現錯誤。

public class Test {
    public static void main(String[] args) {
        Game game = new Game();
        List<Poker> poker = game.buyPoker();
    }
}

Java怎么實現簡易的洗牌和發牌功能

洗牌

	public void shuffle(List<Poker> poker) {
        for (int i = poker.size()-1; i > 0 ; i--) {
            Random random = new Random();
            int index = random.nextInt(i);
            swap(poker,i,index);
        }
    }
    
//創建私有方法來實現交換
	private void swap(List<Poker> pokers,int i,int j) {
        Poker tmp = pokers.get(i);
        pokers.set(i,pokers.get(j));
        pokers.set(j,tmp);
    }

同樣,我們進行一下測試。

Java怎么實現簡易的洗牌和發牌功能

我們可以看到:我們的洗牌功能已經實現了,每次生成的撲克牌的順序都是不一樣的。

發牌

這里我們創建一個二維數組,分別存放三個玩家所分得的手牌。

public List<List<Poker>> game(List<Poker> pokers) {
        List<List<Poker>> hand = new ArrayList<>();
        List<Poker> hand1 = new ArrayList<>();
        List<Poker> hand2 = new ArrayList<>();
        List<Poker> hand3 = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);

        for (int i = 0; i < 3; i++) {
        //我們這里測試每人分發五張
            for (int j = 0; j < 5; j++) {
//我們默認每次從下標為0的位置分發,并且分發一次就移除這個下表為0的撲克牌,
//移除之后,它后面的數字也會自動補齊到0位置
                Poker tmp = pokers.remove(0);
                hand.get(i).add(tmp);
            }
        }
        return hand;
    }

整體功能實現

Poker.java

public class Poker {
    private int rank;
    private String suit;

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

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

    @Override
    public String toString() {
        return "{ "+rank+" "+suit+"}";
    }
}

Game.java

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class Game {
    private static final String[] suit = {"?","?","?","?"};
    public List<Poker> buyPoker() {
        List<Poker> pokers = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <=13 ; j++) {
                Poker poker = new Poker(j,suit[i]);
                pokers.add(poker);
            }
        }
        return pokers;
    }

    //洗牌
    public void shuffle(List<Poker> poker) {
        for (int i = poker.size()-1; i > 0 ; i--) {
            Random random = new Random();
            int index = random.nextInt(i);
            swap(poker,i,index);
        }
    }

    private void swap(List<Poker> pokers,int i,int j) {
        Poker tmp = pokers.get(i);
        pokers.set(i,pokers.get(j));
        pokers.set(j,tmp);
    }

    public List<List<Poker>> game(List<Poker> pokers) {
        List<List<Poker>> hand = new ArrayList<>();
        List<Poker> hand1 = new ArrayList<>();
        List<Poker> hand2 = new ArrayList<>();
        List<Poker> hand3 = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                Poker tmp = pokers.remove(0);
                hand.get(i).add(tmp);
            }
        }
        return hand;
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Game game = new Game();
        List<Poker> poker = game.buyPoker();
        System.out.println(poker);
        game.shuffle(poker);
        System.out.println(poker);
        List<List<Poker>> hand = game.game(poker);
        for (int i = 0; i < hand.size(); i++) {
            System.out.println("第"+(i+1)+"個人的牌"+hand.get(i));
        }
        System.out.println("剩下的牌");
        System.out.println(poker);
    }
}

Java怎么實現簡易的洗牌和發牌功能

以上就是關于“Java怎么實現簡易的洗牌和發牌功能”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐安县| 拉萨市| 柳江县| 贡山| 巴中市| 张家界市| 井冈山市| 大连市| 贡觉县| 庐江县| 定襄县| 澄江县| 如东县| 普宁市| 江西省| 汕尾市| 磐石市| 清远市| 炉霍县| 咸阳市| 武邑县| 巨鹿县| 阳城县| 大同县| 和静县| 清镇市| 武冈市| 射阳县| 澳门| 偃师市| 华安县| 孝义市| 宜宾市| 浦城县| 汽车| 丹江口市| 冀州市| 安远县| 平顶山市| 昭苏县| 西藏|