集合--斗地主发牌

规则:

    1. 组装54张扑克牌

2. 将54张牌顺序打乱

    3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

    4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

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

1.1 案例需求分析

l  准备牌:

完成数字与纸牌的映射关系:

使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

l  洗牌:

通过数字完成洗牌发牌

l  发牌:

将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同纸牌的数字分配给不同的玩家与底牌。

l  看牌:

通过Map集合找到对应字符展示。

通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

package com.oracle.Demo02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class doudizhu {

    public static void main(String[] args) {
        //创建扑克牌map
        Map<Integer,String> pk=new HashMap<Integer,String>();
        //装有拍好的ArrayList
        ArrayList<Integer> pkn=new ArrayList<Integer>();
         //组装牌
        String[] color= {"♥","♠","♣","♦"};
        String[] number= {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //循环打印花色
        int index=2;//从2开始,因为大小王需要单独等撰,
        /*双层for循环,先循环数字因为每个数字有四个花色*/
        for(String num:number) {
            //在循环花色
            for(String col:color) {
                pk.put(index, col+num);
                pkn.add(index++);
            }
        }
        //封装  大小王
        pk.put(0, "大王");
        pkn.add(0);
        pk.put(1, "小王");
        pkn.add(1);
        /*System.out.println(pk);
        System.out.println(pkn);*/
        //洗牌,打乱顺序
        Collections.shuffle(pkn);
        //发牌 造四个容器。
        ArrayList <Integer> bottom=new ArrayList <Integer> ();//底牌
        ArrayList <Integer> player1=new ArrayList <Integer> ();//玩家1        
        ArrayList <Integer> player2=new ArrayList <Integer> ();//玩家2
        ArrayList <Integer> player3=new ArrayList <Integer> ();//玩家3
    
        //底牌   遍历过程中,将牌发到三个玩家和底牌中
        for(int i=0;i<pkn.size();i++) {
            //先发底牌
            if(i<3) {
                bottom.add(pkn.get(i));            
            }
            else if(i%3==0) {
                player1.add(pkn.get(i));
            }
            else if(i%3==1) {
                player2.add(pkn.get(i));
            }
            else if(i%3==2) {
                player3.add(pkn.get(i));
            }            
        }
        //给牌排序
        Collections.sort(bottom);
        Collections.sort(player1);
        Collections.sort(player2);        
        Collections.sort(player3);
        //看牌+调方法
        look("底牌",bottom,pk);
        look("渣渣辉",player1,pk);
        look("系兄弟",player2,pk);
        look("砍我 ",player3,pk);
        
        
    }
        
        public static void look(String name,ArrayList <Integer> player,Map<Integer,String> pk) {
            //分类
            System.out.println(name+":");
            
            for(int i:player) {
                System.out.print(pk.get(i)+" ");
            }
            System.out.println();
         
    }

}

 代码实现:

原文地址:https://www.cnblogs.com/layuechuquwan/p/11444817.html