カードを配ってシャッフルするには、まずトランプが必要です。それぞれの異なるカードは、異なるスートと数字に対応します。ここでは、トランプ オブジェクトのペアを抽象化する必要があります。カードをシャッフルするには、トランプの順番をランダムにシャッフルしてからカードを配り、全員が同じ枚数のトランプを均等に配ります。
ここでポーカー パッケージを作成して、ポーカー関連のクラスをラップします。 Poker パッケージ内に 3 つの Java ファイルを作成します: Poker ファイルはスートやポイントを含むトランプの生成に使用され、Game ファイルはトランプのセットの作成、カードのシャッフルと配付の機能の実装に使用され、Test ファイルは私たちは実験的に使用しています。
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+"}"; } }
スーツの文字列配列を格納するためのメンバー変数を作成します
これらの色は変更できず、現在のクラスでのみ使用できるため、安全性を確保するために
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(); } }
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); }
同様に、テストを行ってみましょう。
シャッフル機能が実装されており、生成されるトランプの順序が毎回異なります。
ここでは、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(Listpoker) { 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 で単純なシャッフルおよび処理関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。