import java.util.*;
/*
斗地主
步骤
1、买牌
54张牌,存储到一个集合中
2张:大王,小王
52张:
定义一个数组/集合 存储4种花色
定义一个属猪/集合 存储A-K的13个序号
嵌套遍历两个数组/集合,组装52张牌 例如:♠A
2、洗牌
使用集合工具类Collections的方法
static void shuffle(List<> list)使用指定的随机原对指定列表进行置换
会随机的打乱集合种元素的顺序
3、发牌
要求:1人17张牌,剩余3张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3
定义4个集合,存储3个玩家的牌和底牌
索引%2,有两个值(0,1),0%2 = 0 ,1%2 =1 ,2%2 =0 ,3%2 = 1
索引%3,有两个值(0,1,3),0%3 = 0 ,1%3 =1 ,2%3=2 ,3%3 = 0
索引>=51 改底牌发牌
4、看牌
直接打印集合,遍历存储玩家和底牌的集合
*/
public class Test {
public static void main(String[] args) {
//1、买牌
//定义一个存储54张牌的ArrayLIst集合,泛型使用String
ArrayList poker = new ArrayList<>();
//定义两个数组,一个存储牌的花色,一个存储牌的序号
String[] colors = {"♠", "♥", "♣", "♦"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//先把大王和小王存储到poker中
poker.add("大王");
poker.add("小王");
//通过循环嵌套 ,造牌
for (String number : numbers) {
for (String color : colors) {
poker.add(color + number);
}
}
//2、洗牌
//使用集合中工具类Collections中的方法
Collections.shuffle(poker);
//3、发牌
//定义四个集合 ,存储玩家的牌和底牌
ArrayList player1 = new ArrayList<>();
ArrayList player2 = new ArrayList<>();
ArrayList player3 = new ArrayList<>();
ArrayList dipai = new ArrayList<>();
/*
遍历poker集合,获取每一张牌
使用poker集合的索引给3个玩家轮流发牌
剩余3张留底牌
*/
for (int i = 0; i < poker.size(); i++) {
//获取每一张牌
String p = poker.get(i);
//轮流发牌
if (i >= 51) {
dipai.add(p);
} else if (i % 3 == 0) {//给玩家1发牌
player1.add(p);
} else if (i % 3 == 1) {//给玩家2发牌
player2.add(p);
} else if (i % 3 == 2) {//给玩家3发牌
player3.add(p);
}
}
//4、看牌
System.out.println("沈腾"+player1);
System.out.println("贾玲"+player2);
System.out.println("王宝强"+player3);
System.out.println("底牌为:"+dipai);
/*
沈腾[♣2, ♦2, ♥4, ♥J, ♠2, ♦3, ♠3, 小王, ♠Q, ♦5, ♥9, ♠A, ♥10, 大王, ♣8, ♥3, ♥7]
贾玲[♠K, ♠5, ♣5, ♣10, ♣K, ♣6, ♠4, ♠9, ♠10, ♥A, ♣A, ♠7, ♥6, ♦K, ♦8, ♦9, ♣3]
王宝强[♦10, ♥2, ♦J, ♠6, ♠8, ♣7, ♥8, ♦6, ♣4, ♣Q, ♣9, ♠J, ♣J, ♦4, ♥Q, ♦A, ♥5]
底牌为:[♦7, ♥K, ♦Q]
*/
}
}