![](https://i-blog.csdnimg.cn/img_convert/f9814d6c817b983fbae02607a59c5034.png)
测试类
package com.itheima.demo4test;
public class Game {
public static void main(String[] args) {
//目标: 开发斗地主游戏
// 1、准备牌,每张牌都是一个对象,所以需创建牌类
// 2、需进入房间,所以需要创建房间类,房间也是对象
Room r = new Room();
r.start();
}
}
牌类
package com.itheima.demo4test;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Card {
private String size;
private String color;
private int num;
@Override
public String toString() {
return size + " " + color;
}
}
房间类 (重点)
package com.itheima.demo4test;
import java.util.*;
// shift+f6:批量重命名
public class Room {
// 1、准备好54张牌,定义一个集合容器,用来存储54张牌
private List<Card> allCards = new ArrayList<>();
// 2、初始化54张牌
{ //实例代码块
// 3、准备点数
String[] sizes = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
// 4、准备花色
String[] colors = {"红心", "方片", "草花", "黑桃"};
// 5、组合点数和花色成为牌对象,添加到集合中
int num = 0;
for (String size : sizes) {
num++;
for (String color : colors) {
//6、创建牌对象,并添加到集合中
allCards.add(new Card(size, color, num));
}
}
// allCards.add(new Card("", "小王"));
// allCards.add(new Card("", "大王"));
Collections.addAll(allCards, new Card("", "小王", ++num), new Card("", "大王", ++num));
System.out.println("新牌是:"+allCards);
}
public void start() {
//8、洗牌,随机打乱集合中元素的顺序
Collections.shuffle(allCards);
System.out.println("洗牌后:"+allCards);
//9、发牌:定义三个玩家,令狐冲=[],令狐白=[],令狐紫=[]
Map<String, List<Card>> players = new HashMap<>();
List<Card> lhc = new ArrayList<>();
List<Card> lhb = new ArrayList<>();
List<Card> lhz = new ArrayList<>();
players.put("令狐冲", lhc);
players.put("令狐白", lhb);
players.put("令狐紫", lhz);
//只发出51张牌,因为最后三张牌是底牌
for (int i = 0; i < allCards.size() - 3; i++) {
//获得当前遍历到的牌
Card card = allCards.get(i);
if (i < 51) {
if (i % 3 == 0) {
//第一个人接牌
lhc.add(card);
} else if (i % 3 == 1) {
//第二个人接牌
lhb.add(card);
}else if(i % 3 == 2){
//第三个人接牌
lhz.add(card);
}
}
}
//10、拿最后三张牌: subList方法,获取集合中指定范围的子集合。包左不包右
List<Card> lastCards = allCards.subList(51, 54);
System.out.println("底牌是:"+lastCards);
//抢地主: 把这个集合直接扔给玩家
lhz.addAll(lastCards);
//11、对牌 排序
sortCards(lhc);
sortCards(lhb);
sortCards(lhz);
//12、看牌,遍历Map集合
for (Map.Entry<String, List<Card>> entry : players.entrySet()) {
// 获取玩家名称,也就是键
String name = entry.getKey();
//获取玩家牌,也就是值
List<Card> cards = entry.getValue();
//遍历玩家牌
System.out.println(name + "的牌是" + cards);
}
}
private void sortCards(List<Card> cards) {
// Collections.sort(cards, new Comparator<Card>() {
// @Override
// public int compare(Card o1, Card o2) {
// return o2.getNum() - o1.getNum();
// }
// });
Collections.sort(cards, ( o1, o2) -> o2.getNum() - o1.getNum());
}
}