JAVA代码之斗地主发牌

理解很好理解,关键是思路

按照斗地主的规则,完成洗牌发牌的动作:

 具体规则:

    1. 组装54张扑克牌

 2. 将54张牌顺序打乱

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

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

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

 

package com.oracle.demo01;

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) {
        //1.创建扑克牌Map
        Map<Integer,String> pooker=new HashMap<Integer,String>();
        //创建所有key所在的容器
        ArrayList<Integer> pookerNum=new ArrayList<Integer>();
        //创建花色数组
        String[] color={"♠","♣","♥","♦"};
        //创建牌号数组
        String[] number={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //造牌并存进map集合
        int index=2;
        for(String n:number){
            for(String c:color){
                //向map中存数据
                pooker.put(index,c+n);
                //向所有key所在的容器存数据
                pookerNum.add(index);
                index++;    
            }
        }
        //存大小王
        pooker.put(0, "大王");
        pookerNum.add(0);
        pooker.put(1, "小王");
        pookerNum.add(1);
        //洗牌
        Collections.shuffle(pookerNum);
        //System.out.println(pookerNum);
        //发牌
        //创建四个容器
        ArrayList<Integer> bottom=new ArrayList<>();
        ArrayList<Integer> player1=new ArrayList<>();
        ArrayList<Integer> player2=new ArrayList<>();
        ArrayList<Integer> player3=new ArrayList<>();
        //开始发牌
        for(int i=0;i<pookerNum.size();i++){
            //将前三张给底牌
            if(i<3){
                bottom.add(pookerNum.get(i));
            }else if(i%3==0){
                player1.add(pookerNum.get(i));
            }else if(i%3==1){
                player2.add(pookerNum.get(i));
            }else if(i%3==2){
                player3.add(pookerNum.get(i));
            }
        }
        //排序(key升序 牌从大到小)
        Collections.sort(bottom);
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        //看牌(调用方法)
        look("刘德华",player1,pooker);
        look("张家辉",player2,pooker);
        look("周润发",player3,pooker);
        look("底牌",bottom,pooker);
    }
    //看牌的方法(传参为  玩家姓名,玩家的牌即键,所有牌的键值对)
    public static void look( String name,ArrayList<Integer> player,Map<Integer,String> pooker){
        //打印玩家姓名
        System.out.print(name+":");
        //遍历所有牌号
        for(int num:player){
            System.out.print(pooker.get(num)+" ");
        }
        System.out.println();
    }
}

 

posted @ 2019-06-01 09:42  壹叶知秋  阅读(3157)  评论(0编辑  收藏  举报