本文笔者将用Java实现简易的扑克牌打乱以及分发,还有展示未被抽走的扑克牌的功能,有兴趣的朋友可以接着往下写有关于扑克牌的玩法
我们先创建一副扑克牌,类中要包含扑克牌花色和点数,他的构造方法和toString方法
class Card {
private int rank;//点数
private String suit;//花色
public Card(int rank, String suit) {
this.rank = rank;
this.suit = suit;
}
@Override
public String toString() {
return "["+this.suit+":"+this.rank+"]";
}
}
给牌创建花色,并给它创建上数字
private static final String[] suits = {"♠","♥","♣","♦"};
public static List<Card> buyCard(){
ArrayList<Card> cards =new ArrayList<>();
for (int i = 0; i < 4; i++) {
for (int j = 1; j <= 13; j++) {
/*String suit = suits[i];
int rank = j;
Card card = new Card(rank,suit);
cards.add(card);*/
cards.add(new Card(j,suits[i]));//这边是阴影部分的简写,不理解的朋友可以看看阴影部分
}
}
return cards;
}
将这副牌随机打乱
private static void swap(List<Card> cards,int i,int j){
Card tmp = cards.get(i);
cards.set(i,cards.get(j));
cards.set(j,tmp);
}
private static void shuffle(List<Card> cards){
int size = cards.size();
for(int i = size-1;i > 0;i--){
Random random = new Random();
int rand = random.nextInt(i);//括号中的i是给它一个打乱的范围,比如这里就是从0~1随机选一个数
swap(cards,i,rand);
}
}
在写一个主函数方便我们判断牌在那个人手中,同时知道牌堆里还有一些什么牌
public static void main(String[] args) {
List<Card> cards = buyCard();
System.out.println("买牌"+cards);
shuffle(cards);
System.out.println("洗牌"+cards);
ArrayList<List<Card>> hand = new ArrayList<>();
List<Card> hand1 = new ArrayList<>();
List<Card> hand2 = new ArrayList<>();
List<Card> hand3 = new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);
//每个人轮流揭牌
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
Card card = cards.remove(0);
hand.get(j).add(card);
}
}
System.out.println("第1个人的牌:"+hand1);
System.out.println("第2个人的牌:"+hand2);
System.out.println("第3个人的牌:"+hand3);
System.out.println("剩下的牌"+cards);
}
}