斗地主案例
1、分析:
(1)制牌:扑克牌有54张,四个花色,大王、小王,其中数字牌每种花色13张
(2)洗牌:shuffle(List<?> list)
(3)发牌:一个地主,两个农民,三张底牌
2、问题:
(1)发牌之后牌是乱的,需要排序,但是字符串目前为止无法排序
(2)希望相同的数字牌在一起
(3)排序要按照斗地主规则规定的牌面大小顺序排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class Demo10_LandLordsFinalVersion {
public static void main(String[] args) {
//制牌
//准备花色
String[] colors = {"红桃", "黑桃", "梅花", "方片"};
//准备数字
String[] nums = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//准备牌表
HashMap<Integer, String> table = new HashMap<>();
//准备牌组
ArrayList<Integer> pokers = new ArrayList<>();
//准备牌面编号
int index = 1;
for (String nu : nums) {
for (String co : colors) {
table.put(index, co + nu);
pokers.add(index);
index++;
}
}
//准备大小王
table.put(index, "小王");
pokers.add(index);
index++;
table.put(index, "大王");
pokers.add(index);
//洗牌
Collections.shuffle(pokers);
//发牌
ArrayList<Integer> basic = new ArrayList<>();
for (int i = 0; i < 3; i++) {
basic.add(pokers.remove(0));
}
ArrayList<Integer> landlord = new ArrayList<>();
ArrayList<Integer>farmer1 = new ArrayList<>();
ArrayList<Integer> farmer2= new ArrayList<>();
while(true) {
if(pokers.isEmpty()) {
break;
}
if(!pokers.isEmpty()) {
landlord.add(pokers.remove(0));
}
if(!pokers.isEmpty()) {
farmer1.add(pokers.remove(0));
}
if(!pokers.isEmpty()) {
farmer2.add(pokers.remove(0));
}
}
//给玩家的牌组排序
Collections.sort(basic);
Collections.sort(landlord );
Collections.sort(farmer1 );
Collections.sort(farmer2 );
System.out.println(getPokerFace(basic, table));
System.out.println(getPokerFace(landlord , table));
System.out.println(getPokerFace(farmer1 , table));
System.out.println(getPokerFace(farmer2 , table));
}
public static String getPokerFace(ArrayList<Integer> list, HashMap<Integer,String> map) {
StringBuilder sb = new StringBuilder("[");
for (Integer key : list) {
sb.append(map.get(key)).append(", ");
}
String str = sb.toString();
String result = str.substring(0, str.length() - 2) + "]";
return result;
}
}