/*成龙,甄子丹,李连杰三个人打斗地主,三人约定,洗牌后,随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主,并收取最后三张。
要求:请用程序实现这一过程,最后打印地主名,以及三个人的牌(要求排序);
思路:
1.定义一个Map集合存储一副扑克牌;List存储编号;
2.洗牌;
3.随机抽取一个索引(该值必须在倒数三张之前),用于表示"明牌",在发牌
时谁抓到这一张便作为"地主";
4.依次给三个人(成龙,甄子丹,李连杰)发牌,并监督谁作为地主;地主自
动收取最后三张。
5.打印地主名;
6.最后以排序后的方式打印每个人手里的牌;*/
public class doudizhu {
public static void main(String[] args) {
// 1.定义一个Map集合存储一副扑克牌;List存储编号;
HashMap<Integer,String> pkmap= new HashMap<Integer, String>();
ArrayList<Integer> pknum=new ArrayList<Integer>();
//2.造扑克
zpk(pkmap,pknum);
//3.洗牌
Collections.shuffle(pknum);
//4.发牌
fp(pkmap,pknum);
}
private static void zpk(HashMap<Integer,String> pkmap, ArrayList<Integer> pknum) {
ArrayList<String> num=new ArrayList<String>();
ArrayList<String> color=new ArrayList<String>();
Collections.addAll(num,"2","A","K","Q","J","10","9","8","7","6","5","4","3");
Collections.addAll(color,"♠","♥","♣","♦");
pkmap.put(0, "大王"); pknum.add(0);
pkmap.put(1, "小王"); pknum.add(1);
int index = 2;
for (String n : num) {
for (String c : color) {
pkmap.put(index, c+n);
pknum.add(index);
index++;
}
}
//System.out.println(pkmap);
//System.out.println(pknum);
}
private static void fp(HashMap<Integer, String> pkmap,ArrayList<Integer> pknum) {
//玩家,底牌集合
ArrayList<Integer> w1= new ArrayList<Integer>();
ArrayList<Integer> w2= new ArrayList<Integer>();
ArrayList<Integer> w3= new ArrayList<Integer>();
ArrayList<Integer> dp= new ArrayList<Integer>();
//编号发牌
Random r = new Random();
int sj = r.nextInt(pknum.size()-3);
//System.out.println("pknum中索引是:"+sj+", pkmap中索引是"+pknum.get(sj));
System.out.println("拿到 "+pkmap.get(pknum.get(sj))+" 牌的人是地主.");
for (int i=0;i<pknum.size();i++) {
if(i>=51){
dp.add(pknum.get(i));
}else if (i%3==0){
w1.add(pknum.get(i));
}else if (i%3==1){
w2.add(pknum.get(i));
}else if(i%3==2){
w3.add(pknum.get(i));
}
}
//随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主
for (int i=0;i<dp.size();i++){
if(w1.contains(sj)){
if(i==sj){
System.out.println("成龙是地主");}
w1.add(dp.get(i));
}else if(w2.contains(sj)){
if(i==sj){
System.out.println("甄子丹是地主");}
w2.add(dp.get(i));
}else if(w3.contains(sj)){
if(i==sj){
System.out.println("李连杰是地主");}
w3.add(dp.get(i));
}
}
//排序
Collections.sort(w1);
Collections.sort(w2);
Collections.sort(w3);
Collections.sort(dp);
//成龙,甄子丹,李连杰三个人看牌
look("成 龙",w1,pkmap);
look("甄子丹",w2,pkmap);
look("李连杰",w3,pkmap);
look("底 牌",dp,pkmap);
}
private static void look(String name, ArrayList<Integer> wj,HashMap<Integer, String> pkmap) {
System.out.print(name+": ");
for (Integer k : wj) {
String v = pkmap.get(k);
System.out.print(v+" ");
}
System.out.println();
}
}
|
|