public classDemo02 {
// 模拟斗地主,洗牌、发牌、看牌。牌没有顺序
// 1、创建一个集合,把牌装进去
// 2、洗牌:shuffle
// 3、发牌:三个人+3张底牌
// 4、看牌(打印)
public static void main(String[] args) {
// 一、买了一副牌
List<String>poker = new ArrayList<String>();
// 四种花色
String[]color = { "黑桃", "红桃", "梅花", "方片" };
// 13个数字
String[] num= { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"J", "Q", "K" };
for (String cl : color) {
for (String nu : num) {
poker.add(cl + nu);
}
}
// System.out.println(poker);
poker.add("大王");
poker.add("小王");
// System.out.println(poker);
// 二、洗牌:
Collections.shuffle(poker);
// 三、发牌
List<String>player1 = newArrayList<String>();
List<String>player2 = newArrayList<String>();
List<String>player3 = newArrayList<String>();
List<String>other = newArrayList<String>();
for (int i =0; i < poker.size();i++) {
if (i < 3) {
other.add(poker.get(i));
} else { //i>=3
if (i % 3 == 0) {
player1.add(poker.get(i));
} else if (i %3 == 1) {
player2.add(poker.get(i));
} else {
player3.add(poker.get(i));
}
}
}
// 四、看牌
System.out.println("player1:" + player1);
System.out.println("player2:" + player2);
System.out.println("player3:" + player3);
System.out.println("other:" + other);
}
}
但是这种代码是没有发牌顺序的,可以用Treeset,
保证牌发到三个人手中是已经排好序了的.
public static void main(String[] args) {
// 一、创建牌
Map<Integer,String> poker = newHashMap<Integer, String>();
// 花色
String[]color = { "方片", "梅花", "红桃", "黑桃" };
// 数字
String[] num= { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
"K", "A", "2" };
List<Integer>list = newArrayList<Integer>();
int index = 0; // 索引
// 拼接
for (String n : num) {
for (String c : color) {
list.add(index);// 把0-51添加到list中
poker.put(index,c + n);
index++;
}
}
// 有前面的52张牌
// System.out.println(index);
list.add(index);
poker.put(index,"小王");
index++;
list.add(index);
poker.put(index,"大王");
// System.out.println(list);
// 二、洗牌
Collections.shuffle(list);
// System.out.println(list);
// 三、发牌
Set<Integer>player1 = newTreeSet<Integer>();
Set<Integer>player2 = newTreeSet<Integer>();
Set<Integer>player3 = newTreeSet<Integer>();
Set<Integer>other = newTreeSet<Integer>();
for (int i =0; i < list.size(); i++) {
if (i >= list.size() - 3) {
other.add(list.get(i));
} else {
if (i % 3 == 0) {
player1.add(list.get(i));
} else if (i %3 == 1) {
player2.add(list.get(i));
} else {
player3.add(list.get(i));
}
}
}
// 四、看牌
show(player1, poker, "惠明的牌");
show(player2, poker, "有根的牌");
show(player3, poker, "发生的牌");
show(other, poker, "底牌");
}
public static void show(Set<Integer> set, Map<Integer, String>map,
Stringplayer) {
System.out.println(player + "是:");
StringBuildersb = newStringBuilder();
for (Integer key : set) {
sb.append(map.get(key)+ ",");
}
System.out.println(sb.deleteCharAt(sb.lastIndexOf(",")));
}
}
可以看到用Treeset进行改进的方法已经能够做到发到三人手中的牌是按照一定的顺序的.
它的原理是:除大小王之外的,52张牌,每张牌编上一个特有的序号...排序的时候只要按照编号排序.