Java斗地主发牌实现二

要求:最后手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

  1. 准备牌:
    完成数字与纸牌的映射关系:
    使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
  2. 洗牌:
    通过数字完成洗牌发牌
  3. 发牌:
    将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
    存放的过程中要求数字大小与斗地主规则的大小对应。
    将代表不同纸牌的数字分配给不同的玩家与底牌。
  4. 看牌:
    通过Map集合找到对应字符展示。
    通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;

public class DouDIZhu {
    public static void main(String[] args) {
        HashMap<Integer,String> pokerMap = new HashMap<>();

        ArrayList<String> color = new ArrayList<>();//存放花色
        ArrayList<String> number = new ArrayList<>();//存放数字

        Collections.addAll(color,"♦", "♣", "♥", "♠");
        Collections.addAll(number,"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");

        int count=1;
        //大小王比较特殊,单独存放
         pokerMap.put(count++,"大王");
         pokerMap.put(count++,"小王");

         //将数字和花色一一对应起来,存到pokerMap
         for(String numbers:number) {
             for(String colors:color){
                 String str= colors+numbers;
                 pokerMap.put(count++,str);

             }
         }
        //System.out.println(pokerMap); //测试一下是否存储成功

         //洗牌 通过pokerMap中数字键完成洗牌
        Set<Integer> set= pokerMap.keySet();//得到这些数字键,并存到set集合中
        //洗牌需要把这些数字放到List集合中去,
        //System.out.println(set);
        //Collections.shuffle(set); 错误写法 ,Set集合不支持
        ArrayList<Integer> arrayList=new ArrayList<>();
        arrayList.addAll(set);
        System.out.println(arrayList);//此时数字是按照顺序排放的
        //调用shuffle()方法打乱顺序
        Collections.shuffle(arrayList);
        System.out.println(arrayList);//测试一下数字是否打乱

        //创建四个集合分别存储三个玩家和底牌的数字
        ArrayList<Integer> play1= new ArrayList<>();
        ArrayList<Integer> play2= new ArrayList<>();
        ArrayList<Integer> play3= new ArrayList<>();
        ArrayList<Integer> dipai= new ArrayList<>();

        for (int i = 0; i < arrayList.size(); i++) {
            int n= arrayList.get(i);
            if(i>=51){
                dipai.add(n);
            }else {
                if(i%3==0){
                    play1.add(n);
                }else if(i%3==1){
                    play2.add(n);
                }else {
                    play3.add(n);
                }
            }

        }
        //将各个手中的数字进行排序
        Collections.sort(play1);
        Collections.sort(play2);
        Collections.sort(play3);
        Collections.sort(dipai);

        //再创建四个集合找到各个手中数字对应的牌面
        ArrayList<String> play01= new ArrayList<>();
        ArrayList<String> play02 =new ArrayList<>();
        ArrayList<String> play03 =new ArrayList<>();
        ArrayList<String> di =new ArrayList<>();

        //通过数字找到对应的牌面并存储到集合
        for(Integer i:play1){
            String st1=pokerMap.get(i);
            play01.add(st1);

        }
        for(Integer i:play2){
            String st2=pokerMap.get(i);
            play02.add(st2);

        }
        for(Integer i:play3){
            String st3=pokerMap.get(i);
            play03.add(st3);

        }
        for(Integer i:dipai){
            String st1=pokerMap.get(i);
            di.add(st1);

        }
        //打印结果
        System.out.println("刘备"+play01);
        System.out.println("关羽"+play02);
        System.out.println("张飞"+play03);
        System.out.println("底牌"+di);



    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值