斗地主无序发牌案例(Java)

1.准备牌: 

        54张牌,存储到一个集合中

        特殊牌:大王,小王

        其他52张牌:

                  定义一个集合/数组,存储4种花色:♠,,♣,

                  定义一个集合/数组,存储13个序号:2,3,4,5,6,7,8,9,10,J,Q,K,A

        循环嵌套遍历两个集合,组装52张牌:

                A,♠2,8,Q,♣K ......

2.洗牌:

        使用集合工具类Collections的方法:

        static void shuffle(List<E> list) 使用指定的随机源对指定列表进行置换

        会随机的打乱集合中元素的排序

3.发牌:

        要求:1人17张牌,剩余3张作为底牌,一人一张轮流发牌:集合的索引(0-53)% 3

        定义4个集合,存储3个玩家的牌和底牌

        索引%2,有两个值(0,1)0%2=1 2%2=0 3%2=1

        索引%3,有三个值(0,1,2)0%3=0 1%3=1 2%3=2 3%3=0

        索引>=51,改底牌发牌

4.看牌:

        直接打印集合,遍历存储玩家和底牌的集合

思维导图:

 

效果显示

代码实现 

import java.util.ArrayList;
import java.util.Collection;
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","3","4","5","6","7","8","9","10","J","Q","K","A"};

        //先把大王和小王存储到poker集合中
        poker.add("大王");
        poker.add("小王");

        //循环嵌套遍历两个数组,组装52张牌
        for(String number : numbers){
            for(String color : colors){
                //System.out.print(color+number+"\t");
                //将组装好的牌存储到poker集合中
                poker.add(color+number);
            }
        }
        //System.out.println(poker);

        //2.洗牌
        Collections.shuffle(poker);
        //System.out.println(poker);

        //3.发牌
        //定义4个集合存储3个玩家牌和底牌
        ArrayList<String> player01 = new ArrayList<>();
        ArrayList<String> player02 = new ArrayList<>();
        ArrayList<String> player03 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();

        //遍历扑克集合,获取每一张牌
        //使用扑克集合的索引%3==0,1,2给3个玩家轮流发牌
        for(int i = 0;i < poker.size(); i++){
            //获取每一张牌
            String p = poker.get(i);
            //轮流发牌
            if(i >= 51){
                //底牌
                dipai.add(p);
            }
            else if(i % 3 == 0){
                player01.add(p);//玩家一
            }
            else if(i % 3 == 1){
                player02.add(p);//玩家二
            }
            else if(i % 3 == 2){
                player03.add(p);//玩家三
            }
        }
        //看牌
        System.out.println("玩家一:"+player01);
        System.out.println("玩家二:"+player02);
        System.out.println("玩家三:"+player03);
        System.out.println("底牌:"+dipai);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_54702911/article/details/121629809
今日推荐