import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Playpoker {
//斗地主游戏
//1、使用静态代码块在游戏启动前加载好54张牌
//创建静态的字符串集合,公开化,一个房间只需要一副牌
public static List<Card> allCards = new ArrayList<>();
static {
//存放点数
//个数确定,类型确定,用数组
String[] num = {"3","4","5","6","7","8","9","10","J","Q","k","A","2"};
//存放花色
String[] colors = {"♠","♥","♦","♣"};
//开始生成扑克牌
//记录牌的真实大小
int index = 0;
for (String s : num) {
//每取一组牌index值加一
//[♠3, ♥3, ♦3, ♣3, ♠4, ♥4, ♦4, ♣4,
// 0 0 0 0 1 1 1 1
index++;
for (String color : colors) {
//封装成一个扑克牌对象
Card card = new Card(s,color,index);
allCards.add(card);
}
}
//2、将大小王加进去
//++index 先进行加一操作
Card c1 = new Card("","⛄",++index);
//小王
Card c2 = new Card("","🃏",++index);
//通过工具类一次放入牌堆中
Collections.addAll(allCards,c1,c2);
System.out.println("新牌" + allCards);
}
public static void main(String[] args) {
//3、开始洗牌
Collections.shuffle(allCards);
//4、定义三个玩家,三个玩家手中的牌也是一个集合容器
List<Card> zhangsan = new ArrayList<>();
List<Card> lisi = new ArrayList<>();
List<Card> wangwu = new ArrayList<>();
//5、开始发牌
//allCards=[♠3, ♥3, ♦3, ♣3, ♠4, ♥4, ♦4, ♣4,..
// 0 1 2 0 1 2 0 1 ... %3 使用轮循,对3求余,每一轮发给三个对象
for (int i = 0; i < allCards.size() - 3; i++) {
//先拿当前牌对象
Card c = allCards.get(i);
if (i % 3 == 0){
//张三接牌
zhangsan.add(c);
}else if (i % 3 == 1){
//李四接牌
lisi.add(c);
}else if (i % 3 == 2){
//王五接牌
wangwu.add(c);
}
}
//6、拿到最后三种底牌
//List集合的切片操作 subList(int fromIndex,int toIndex)
//截取集合的后三张牌成一个子集合
List<Card> lastCard = allCards.subList(allCards.size()-3,allCards.size());//包前不包后 51-53
//7、给玩家牌进行排序
sortCard(zhangsan);
sortCard(lisi);
sortCard(wangwu);
//8、输出玩家牌
System.out.println("张三" + zhangsan);
System.out.println("李四" + lisi);
System.out.println("王五" + wangwu);
System.out.println("地主牌" + lastCard);
}
/**
* 对玩家牌进行排序
* @param c
*/
private static void sortCard(List<Card> c) {
Collections.sort(c, new Comparator<Card>() {
@Override
public int compare(Card o1, Card o2) {
return o1.getIndex() - o2.getIndex();
}
});
}
}
public class Card{
//扑克牌类
//牌的点数
private String size;
private String color;
//牌的真正大小
private int index;
public Card() {
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public Card(String size, String color, int index) {
this.size = size;
this.color = color;
this.index = index;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return color + size;
}
}