先写一个扑克牌的类
public class Card {
public String color;//颜色
public String Csize;//牌的大小
public Card(String color, String csize) {
this.color = color;
Csize = csize;
}
@Override
public String toString() {
return "(" + color + Csize +")" ;
}
}
由于扑克牌具有四种花色,所以我们创造一个String[]数组
static String[] Color={"♥","♠","♣","♦"};
构建一副扑克牌
private static List BuyPoker(List<Card> list) {
for(int i=0;i<4;i++){
for(int j=2;j<=10;j++){//2~10
Card ca=new Card(Color[i],j+"");
list.add(ca);
}
list.add(new Card(Color[i],"J"));
list.add(new Card(Color[i],"Q"));
list.add(new Card(Color[i],"K"));
list.add(new Card(Color[i],"A"));
}
list.add(new Card("","BigGhost"));
list.add(new Card("","SmallGhost"));
return list;
}
因为我们在Card类中重写了toString方法,所以可以直接打印Card的实例
我们将一副扑克牌放在ArrayList顺序表中;
List<Card> list=new ArrayList<>();
洗牌。这里我们可以直接调用Collections中内置的函数,因为List继承与Collections所以有这样的函数
Collections.shuffle(list);
发牌,这里用到了一个盒子中套盒子的方法,现有一个大顺序表,里面的每一个节点里面存的也是一个顺序表,因为ArrayList是泛型类,所以这样写也是可以的,而且更简洁;
private static void Play(List<Card> list, int n) {
// 发牌, 假设有三个玩家, 每个玩家, 给发 5 张牌
// 每个玩家手里有 5 张牌, 这 5 张牌就使用另外一个 ArrayList 表示.
// List<Card> player1 = new ArrayList<>();
// List<Card> player2 = new ArrayList<>();
// List<Card> player3 = new ArrayList<>();
// players 类型仍然是 List, 泛型参数, 是一个 List<Card> , 每个元素就是一个 List<Card>
List<List<Card>> players = new ArrayList<>();
// 每次 add 的元素都是一个 ArrayList<Card> 类型
players.add(new ArrayList<>());
players.add(new ArrayList<>());
players.add(new ArrayList<>());
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
Card top = list.remove(0);
List<Card> player = players.get(i);
player.add(top);
}
}
// 展示手牌
for (int i = 0; i < players.size(); i++) {
List<Card> player = players.get(i);
System.out.println("玩家" + i + " 的手牌是: " + player);
}
}
测试用例
public static void main(String[] args) {
List<Card> list=new ArrayList<>();
BuyPoker(list);
System.out.println(list);
Collections.shuffle(list);
int n=3;
Play(list,n);
}
运行结果