java-模拟斗地主的洗牌和发牌

引言
这个部分讲一个有关斗地主小代码,对于洗牌和发牌的相关部分做一介绍。用了两种不同的方法,让我们对普通的ArrayList集合和对Map集合的具体实现做一个大致的了解。
ArrayList

package com.stu.poker;
import java.util.ArrayList;
import java.util.Collections;
public class Poker {
    public static void main(String[] args) {
        //4:模拟斗地主洗牌和发牌
                /**
                 * 1.创建一副牌(54)
                 * 2.洗牌
                 * 3.发牌
                 * 4.看牌
                 */
        //1.创建一副牌
        //创建一个集合存储牌,使用ArrayList集合
        ArrayList<String> pokers = new ArrayList<String>();
        //创建存储花色的数组
        String[] colors={"♥","♠","♣","♦"};
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for(String color:colors){
            for(String number:numbers){
                pokers.add(color+number);
            }
        }
        //将大王和小王存储到集合
        pokers.add("大王");
        pokers.add("小王");
        //2、洗牌
        Collections.shuffle(pokers);
        //System.out.println(pokers);
        //3.发牌
            /**
             * 张三:0 3 6
             * 李四:1 4 7
             * 王五:2 5 8
             * 底牌:设置成最后3张牌
             */
        //创建三个集合存储各自的牌
        ArrayList<String> zhangsan = new ArrayList<String>();
        ArrayList<String> lisi = new ArrayList<String>();
        ArrayList<String> wangwu = new ArrayList<String>();
        ArrayList<String> dipai = new ArrayList<String>();
        for(int i=0;i<pokers.size();i++){
            if(i>=pokers.size()-3){
                dipai.add(pokers.get(i));
            }else if(i%3==0){
                zhangsan.add(pokers.get(i));
            }else if(i%3==1){
                lisi.add(pokers.get(i));
            }else if(i%3==2){
                wangwu.add(pokers.get(i));
            }   
        }
        //4、看牌
        lookPoker("张三", zhangsan);
        lookPoker("李四", lisi);
        lookPoker("王五", wangwu);
        lookPoker("底牌", dipai); 
    }
    public  static void lookPoker(String name, ArrayList<String> pokers){
        System.out.println(name+"的牌是:");
        for(String poker:pokers){
            System.out.print(poker+" ");
        }
        System.out.println();
    }
}

编译运行结果如下:
张三的牌是:
♥3 ♣8 ♣6 ♠7 ♣K ♦9 ♥8 ♥J ♦K ♠5 ♦10 ♦4 ♥6 ♥A ♠2 ♥Q ♦7
李四的牌是:
♠A ♣Q ♦6 ♥10 ♠8 ♠K ♥9 ♣2 ♦5 ♣A ♠Q 大王 ♠3 ♥2 ♦J ♣4 ♥5
王五的牌是:
♦2 ♣7 ♠9 ♣5 ♥7 ♣9 ♦A ♠J ♥4 ♣3 小王 ♠4 ♦Q ♦8 ♥K ♠10 ♠6
底牌的牌是:
♣10 ♦3 ♣J
Map

package com.stu.poker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.TreeMap;
import java.util.TreeSet;
public class Poker2 {
    public static void main(String[] args) {
        /**
         * 1.创建Map集合存储牌,并且大的键对应大的牌,小的键对应小的牌
         * 2.洗牌,洗的是索引(map集合中每一张牌对应的键)
         * 3.发牌,发的索引,并且随这个索引进行排序
         * 4.看牌,根据发到的键去map集合中找出对应的值
         */
        //1、创建Map集合存储牌,大的键对应大的牌,小的键对应小的牌
        TreeMap<Integer, String> pokers = new   TreeMap<Integer,String>();
        //向集合中存储元素
        String[] colors = {"♥","♠","♣","♦"};
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //创建一个ArrayList存储每一张牌对应的索引
        ArrayList<Integer> indexs = new ArrayList<Integer>();
        int index=0;
        for(String number:numbers){
            for(String color:colors){
                pokers.put(index, color+number);
                indexs.add(index);
                index++;
            }
        }
        //将大王小王存进去
        pokers.put(index, "大王");
        indexs.add(index);
        index++;
        pokers.put(index, "小王");
        indexs.add(index);
        //System.out.println(pokers);
        //洗牌
        Collections.shuffle(indexs);
        //发牌
        TreeSet<Integer> xuezhiqian  = new TreeSet<>();
        TreeSet<Integer> zhourunfa = new TreeSet<>();
        TreeSet<Integer> zhoujielun = new TreeSet<>();
        TreeSet<Integer> dipai = new TreeSet<>();   
        //发牌
        for (int i = 0; i < indexs.size(); i++) {
            if (i>=indexs.size()-3) {
                dipai.add(indexs.get(i));
            }else if (i%3==0) {
                xuezhiqian.add(indexs.get(i));
            }else if (i%3==1) {
                zhourunfa.add(indexs.get(i));
            }else if (i%3==2) {
                zhoujielun.add(indexs.get(i));
            }
        }       
        //看牌
        lookPoker("薛之谦", xuezhiqian, pokers);
        lookPoker("周润发", zhourunfa, pokers);
        lookPoker("周杰伦", zhoujielun, pokers);
        lookPoker("底牌", dipai, pokers);     
    }
    public static void lookPoker(String name,TreeSet<Integer> indexs,
            TreeMap<Integer, String> pokers){
        System.out.print(name+"的牌是:");
        for (Integer index : indexs) {
            System.out.print(pokers.get(index)+"  ");
        }
        System.out.println();
    }
 }

编译运行结果如下:
薛之谦的牌是:♥3 ♦3 ♥6 ♠6 ♦6 ♣7 ♥8 ♠9 ♣9 ♣10 ♦10 ♦J ♣Q ♥K ♦K ♠2 ♣2
周润发的牌是:♥4 ♣5 ♣6 ♥7 ♣8 ♦8 ♥10 ♠10 ♠J ♣J ♥Q ♠Q ♦Q ♣K ♥A ♥2 大王
周杰伦的牌是:♠3 ♠4 ♣4 ♦4 ♥5 ♠5 ♦5 ♠7 ♦7 ♥9 ♦9 ♥J ♠K ♠A ♣A ♦A ♦2
底牌的牌是:♣3 ♠8 小王

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值