Java-扑克牌分发

实现一个三人斗地主的扑克牌分发功能

思路
1、准备一组54张的扑克牌
2、洗牌
2、将扑克牌分发到玩家手中
3、查看每个选手中的扑克牌和地主的底牌

思路补充:先创建两个花色和数字的数组,再创建一个List集合,和Map集合,运用双层for循环将花色和数字依次组合成52张扑克牌,之后分别在加添加进Map集合中的value值中,Map中的key值依次用0-51表示,双层for循环的同时将0-51的值依次赋值给List集合中,循环结束后在依次将大王、小王加入Map集合中的value中相对应的key值用52和53表示,还要讲52和53赋值到List集合中,此时所有牌组准备完毕。
分别创建四个新List集合,将存放序号的List集合中的序号打乱后分发到玩家手中,最后留三张底牌,添加到他们对应的List集合中
分别将三位玩家和底牌中的序号集合遍历,遍历出的数值带入到Map中的get方法的key值中,得到相对应得value值(也就是对应的牌),再将value值赋值给玩家手中对应的序号值处。
最后将三位玩家和底牌所对应的List集合输出打印出来即可看到他们被分到的牌。
具体代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class TestPokerPlus {

    public static void main(String[] args) {
        //1.创建扑克牌集合
        //创建map集合,类似于字典 和 list序号集合
        List list = new ArrayList();
        HashMap<Integer,String> map = new HashMap<Integer,String>();
        //将花色和数字及JQK组合添加进扑克牌集合map中
        String[] color = {"♥","♦","♠","♣"};
        String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        int num = 0;//计数器思想
        for(int i = 0 ;i< number.length;i++){
            for(int j = 0 ;j< color.length;j++){
                map.put(num,color[j]+number[i]);
                list.add(num);
                num++;
            }
        }
        //将序号集合中加入52,53两位序列,为之后map集合中加入“大王”、“小王”做准备
        list.add(list.size());
        list.add(list.size());
        //在加上大王、小王两张牌
        map.put(list.size()-2,"小王");
        map.put(list.size()-1,"大王");

        //2.打乱
        //将序号集合打乱
        Collections.shuffle(list);

        //3.分牌
        //创建三名玩家和底牌集合
        List player1 = new ArrayList();
        List player2 = new ArrayList();
        List player3 = new ArrayList();
        List cards = new ArrayList();
        //循环分发序号
        for(int i = 0 ;i<list.size();i++){
            if(i<list.size()-3){
                if(i % 3 == 1){
                    player1.add(list.get(i));
                }else if(i % 3 == 2){
                    player2.add(list.get(i));
                }else{
                    player3.add(list.get(i));
                }
            }else{
                cards.add(list.get(i));
            }
        }
        //将分的的序号升序排列
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(cards);
        //遍历将3个玩家和底牌分得的序号集合 对照map集合重新将对应的牌赋值给对应的序号
        boardAssignment(map, player1);
        boardAssignment(map, player2);
        boardAssignment(map, player3);
        boardAssignment(map, cards);

        //4.看牌
        //打印输出三名玩家的牌的底牌
        System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(cards);
    }

    private static void boardAssignment(HashMap<Integer, String> map,List list) {
        for(int i = 0;i < list.size();i++){
            list.set(i, map.get(list.get(i)));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值