首页 > 其他分享 >斗地主案例 Console version

斗地主案例 Console version

时间:2023-11-13 16:11:47浏览次数:30  
标签:pokers Console 斗地主 System player2 player3 version out TreeSet

package pers.landlord_fighting.thj;
/*
按照斗地主的规则,完成洗牌发牌的动作。

要求完成以下功能:

准备牌:组装54张扑克牌

洗牌:54张牌顺序打乱

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

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

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

*/

点击查看代码

import java.util.*;

public class LandlordFighting {
    public static void main(String[] args) {



        HashMap<Integer, String> pokers = new HashMap<>();

        //1.准备牌:组装54张扑克牌

        Ready_card(pokers);

        //洗牌:54张牌顺序打乱 打乱序号 再根据序号拿的值就乱了

        final List<Integer> listIntegers = shuffleCard(pokers);

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

        final Result result = getResult();

        Deal_cards(listIntegers, result.player1(), result.player2(), result.player3(), result.bottom());

        //看牌

        Watch_cards(result.player1(), pokers, result.player2(), result.player3(), result.bottom());
    }

    private static Result getResult() {
        TreeSet<Integer> player1 = new TreeSet<>();//玩家1的手牌
        TreeSet<Integer> player2 = new TreeSet<>();//玩家2的手牌
        TreeSet<Integer> player3 = new TreeSet<>();//玩家3的手牌
        TreeSet<Integer> bottom = new TreeSet<>();//底牌
        Result result = new Result(player1, player2, player3, bottom);
        return result;
    }

    private record Result(TreeSet<Integer> player1, TreeSet<Integer> player2, TreeSet<Integer> player3, TreeSet<Integer> bottom) {
    }

    private static void Watch_cards(TreeSet<Integer> player1, HashMap<Integer, String> pokers, TreeSet<Integer> player2, TreeSet<Integer> player3, TreeSet<Integer> bottom) {
        //看牌:查看三人各自手中的牌(按照牌的大小排序)、底牌
        //player1的手牌

        System.out.print("player1 :");
        for(Integer integer: player1){
            System.out.print(pokers.get(integer)+"\t");
        }
        System.out.println("\n");

        //player2的手牌

        System.out.print("player2 :");
        for(Integer integer: player2){
            System.out.print(pokers.get(integer)+"\t");
        }
        System.out.println("\n");

        //player3的手牌

        System.out.print("player3 :");
        for(Integer integer: player3){
            System.out.print(pokers.get(integer)+"\t");
        }
        System.out.println("\n");

        //底牌
        System.out.print("底牌:");
        for (Integer integer : bottom){
            System.out.print(pokers.get(integer)+"\t");
        }
    }

    private static void Deal_cards(List<Integer> listIntegers, TreeSet<Integer> player1, TreeSet<Integer> player2, TreeSet<Integer> player3, TreeSet<Integer> bottom) {
        //循环拿到每一张牌 留3张底牌
        for (int i = 0; i < listIntegers.size() - 3; i++) {
            Integer integer = listIntegers.get(i);
            if (i % 3 == 0) {
                //player1
                player1.add(integer);
            } else if (i % 3 == 1) {
                //player2
                player2.add(integer);
            } else {
                //player3
                player3.add(integer);
            }
        }

        //给底牌赋值
        bottom.add(listIntegers.get(51));
        bottom.add(listIntegers.get(52));
        bottom.add(listIntegers.get(53));
    }

    private static List<Integer> shuffleCard(HashMap<Integer, String> pokers) {
        //洗牌:54张牌顺序打乱 打乱序号 再根据序号拿的值就乱了

        //获取每一张牌的编号
        final Set<Integer> integers = pokers.keySet();//拿到键

        List<Integer> listIntegers = new ArrayList<>(integers);//将键转为列表

        Collections.shuffle(listIntegers);//打乱顺序
        return listIntegers;
    }

    private static void Ready_card(HashMap<Integer, String> pokers) {
        //4种花色
        String[] colors = {"♥", "♦", "♣", "♠"};//红桃 方片 梅花 黑桃
        //每种花色有13张牌
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};


        pokers.put(0, "大王");
        pokers.put(1, "小王");
        //通过循环拿到13张牌
        for (String number : numbers) {
            //通过循环拿到4种花色
            for (String color : colors) {
                //eg:2 ♥2
                pokers.put(pokers.size(), color + number);
                //System.out.print(color + number + "\t");
            }
        }
        //System.out.println(pokers);
    }
}

运行效果图

点击查看代码
"D:\DevTools\Program Files\Java Development Kit\Java 17\jdk-17\bin\java.exe" 
player1 :小王	♥3	♦3	♥4	♣4	♣6	♦7	♥8	♠8	♦9	♣9	♥10	♦J	♠Q	♣K	♠K	♥A	

player2 :♦4	♠4	♥5	♣5	♥6	♦6	♣7	♥9	♦10	♥J	♣J	♥Q	♥K	♦K	♠A	♣2	♠2	

player3 :大王	♠3	♦5	♠5	♥7	♠7	♦8	♣8	♠9	♣10	♠J	♦Q	♣Q	♦A	♣A	♥2	♦2	

底牌:♣3	♠6	♠10	

Process finished with exit code 0

标签:pokers,Console,斗地主,System,player2,player3,version,out,TreeSet
From: https://www.cnblogs.com/iflytek-aiit319102020329/p/17829384.html

相关文章

  • pip下载python软件包时报错 Could not find a version that satisfies the requiremen
    pip下载python软件包时报错,使用了国内源等各种方法,后来才知道是电脑中打开了抓包工具;打开抓包工具后一定要关闭抓包工具,这样下载软件包就下载下来了关闭抓包工具后,下载成功了......
  • 消除开关机都会提示Failed to start Setup Virtual Console
    我的manjaroLinux每次开关机都会提示FailedtostartSetupVirtualConsole,启动完成后不影响正常使用,但每次开关机都会有一个红色失败告警,并且发现没有这个告警的时候系统启动速度更快。1、修改文件:sudovim/etc/vconsole.conf2、将其中的KEYMAP=cn修改为KEYMAP=us保存,重启......
  • CF1450C1 Errich-Tac-Toe (Easy Version)
    思路如果去考虑O的摆放,再考虑那些改为X,这样不好思考,实现也很不好写,所以我们可以考虑构造一种通解。如果将上图所有标红的位置都放上X,那么无论O如何放,都不可能胜利,而X因为原本就没有,所以摆上后也不可能胜利。不过,因为更改的次数不能超过棋子总数的\(\frac13\),所以这......
  • CF1450C2 Errich-Tac-Toe (Hard Version)
    思路实际上,如果你会简单版本,那么困难版本也没有那么难了。同样考虑构造一种通解,如下,红色的格子改为X,绿色的格子改为O,就是一种通解,同样的,这样改可能会超过棋子总数的\(\frac13\)。同样考虑将棋子按照位置分类,假如该棋子的位置是\((i,j)\),那么按照\((i+j)\bmod3\)的值......
  • Console LDAP 配置解密
    之前通过短视频向大家介绍了Console如何集成LDAP,但很多小伙伴反映按照视频里的配置后不成功。今天就结合小伙伴们反映的问题来跟大家详细介绍一下。ConsoleLDAP完整的配置参数如下:名称类型说明hoststringLDAP服务器地址portintLDAP服务器端口,默认389......
  • Ubuntu连接局域网中Windows主机上的v2r报错:rejected core/proxy/socks: unknown Sock
    参考:https://github.com/2dust/v2rayN/issues/3916  ================================    家里有两台电脑,一个是Windows系统,一个是Ubuntu系统;Windows系统用来平常工作舆论,Ubuntu系统用于远程vscode写写code,因此就有一个需求就使用要Ubuntu系统也能上GitHub。 ......
  • Amazon EC2 Serial Console 现已在其他亚马逊云科技区域推出
    即日起,交互式EC2SerialConsole现也在以下区域推出:中东(巴林)、亚太地区(雅加达)、非洲(开普敦)、中东(阿联酋)、亚太地区(香港)、亚太地区(海得拉巴)、亚太地区(大阪)、欧洲地区(米兰)、欧洲(西班牙)、欧洲(苏黎世)、亚太地区(墨尔本)。通过建立面向实例串行端口的连接,EC2SerialConsole提供一种简......
  • cf1856E2. PermuTree (hard version)(bitset+二进制优化背包+开不同大小bitset)
    https://codeforces.com/contest/1856/problem/E2结论是显然的,关键是有一些科技在里面bitset+二进制优化具体分析可以参考https://codeforces.com/blog/entry/98663简而言之就是可以通过\(O(\frac{C\sqrtC}{w})\)的复杂度判断是否能够获得某种体积开不同大小bitsettemplate......
  • cf1582F2. Korney Korneevich and XOR (hard version)(暴力优化)
    cf1582F2对于每种数可以维护一个列表v[x],表示到当前位置,最后一个数小于等于x,能够取到的值,对于当前的数ai,我们可以用v[ai]中的值x与ai异或,来更新v[ai+1],v[ai+2]后面的值。然后就是有两个优化,每次我们更新完后,都对v[a[i]]清空,因为只有两个相同数之间的数才对后面可能有贡献,前面的......
  • 配置使用百度地图时出现:APP Referer校验失败。请检查该ak设置的白名单与访问所有的域
    如果是个人内部测试使用,直接将IP白名单设置为*  ......