023、模拟斗地主洗牌发牌
本文最后更新于 68 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

模拟斗地主洗牌发牌

1.案例介绍

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

具体规则:

  1. 组装54张扑克牌
  2. 54张牌顺序打乱
  3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
  4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

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

2.案例需求分析

1.准备牌:

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

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

2.洗牌:

通过数字完成洗牌发牌

3.发牌:

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

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

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

4.看牌:

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

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

3.实现代码

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

/**
 * @Package maptest
 * @ClassName Poker
 * @Description 模拟斗地主洗牌发牌
 * @Date 20/6/14 12:53
 * @Author krislin
 * @Version V1.0
 */
public class Poker {
    public static void main(String[] args) {
        //1.组装54张扑克牌
        //1.1.创建Map集合存储
        HashMap<Integer,String> pokerMap = new HashMap<>();
        //1.2.创建花色集合与数字集合
        ArrayList<String> colors = new ArrayList<>();
        ArrayList<String> numbers = new ArrayList<>();
        //1.3.存储花色与数字
        Collections.addAll(colors,"♦", "♣", "♥", "♠");
        Collections.addAll(numbers,"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        //设置存储编号变量
        int count = 1;
        pokerMap.put(count++,"大王");
        pokerMap.put(count++,"小王");
        //1.4.创建牌存储到map集合中
        for (String number:numbers){
            for (String color:colors){
                String card = color + number;
                pokerMap.put(count++,card);
            }
        }

        //2.将54张牌顺序打乱
        //取出编号集合
        Set<Integer> numberSet = pokerMap.keySet();
        //因为要将编号打乱顺序,所以应该进行转换到list集合中
        ArrayList<Integer> numberList = new ArrayList<>();
        numberList.addAll(numberSet);
        //打乱顺序
        Collections.shuffle(numberList);

        //3.王城三个玩家交替摸牌,没人17张牌,最后三张留作底牌
        //3.1.发牌的编号
        //创建三个玩家编号集合和一个底牌编号集合
        ArrayList<Integer> noP1 = new ArrayList<>();
        ArrayList<Integer> noP2 = new ArrayList<>();
        ArrayList<Integer> noP3 = new ArrayList<>();
        ArrayList<Integer> diPaiNo = new ArrayList<>();
        //3.2.发牌的编号
        for(int i=0;i<numberList.size();i++){
            //获取该编号
            Integer no = numberList.get(i);
            //发牌
            //留出底牌
            if (i>=51){
                diPaiNo.add(no);
            }else{
                if (i%3 == 0){
                    noP1.add(no);
                }else if (i%3 == 1){
                    noP2.add(no);
                }else{
                    noP3.add(no);
                }
            }
        }

        //4.查看三人各自手中的牌(按照牌的大小顺序)、底牌
        //4.1.对手中的编号进行排序
        Collections.sort(noP1);
        Collections.sort(noP2);
        Collections.sort(noP3);
        Collections.sort(diPaiNo);
        //4.2.进行牌面的转换
        //创建三个玩家牌面集合以及底牌牌面集合
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        ArrayList<String> diPai = new ArrayList<>();
        //4.3.转换
        for (Integer i : noP1){
            //4.4.根据编号找到牌面pokerMap
            String card = pokerMap.get(i);
            //添加到对应的牌面集合中
            player1.add(card);
        }
        for (Integer i : noP2) {
            String card = pokerMap.get(i);
            player2.add(card);
        }
        for (Integer i : noP3) {
            String card = pokerMap.get(i);
            player3.add(card);
        }
        for (Integer i : diPaiNo) {
            String card = pokerMap.get(i);
            diPai.add(card);
        }

        //4.5.查看
        System.out.println("令狐冲:"+player1);
        System.out.println("石破天:"+player2);
        System.out.println("鸠摩智:"+player3);
        System.out.println("底牌:"+diPai);
    }
}
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇