用java的泛型写个小斗地主随机发牌

用java的泛型写个小斗地主随机发牌

斗地主的步骤:

    1.准备牌
    2.洗牌
    3.发牌
    4.看牌

如图:

package Test;

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

/*
    斗地主综合案例:
        1.准备牌
        2.洗牌
        3.发牌
        4.看牌
 */
public class DouDiZhu {
    public static void main(String[] args) {
        //1.准备牌
        //定义一个存储54张牌的ArrayList集合,泛型使用string
        ArrayList<String> poker =new ArrayList<>();
        //定义两个数组(数组方便一点),一个数组存储牌的花色,一个数组存储牌的序号
        String[] colors ={"♥","♦","♣","♠"};
        String[] numbers ={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //先把大王和小王存储到poker集合中
        poker.add("大王");
        poker.add("小王");
        //循环嵌套遍历两个数组,组装52张牌即♥3这种花色+数字(增强for循环来遍历数组,集合)
        for (String number : numbers) {
            for (String color : colors) {
                //System.out.println(color+number);
                //组装好的牌存储到poker集合中
                poker.add(color+number);
            }
        }
        //System.out.println(poker);
        /*
        2.洗牌
        使用集合的工具类Collections中的方法
        static void shuffle(list<?> list)使用默认 随机源 对 指定列表 进行置换。
         */
        //import java.util.Collections中的一个工具类Collections.shuffle()
        Collections.shuffle(poker);//Collections.shuffle()方法是打乱集合中的元素(牌)的顺序
        /*
        3.发牌
         */
        //定义4个集合,存储玩家的牌和底牌
        ArrayList<String> play01 =new ArrayList<>();
        ArrayList<String> play02 =new ArrayList<>();
        ArrayList<String> play03 =new ArrayList<>();
        ArrayList<String> dipai  =new ArrayList<>();

        /*
            遍历poker集合,获取每一张牌
            使用poker集合的索引%3给3个玩家轮流发牌
            剩余3张牌给底牌
            注意:
                先判断底牌(i>=51),否则牌就发没了
         */
        for (int i = 0; i <poker.size() ; i++) {//54张牌 0~53序号
            //获取poker集合中的每一张牌放到p变量中一个一个的判断
            //poker.get(i)为集合的获取集合元素的方法,将获取的元素赋给string型的p,p现在是poker集合中每一个元素取出来的载体
            String p = poker.get(i);
            //如何轮流发牌,4个人就i%4,n个人就i%n
            if (i>=51){
                dipai.add(p);
            }else if (i%3 == 0){
                play01.add(p);//给第一个玩家发牌
            }else if (i%3 == 1){
                play02.add(p);//给第二个玩家发牌
            }else if (i%3 == 2){
                play03.add(p);//给第三个玩家发牌
            }

        }
        //4.看牌
        System.out.println("xky"+play01);
        System.out.println("wsy"+play02);
        System.out.println("zy"+play03);
        System.out.println("底牌"+dipai);
    }
}

结果:

xky[2,7,5,9, ♥A,6, 小王,7, ♦J,3, ♠Q,3,9,8, ♣J,10,2]
wsy[♠A,4,8,3, ♥Q,6,2,6,3,9,9,5, ♣A,4,2, ♥J,10]
zy[10,4,7,8, ♦K, ♠J, 大王, ♣Q, ♥K,6,7, ♣K, ♠K, ♦A,5,10,4]
底牌[5,8, ♦Q]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James Gosling永远滴神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值