Java实现斗地主实例

分析:

首先,我们来梳理一下规则:

准备牌阶段:斗地主一般用一副牌,有54张,其中有大王小王各1张,其他52张牌,分别是4个花色,每种花色13张。四种花色分别为♥ ♦ ♠ ♣,定义一个集合来存储它们;而每一种花色中的13张牌为:(由大到小)2 A K Q J 10 9 8 7 6 5 4 3,也定义一个集合来存储它们。遍历这两个集合,可以组装成为52张牌,例如♣7 ♥A
洗牌阶段:使用集合工具类Collections方法,其中static void shuffle(List<?> list)使用指定的随机数对指定列表进行置换,会随机的打乱集合中的元素的顺序
发牌阶段:要求每一位玩家拥有17张牌,剩余三张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3,定义4个集合,来存储3个玩家的牌和场上的底牌。索引%3,有三个值(0,1,2),0%3=0,1%3=1,2%3=2,3%3=0,当索引>=51时,改为发底牌
看牌阶段:直接打印集合,遍历存储玩家和底牌的集合

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class PokerDemo {
    public static void main(String[] args) {
        HashMap<Integer,String> hm=new HashMap<Integer,String>();
        //创建arraylist,存储编号
        ArrayList<Integer> array=new ArrayList<Integer>();
        //创建花色数组和点数数组
        String[] colors={"♦","♣","♠","❤"};
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //从0开始向Hashmap存取编号,并存储对应的牌。同时往Arraylist存取编号
        int index=0;
        for (String number:numbers){
            for (String color:colors){
                hm.put(index,color+number);
                array.add(index);
                index++;
            }
        }
        hm.put(index,"小王");
        array.add(index);
        index++;
        hm.put(index,"大王");
        array.add(index);
        //洗牌(洗的时编号),用collection的shuffle方法实现
        Collections.shuffle(array);
        //发牌
        TreeSet<Integer> lqx=new TreeSet<Integer>();
        TreeSet<Integer> ly=new TreeSet<Integer>();
        TreeSet<Integer> fqx=new TreeSet<Integer>();
        TreeSet<Integer> dp=new TreeSet<Integer>();
        for (int i=0;i<array.size();i++){
            int x=array.get(i);
            if (i>=array.size()-3){dp.add(x);


            } else if (i%3==0) {lqx.add(x);
                
            } else if (i%3==1) {ly.add(x);
                
            } else if (i%3==2) {
                        fqx.add(x);
            }
        }
        lookPoker("林青霞",lqx,hm);
        lookPoker("柳岩",ly,hm);
        lookPoker("风清扬",fqx,hm);
        lookPoker("底牌",dp,hm);
        //定义方法看牌


    }public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
        System.out.print(name+"的牌是:");
        for (Integer key:ts){
            String Poker = hm.get(key);
            System.out.print(Poker+" ");
        }
        
 System.out.println("\n");

    }
}

 结果展示:


版权声明:本文为m0_62454521原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。