package d5;
public class Card {
private final int rank; //牌面值
private final String suit; //花色
public Card(int rank,String suit){
this.rank = rank;
this.suit = suit;
}
// [♥ A]...
@Override
public String toString() {
return String.format("[%s %s]",suit,rankToString(rank));
}
private static String rankToString(int rank) {
switch(rank){
case 1:
return "A";
case 11:
return "J";
case 12:
return "Q";
case 13:
return "K";
default:
return String.valueOf(rank);
}
}
}
package d5;
import java.util.ArrayList;
import java.util.Random;
public class Game {
public static void main(String[] args) {
// 1. 初始化一副扑克牌
ArrayList<Card> cardList = initCardList();
// 2. 洗牌
shuffle(cardList); // 自己实现的洗牌算法
// Collections.shuffle(cardList);// Java自带的洗牌算法
// 3. 准备三名玩家的手牌(存放牌的容器,通过ArrayList<card>来表示)
ArrayList<Card> playerA = new ArrayList<>();
ArrayList<Card> playerB = new ArrayList<>();
ArrayList<Card> playerC = new ArrayList<>();
System.out.println("抓牌前:");
System.out.println("牌堆有"+cardList.size()+"张牌:"+cardList);
// 4. 按照a->b->c->a->b->c...的顺序,轮流抓牌,每人5张
for (int i = 0; i < 5; i++) {
// 抓牌:1. 从牌堆(CardList)中删除一张牌
// 2. 把该牌放入对应玩家的手牌中
// A玩家抓牌
Card card = cardList.remove(0);
playerA.add(card);
// B玩家抓牌
card = cardList.remove(0);
playerB.add(card);
// C玩家抓牌
card = cardList.remove(0);
playerC.add(card);
}
System.out.println("抓牌后:");
System.out.println("牌堆有"+cardList.size()+"张牌:"+cardList);
System.out.println("玩家A: "+playerA);
System.out.println("玩家B: "+playerB);
System.out.println("玩家C: "+playerC);
}
private static void shuffle(ArrayList<Card> cardList) {
Random random = new Random();
for (int i = cardList.size() - 1; i > 0; i--) {
// 下标为[i]是要交换的其中一张牌
Card aCard = cardList.get(i);
// [0,i)位置中,随机生成一个下标
// 下标为[random]是要交换的另一张牌
int randomIdx = random.nextInt(i);
// 交换
Card tmpA = cardList.get(i);
Card tmpB = cardList.get(randomIdx);
cardList.set(i, tmpB);
cardList.set(randomIdx, tmpA);
}
}
private static ArrayList<Card> initCardList() {
ArrayList<Card> cardList = new ArrayList<>();
String[] suits = {"♥", "♠", "♣", "♦"};
for (String suit : suits) {
for (int rank = 1; rank <= 13; rank++) {
Card card = new Card(rank, suit);
cardList.add(card);
}
}
return cardList;
}
}
使用java模拟扑克牌
最新推荐文章于 2023-06-07 16:24:46 发布