用集合做一个三人斗地主的发牌器

package net.yajun.test;

import java.util.ArrayList;
import java.util.Collections;

/**
 * @author  yajun sir
 * @version  v1.0
 */
    //先创建一个牌盒
    //装牌
    //洗牌
    //发牌
    //看牌
public class DouDiTest {
    public static void main(String[] args) {
        //come on baby  来我们先创建一个牌盒
        //有序的集合 方便遍历发牌
        ArrayList<String> poker = new ArrayList<String>();
        //每个扑克有54张牌  四个花色 每个花色 有13张牌 另加两个大小王
        //2他们分别装进牌和
        String[] colors = {"♠","♥","♣","♦" };
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A","2"};
        for (int x = 0;x<colors.length; x++){
            for (int y = 0; y < numbers.length; y++) {
              poker.add(colors[x].concat(numbers[y]));
            }
        }
        //把两个王牌加进去
        poker.add("小王");
        poker.add("大王");
        //System.out.println(poker);
        Collections.shuffle(poker);
        //System.out.println(poker);
         //发牌 创建四个数组对象  3个palyer 一个底牌
        ArrayList<String> pipixia= new ArrayList<String>();
        ArrayList<String> xiaohong= new ArrayList<String>();
        ArrayList<String> xiaoming= new ArrayList<String>();
        ArrayList<String> dipai= new ArrayList<String>();
        //遍历这个poker 数组 根据数组的索引和长度的关系 发牌
        //
        for (int x= 0;x<poker.size();x++) {
            if (x>=poker.size()-3) {
                dipai.add(poker.get(x));
            } else if (x % 3 == 1) {
                pipixia.add(poker.get(x));
            }else if(x%3==2){
                xiaohong.add(poker.get(x));
            }else{
                xiaoming.add(poker.get(x));
            }
        }
//        for(String s :dipai){
//            System.out.print(s+" ");
//
//        } System.out.println();
        //这是直接输出的  下面是方法输出
//        System.out.println(pipixia+"共有:"+pipixia.size()+"张");
//        System.out.println(xiaohong+"共有:"+xiaoming.size()+"张");
//        System.out.println(xiaoming+"共有:"+xiaohong.size()+"张");
//        System.out.println(dipai+"共有:"+dipai.size()+"张");
        lookPoker(pipixia,"皮皮虾");
        lookPoker(xiaoming,"小明");
        lookPoker(xiaohong,"小红");
        lookPoker(dipai,"底牌");

            }
    /**
     * 怎么写一个方法
     * 1.有没有返回值
     * 2.明确返回值类型:无返回值
     * 3.参数的个数 和类型  一个 ArrayList() list
     * 4.由与是在类中的方法 main静态方法中无法调用本类的非静态方法 所以加static
     */
     public static <T> void lookPoker(ArrayList<T> list,String name){
         System.out.print(name+"的牌是:");
        for(T s :list){
            System.out.print(s+" ");

        } System.out.println("共有:"+list.size()+"张");
    }
}

//输出的牌 顺序不好 所以选择  用其他方法改进
**运行结果**
皮皮虾的牌是:♣J ♥648310 ♠K ♦9 ♦A ♦6 ♥A ♠6875 ♣K ♠3 共有:17张
小明的牌是:♣A ♠2104 ♠Q ♣3425 小王 ♣2 ♣Q ♥3108 ♦K ♠J 共有:17张
小红的牌是:♦Q ♠758 ♥Q ♥9 ♥K ♣9 ♦J ♠10 ♠A ♥J 大王 ♥4677 共有:17张
底牌的牌是:♥592 共有:3

第二种方法

package net.yajun.test;

import java.util.*;

/**
 * @author yajun
 * @version v2.0
 * 由于上次的方法,不能在牌后不能很清楚的看出牌的大小所以选择双序列的数组改进
 * 思路
 * 1.用HashMap() 双序列数组存储poker 用1-54做键值 标记扑克从小到大的顺序
 * 2.用ArrayList 存储数字1-54 进行洗牌 发牌
 * 3.然后用发到的数字 去HashMap中找健对应的值
 * 4.找到之后把对应的健和值 从新装入TreeMap 中 ——>自然排序——> 看牌
 */


public class DouDiTest2 {
    public static void main(String[] args) {
            HashMap<Integer, String> poker = new HashMap<Integer, String>();
            ArrayList<Integer> keys = new ArrayList<Integer>();
            int key = 0;
            String[] colors = {"♠", "♥", "♣", "♦"};
            String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
            //把扑克放到poker中  把int数放到keys中
            for (int y = 0; y < numbers.length; y++) {
                for (int x = 0; x < colors.length; x++) {
                    poker.put(key, colors[x].concat(numbers[y]));
                    keys.add(key);
                    key++;

                }
            }
//        for (String c : colors) {
//            for (String n : numbers) {
//                poker.put(key, c.concat(n));
//                keys.add(key);
//                key++;
//            }
//        }
            //添加大小王 和53 53 到poker数组  和keys 数组
            poker.put(52, "小王");
            poker.put(53, "大王");
            keys.add(52);
            keys.add(53);
//        System.out.println(poker);
//        for (Integer i : keys) {
//            System.out.print(i+" ");
//        }
            //打乱数组
            Collections.shuffle(keys);
            //创建 3个玩家牌的 TreeMap 集合
            TreeMap<Integer, String> pipixia = new TreeMap<Integer, String>();
            TreeMap<Integer, String> xiaoming = new TreeMap<Integer, String>();
            TreeMap<Integer, String> xiaohong = new TreeMap<Integer, String>();
            TreeMap<Integer, String> dipai = new TreeMap<Integer, String>();
            //发牌,存储到 TreeMap数组中
            //因为定的是1-54 所以这里的x要+1 方便使用
            for (int x = 0; x < keys.size(); x++) {
                if (x >= keys.size() - 3) {
                    dipai.put(keys.get(x), poker.get(keys.get(x)));
                } else if (x % 3 == 1) {
                    pipixia.put(keys.get(x), poker.get(keys.get(x)));
                } else if (x % 3 == 2) {
                    xiaoming.put(keys.get(x), poker.get(keys.get(x)));
                } else {
                    xiaohong.put(keys.get(x), poker.get(keys.get(x)));
                }
            }
            lookPoker(pipixia, "皮皮虾");
            lookPoker(xiaoming, "小明");
            lookPoker(xiaohong, "小红");
            lookPoker(dipai, "底牌");
            // System.out.println(xiaoming);
        }
        public static <T > void lookPoker (TreeMap < Integer, String > list, String name){
            System.out.print(name + "的牌是:");
            Set<Integer> s = list.keySet();

            for (Integer i : s) {
                System.out.print(list.get(i) + " ");

            }
            System.out.println("共有:" + list.size() + "张");
        }
    }
**运行结果**
皮皮虾的牌是:♥3456778101010 ♠Q ♣Q ♣K ♠A ♣A ♦A 小王 共有:17张
小明的牌是:♣3556788999 ♠J ♣J ♦J ♥Q ♦Q ♠K ♦K 共有:17张
小红的牌是:♠33445667810 ♥J ♥K ♥A ♠222 大王 共有:17张
底牌的牌是:♠492 共有:3张

Process finished with exit code 0

新手 感觉超级乱 看啦一下视频 自己捣鼓的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值