代码思路要想发牌跟洗牌我们首先需要有扑克牌,每张不同的牌对应不同的花色跟数字,这里就需要我们抽象出一副扑克牌对象,然后进行洗牌,洗牌我们就随机打乱扑克牌的顺序,然后就是发牌,每个人平均分发相同数量的扑克牌。
代码实现我们在这里创建一个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(); }}
洗牌 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++) {//我们默认每次从下标为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怎么实现简易的洗牌和发牌功能的详细内容。