斗地主的洗牌和发牌
思路:用Collections的shuffle()
方法进行洗牌。用Collections的sort()
方法实现牌的有序展示。用List存牌的id,用map存储id和内容之间的映射。代码如下:
package com.zmysna.test03;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
public class Test04 {
private static HashMap<Integer, String> map = new HashMap<>();
public static void main(String[] args) {
String[] colors = "♥‐♠‐♦‐♣".split("‐");
String[] nums = "2‐A‐K‐Q‐J‐10‐9‐8‐7‐6‐5‐4‐3".split("‐");
int index = 2;
ArrayList<Integer> pokers = new ArrayList<>();
for(int i = 0; i < nums.length; i++){
for (int j = 0; j < colors.length; j++) {
map.put(index++, colors[j] + nums[i]);
}
}
map.put(0, "大王");
map.put(1, "小王");
for(int i = 0; i < 54; i++){
pokers.add(i);
}
//洗牌
Collections.shuffle(pokers);
//发牌
List<Integer> player01 = new ArrayList<>();
List<Integer> player02 = new ArrayList<>();
List<Integer> player03 = new ArrayList<>();
List<Integer> dipai = new ArrayList<>();
for(int i = 0; i < pokers.size(); i++){
if(i >= 51) dipai.add(pokers.get(i));
else if(i % 3 == 0) player01.add(pokers.get(i));
else if(i % 3 == 1) player02.add(pokers.get(i));
else if(i % 3 == 2) player03.add(pokers.get(i));
}
showPokers(player01);
showPokers(player02);
showPokers(player03);
showPokers(dipai);
}
private static void showPokers(List<Integer> list){
//将牌排序
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.print(map.get(list.get(i)));
if(i != list.size() - 1) System.out.print(", ");
}
System.out.println();
}
}