1、Java:使用多线程,模拟将52张扑克牌随机分发给4个人,每人13张。
2、最后输出每个玩家所得的牌,牌的花色要显示出来,比如:黑桃A、红桃10、梅花J、方块K。(最好是能输出花色的图案,♠️♣️♥️)
3、用最基础的Java语言写,尽量多注释。(我基础较差,比较难看懂)
1、Java:使用多线程,模拟将52张扑克牌随机分发给4个人,每人13张。
2、最后输出每个玩家所得的牌,牌的花色要显示出来,比如:黑桃A、红桃10、梅花J、方块K。(最好是能输出花色的图案,♠️♣️♥️)
3、用最基础的Java语言写,尽量多注释。(我基础较差,比较难看懂)
/**
* @author darkltl
* @className Poke
* @email darkltl@163.com
* @description
* 多线程发扑克牌
*/
@Slf4j
public class Poke {
private static final Stack<String> POKES = new Stack<>();
private static final String[] POKE_ARRAY = {
" ♠A "," ♠2 "," ♠3 "," ♠4 "," ♠5 "," ♠6 "," ♠7 "," ♠8 "," ♠9 "," ♠10 "," ♠J "," ♠Q "," ♠K ",
" ♣A "," ♣2 "," ♣3 "," ♣4 "," ♣5 "," ♣6 "," ♣7 "," ♣8 "," ♣9 "," ♣10 "," ♣J "," ♣Q "," ♣K ",
" ♥A "," ♥2 "," ♥3 "," ♥4 "," ♥5 "," ♥6 "," ♥7 "," ♥8 "," ♥9 "," ♥10 "," ♥J "," ♥Q "," ♥K ",
" ♦A "," ♦2 "," ♦3 "," ♦4 "," ♦5 "," ♦6 "," ♦7 "," ♦8 "," ♦9 "," ♦10 "," ♦J "," ♦Q "," ♦K "
};
static {
POKES.addAll(Arrays.asList(POKE_ARRAY));
}
/**
* 洗牌
*/
private static void shuffle(){
//简单洗牌,利用随机数交换两数位置,表示洗牌
for (int i = 0; i < POKES.size(); i++) {
int index = (int) ((Math.random() * 52));
String currentElement = POKES.get(i);
POKES.set(i,POKES.get(index));
POKES.set(index,currentElement);
}
}
public static void main(String[] args) {
Gamer gamerOne = new Gamer("张三");
Gamer gamerTwo = new Gamer("李四");
Gamer gamerThree = new Gamer("王五");
Gamer gamerFour = new Gamer("趙六");
List<String> gamerOnePokes = gamerOne.getPokes();
List<String> gamerTwoPokes = gamerTwo.getPokes();
List<String> gamerThreePokes = gamerThree.getPokes();
List<String> gamerFourPokes = gamerFour.getPokes();
shuffle();
Thread executor = new Thread(
() -> {
//利用AtomicInteger自增 等同于i++ (只不过是线程安全的)
AtomicInteger index = new AtomicInteger(0);
//循环条件是当扑克总量-4大于等于自增下标时进入循环体(-4代表一轮)
while(POKES.size()-4 >= index.get()){
gamerOnePokes.add(POKES.get(index.getAndIncrement()));
gamerTwoPokes.add(POKES.get(index.getAndIncrement()));
gamerThreePokes.add(POKES.get(index.getAndIncrement()));
gamerFourPokes.add(POKES.get(index.getAndIncrement()));
}
}
);
executor.start();
//等待线程结束
while(executor.isAlive()){
}
gamerFourPokes.forEach(
System.out::print
);
System.out.println();
gamerThreePokes.forEach(
System.out::print
);
System.out.println();
gamerTwoPokes.forEach(
System.out::print
);
System.out.println();
gamerOnePokes.forEach(
System.out::print
);
}
}