ホームページ > Java > &#&チュートリアル > Java で単純なシャッフルおよび処理関数を実装する方法

Java で単純なシャッフルおよび処理関数を実装する方法

WBOY
リリース: 2023-05-10 20:22:04
転載
1104 人が閲覧しました

コードのアイデア

カードを配ってシャッフルするには、まずトランプが必要です。それぞれの異なるカードは、異なるスートと数字に対応します。ここでは、トランプ オブジェクトのペアを抽象化する必要があります。カードをシャッフルするには、トランプの順番をランダムにシャッフルしてからカードを配り、全員が同じ枚数のトランプを均等に配ります。

コード実装

ここでポーカー パッケージを作成して、ポーカー関連のクラスをラップします。 Poker パッケージ内に 3 つの Java ファイルを作成します: Poker ファイルはスートやポイントを含むトランプの生成に使用され、Game ファイルはトランプのセットの作成、カードのシャッフルと配付の機能の実装に使用され、Test ファイルは私たちは実験的に使用しています。

ポーカーの 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+"}";
    }
}
ログイン後にコピー

ゲームの Java ファイルはカードをシャッフルし配る機能を実装します

スーツの文字列配列を格納するためのメンバー変数を作成します

これらの色は変更できず、現在のクラスでのみ使用できるため、安全性を確保するために
private static 最終変更を直接使用します。

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 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 で単純なシャッフルおよび処理関数を実装する方法

シャッフル機能が実装されており、生成されるトランプの順序が毎回異なります。

Dealing

ここでは、3 人のプレイヤーによって分けられた手札を格納する 2 次元配列を作成します。

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) {
        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 pokers,int i,int j) {
        Poker tmp = pokers.get(i);
        pokers.set(i,pokers.get(j));
        pokers.set(j,tmp);
    }

    public List> game(List pokers) {
        List> hand = new ArrayList<>();
        List hand1 = new ArrayList<>();
        List hand2 = new ArrayList<>();
        List 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 で単純なシャッフルおよび処理関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート