一.介绍
一副扑克牌去掉大小王还剩52张牌,三个人玩儿,也就是一个人能拿到13张牌,一副新牌是按照顺序进行排列好的,要想玩就必须先洗牌,就是将牌的初始顺序打乱然后每个人一次拿一张牌,直到每人拿到13牌。
这个程序的内容主要运用了ArrayList,如果有哪些ArrarList中的方法不懂,可以查阅相关知识在进行阅读。
在代码前导入包:import java.util.*;
二.定义一张牌
public class Card { public char suit; //花色 public String rank; //面值 public Card(char suit, String rank) { this.suit = suit; //构造方法 this.rank = rank; } @Override public String toString() { //重写打印方法 return "["+suit+":"+rank+"]"; } }
说明:一张牌有花色和面值,花色包括红桃方片那些,所以给的是字符类型,面值包含A,J,Q,K,所以给的字符串类型。
三. 程序主体
说明:我把程序主体全放到CardGame类中
3.1 定义一副新牌
public List<Card> getCards(){ char[] suits = {'♥','♠','♦','♣'}; //花色数组 String[] ranks = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//面值数组 List<Card> cards = new ArrayList<>(52);//定义数组列表来存放每一张牌,并给出数量 for(int i=0;i<4;i++){ for(int j=0;j<13;j++){ cards.add(new Card(suits[i],ranks[j])); //向列表中添加定义好的牌 } } return cards; //返回这幅牌 }
3.2 定义洗牌方法
public void shuffle(List<Card> cards){ Random random = new Random(); //获取随机数种子 for(int i=cards.size()-1;i>0;i--){ int j = random.nextInt(i); swap(cards,i,j); //依次将最后一张牌与随机一张牌交换顺序 } } public void swap(List<Card> cards,int i,int j){ //交换方法swap Card temp = cards.get(i); cards.set(i,cards.get(j)); cards.set(j,temp); }
3.3 定义三个人和抓牌过程
说明:我把这个过程放在主方法中
List<List<Card>> hands = new ArrayList<>(3); //定义三个人 hands.add(new ArrayList<>(13)); hands.add(new ArrayList<>(13)); //每个人都需要揭13张牌 hands.add(new ArrayList<>(13)); // 三个人依次揭牌,每个人揭最上面的牌,揭到后就将它从牌的列表里消除, // 也就是消除最上面的牌一次给每个人 for(int i=0;i<13;i++){ for(int j=0;j<3;j++){ hands.get(j).add(cards.remove(0)); } }
四. 输出每个人抓到的牌
System.out.println("A手中的牌:"); System.out.println(hands.get(0)); System.out.println("B手中的牌"); System.out.println(hands.get(1)); System.out.println("C手中的牌"); System.out.println(hands.get(2));
五.全部代码展示和输出结果展示
代码展示:
public class Card { public char suit; public String rank; public Card(char suit, String rank) { this.suit = suit; this.rank = rank; } @Override public String toString() { return "["+suit+":"+rank+"]"; } }
输出结果: