1、定义Card类,封装每张牌的信息,属性包含number、color、size(编号,从0开始递增)
toString只展示花色+点数即可
//牌类
public class Card {
private String number; //牌数
private String color; //花色
private int size; //编号
public Card(String number, String color, int size) {
this.number = number;
this.color = color;
this.size = size;
}
public Card() {
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
@Override
public String toString() {
return color + number;
}
}
}
2、定义Room类游戏房间,创建集合作为牌盒,构造中将准备好的54张牌存入牌盒
定义点数数组
定义花色数组
对每张牌编号
循环嵌套遍历点数和花色,过程中封装一张牌对象,并添加到牌盒
按顺序存入小、大王(别忘了加入编号)
打印牌盒查看内容
public class Room {
//一副牌集合
List<Card> cards = new ArrayList<>();
public Room() {
//定义牌的大小与花色
String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
String[] color = {"♠", "♣", "♥", "♦"};
//构建一副牌
int size = 0;
for (String s : number) {
for (String c : color) {
Card card = new Card(s, c, ++size);
cards.add(card);
}
}
cards.add(new Card("大王", "", ++size));
cards.add(new Card("小王", "", ++size));
System.out.println("新牌:"+cards);
}
//开始游戏方法
public void start() {
//洗牌
Collections.shuffle(cards);
System.out.println("洗牌后:"+cards);
//三个玩家对象
ArrayList<Card> play1 = new ArrayList<>();
ArrayList<Card> play2 = new ArrayList<>();
ArrayList<Card> play3 = new ArrayList<>();
//为三个玩家发牌并保留底牌
for (int i = 0; i < cards.size()-3; i++) {
if (i%3==0){
play1.add(cards.get(i));
}else if (i%3==1){
play2.add(cards.get(i));
}else {
play3.add(cards.get(i));
}
}
//手牌排序
cardSort(play1);
cardSort(play2);
cardSort(play3);
//查看三位玩家手牌和底牌
System.out.println("玩家1:"+play1);
System.out.println("玩家2:"+play2);
System.out.println("玩家3:"+play3);
List<Card> dipai = this.cards.subList(this.cards.size() - 3, this.cards.size());
System.out.println("底牌:"+dipai);
//假设玩家三叫到了地主 将底牌加入玩家三的手牌中并重新排序
play3.addAll(dipai);
cardSort(play3);
System.out.println("玩家3:"+play3);
}
//手牌排序规则
private void cardSort(ArrayList<Card> plays) {
plays.sort((o1, o2) -> o1.getSize() - o2.getSize());
}
3、定义测试类
创建游戏房间,查看牌盒内容
调用start开始游戏的方法,start方法中实现
打乱集合完成洗牌
定义三个玩家(集合)
轮询完成发牌功能,留出三张底牌(后面截取出底牌集合)
调用sortCards方法整牌(根据编号size升序)
看牌(打印三个集合)
截取出底牌集合,将底牌给到地主(地主我们决定,加入到手牌最后即可)
查看底牌和地主的牌
public class Test {
public static void main(String[] args) {
Room room = new Room();
room.start();
}
}