文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中如何实现斗地主游戏

2023-06-20 17:58

关注

这篇文章给大家分享的是有关Java中如何实现斗地主游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

题目要求:

通过自制54张扑克牌,发给3人,留下3张底牌,分别显示不同人的手牌与底牌达到斗地主的游戏需求

算法思想:

4种花色,每种13张牌,使用for嵌套循环,产生52张牌再加入大小王

创建牌与花色:

String[] hs = {"♠", "♥", "♣", "♦"};String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

为了方便表示与操作每一张牌,可以用1--54的数字代替54种牌,通过此思路:可以使用HashMap类,使得牌与数字一 一对应。

Map<Integer, String> pokers = new HashMap<>(); //双列表实现数字与牌相对应List<Integer> list = new ArrayList<>(); //单表存数字int n = 0;//用来计算

考虑当分到牌后使其排列方便,可在设置数字对应时,进行特殊操作:

使得花色作为内循环,数字作为内循环
这样:在显示牌面时,更符合用户需求

for (String s : number) {    for (String h : hs) {        String poker = h + s;  //组合得到52张牌        num++;  //计数        pokers.put(num, poker);  //双列表,实现大小与数组对应        list.add(num);  //单列表,方便操作     }}

注:通过增强for循环来进行遍历

num++;
pokers.put(num, "小王"); //添加小王
list.add(num);
num++;
pokers.put(num, "大王"); //添加大王
list.add(num);

调用Collections.shuffle(list)方法,使单列表打乱顺序,使用 int i 进行遍历,留下最后三张作为底牌,再将剩余的51张牌分给三人。因为 i 对 3进行取模(即 % 运算)对应3种情况,所以将这三种情况作为给三人发牌的表准。

List<Integer> a = new ArrayList<>(); //用户aList<Integer> b = new ArrayList<>(); //用户bList<Integer> c = new ArrayList<>(); //用户cList<Integer> d = new ArrayList<>(); //底牌        Collections.shuffle(list); //使得单列表乱序        for (int i = 0; i < list.size(); i++){ //list列表遍历,发牌            if (i >= list.size() - 3){                d.add(list.get(i)); //后3张,作为底牌            }            else {  //i对3进行取模,对应3种情况发牌                if ((i % 3) ==0){                    a.add(list.get(i));                }else if ((i % 3) == 1){                    b.add(list.get(i));                }else if ((i % 3) ==2){                    c.add(list.get(i));                }            }}

将三人的到的单列表数字使用Collections.sort(list); 进行排序,再将其与双列表进行对应,通过遍历三人的单列表将其对应的双列表也实现输出

public static void lookpokers(List<Integer> list , Map<Integer, String> map){ //使用方法,查看手牌        Collections.sort(list);  //按次序排列扑克        for (Integer o : list) { //通过单列表调用,双列表            System.out.print(map.get(o) + " ");        }        System.out.println();    }

代码:

import java.util.*; public class Test {    public static void main(String[] args) {        Map<Integer, String> pokers = new HashMap<>();        List<Integer> list = new ArrayList<>();        String[] hs = {"♠", "♥", "♣", "♦"}; //四种花色        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//13张牌        int num = 0;        for (String s : number) {            for (String h : hs) {                String poker = h + s;  //组合得到52张牌                num++;  //计数                pokers.put(num, poker);  //双列表,实现大小与数组对应                list.add(num);  //单列表,方便操作            }        }        num++;        pokers.put(num, "小王"); //添加小王        list.add(num);        num++;        pokers.put(num, "大王"); //添加大王        list.add(num);        List<Integer> a = new ArrayList<>(); //用户a        List<Integer> b = new ArrayList<>(); //用户b        List<Integer> c = new ArrayList<>(); //用户c        List<Integer> d = new ArrayList<>(); //底牌        Collections.shuffle(list); //使得单列表乱序        for (int i = 0; i < list.size(); i++){ //list列表遍历,发牌            if (i >= list.size() - 3){                d.add(list.get(i)); //后3张,作为底牌            }            else {  //i对3进行取模,对应3种情况发牌                if ((i % 3) ==0){                    a.add(list.get(i));                }else if ((i % 3) == 1){                    b.add(list.get(i));                }else if ((i % 3) ==2){                    c.add(list.get(i));                }            }        }        System.out.print("a:");        lookpokers(a, pokers);        System.out.print("b:");        lookpokers(b, pokers);        System.out.print("c:");        lookpokers(c, pokers);        System.out.print("底牌:");        lookpokers(d, pokers);    }     public static void lookpokers(List<Integer> list , Map<Integer, String> map){ //使用方法,查看手牌        Collections.sort(list);  //按次序排列扑克        for (Integer o : list) { //通过单列表调用,双列表            System.out.print(map.get(o) + " ");        }        System.out.println();    }}

结果展示:

第一次:

Java中如何实现斗地主游戏

第二次:

Java中如何实现斗地主游戏

结果不同达到随机效果。

感谢各位的阅读!关于“Java中如何实现斗地主游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯