**
Java之使用集合来实现一个简单的斗地主的洗牌和发牌功能:
**
难点:对洗牌后的顺序实现一个自动重排,这里我们可以使用索引,利用HashMap集合的键值对思想,将每张扑克牌的牌面值与其索引进行对应,然后我们可以通过操作索引实现对扑克牌的洗牌和发牌,最后再获取对应索引值的牌面值即可:
package puker_game;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class 斗地主的制牌洗牌和发牌的进阶 {
public static void main(String[] args) {
// 准备牌表,牌表用于对应制作好的牌面跟索引的值,即54张扑克牌,每张对应一个索引
HashMap<Integer, String> table = new HashMap<>();
// 准备牌组,用于存放制作好的扑克牌
ArrayList<Integer> paizu = new ArrayList<>();
// 制作花色
String[] color = { "♠", "♥", "♦", "♣" };
// 制作数字
String[] num = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
// 制作牌面,将牌面添加进牌表中,形成对应关系,给定初始索引,外层循环数字内存循环花色,可实现最后的齐牌功能
int index = 0;
for (String nu : num) {
for (String co : color) {
String face = nu + co;
// 将制作好的牌面放入牌表中
table.put(index, face);
// 将制作好的牌面同时放入扑克牌牌组中
paizu.add(index);
index++;
}
}
// 将大小王添加进牌表
table.put(index, "小王");
paizu.add(index);
index++;
table.put(index, "大王");
paizu.add(index);
// 洗牌
Collections.shuffle(paizu);
// 准备底牌
ArrayList<Integer> dipai = new ArrayList<>();
for (int i = 0; i < 3; i++) {
dipai.add(paizu.remove(0));
}
// 准备玩家
ArrayList<Integer> zhangsan = new ArrayList<>();
ArrayList<Integer> lisi = new ArrayList<>();
ArrayList<Integer> wangwu = new ArrayList<>();
// 给玩家发牌
while (true) {
if (!(paizu.isEmpty())) {
zhangsan.add(paizu.remove(0));
}
if (!(paizu.isEmpty())) {
lisi.add(paizu.remove(0));
}
if (!(paizu.isEmpty())) {
wangwu.add(paizu.remove(0));
} else {
break;
}
}
// 发牌后排序
Collections.sort(dipai);
Collections.sort(zhangsan);
Collections.sort(lisi);
Collections.sort(wangwu);
// System.out.println(zhangsan);
// 看牌
System.out.println("底牌:" + query(table, dipai));
System.out.println("张三:" + query(table, zhangsan));
System.out.println("李四:" + query(table, lisi));
System.out.println("王五:" + query(table, wangwu));
}
private static String query(HashMap<Integer, String> table, ArrayList<Integer> wanjia) {
StringBuilder sb = new StringBuilder("[");
for (Integer index : wanjia) {
String face = table.get(index);
sb.append(face).append(",");
}
return sb.replace(sb.length() - 1, sb.length(), "]").toString();
}
}