Java集合案例:斗地主游戏开发

news2025/1/16 15:47:43
  • 斗地主游戏的开发
  • 业务需求分析
  • 业务:共有54张牌
  • 点数:“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”,“A”,“2”
  • 花色:“♠”,“❤”,“♣”,“♦”
  • 大小王:“👲”,“🃏”
    *点数分别要组合成4种花色,大小王各一张
  • 斗地主:发出51张牌,剩下3张作为底牌

主程序

/**
 * 斗地主游戏的开发
 * 业务需求分析
 * 业务:共有54张牌
 * 点数:"3","4","5","6","7","8","9","10","J","Q","K","A","2"
 * 花色:"♠","❤","♣","♦"
 * 大小王:"👲","🃏"
 *点数分别要组合成4种花色,大小王各一张
 * 斗地主:发出51张牌,剩下3张作为底牌
 */
public class Gamedome {
    public static void main(String[] args) {
        //1.牌类
        //2.房间
        Room m = new Room();
        //3.启动游戏
        m.start();
    }
}

先创建一个牌类

public class Card {
    private String number;
    private String color;
    //每张牌是存在大小的
    private int size;//可以用0  1  2.......来比较大小

    public Card() {
    }

    public Card(String number, String color, int size) {
        this.number = number;
        this.color = color;
        this.size = size;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    @Override
    public String toString() {
        return color + number ;
    }
}

创建房间类

import java.util.*;

public class Room {
    //必须要有一副牌
    private List<Card> allCards =new ArrayList<>();

    public Room(){
        //1.做出54张牌,存入到集合allCards
        //a.点数:个数确定了,类型确定了
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //b:花色
        String[] colors ={"♠","❤","♣","♦"};
        int size =0;//表示每张牌的大小
        //c.遍历点数,再遍历花色,组织牌
        for (String number : numbers) {
            //number = "3"
            size++;//没遍历一次 size+1,来控制大小
            for (String color : colors) {
                //得到一张牌
                Card c = new Card(number,color,size);
                allCards.add(c);//存入牌
            }
        }
        //单独存入小  大  王 ,先创建两个牌对象
        Card c1 = new Card("","🃏",++size);//小王
        Card c2 = new Card("","👲",++size);//大王
        Collections.addAll(allCards,c1,c2);//将牌放入集合中去
        System.out.println("新牌"+allCards);
    }

    //开始游戏
    public void start() {
        //1.洗牌
        Collections.shuffle(allCards);
        System.out.println("洗牌后"+ allCards);

        //2.发牌,首先要定义三个玩家 选用 List(ArrayList) 集合
        List<Card> L = new ArrayList<>();
        List<Card> C = new ArrayList<>();
        List<Card> T = new ArrayList<>();

        //3.正式发牌给三个玩家 ,依次发出51张牌,剩余三张要作为底牌
        for (int i = 0; i < allCards.size()-3; i++) {
                Card c = allCards.get(i);
                //判断发牌
            if (i % 3==0){
                //请L摸牌
                L.add(c);
            }else if (i % 3==1){
                //请C摸牌
                C.add(c);
            }else if (i % 3==2){
                //请T摸牌
                T.add(c);
            }
        }

        //3.对三个玩家的牌进行排序
        sortCards(L);
        sortCards(C);
        sortCards(T);
        //4.看牌
        System.out.println("L的牌"+L);
        System.out.println("C的牌"+C);
        System.out.println("T的牌"+T);
        List<Card> lastThreeCards = allCards.subList(allCards.size()-3,allCards.size());//51 52 53
        System.out.println("底牌" + lastThreeCards);
        C.addAll(lastThreeCards);
        sortCards(C);//抢到地主后还要再排序
        System.out.println("C抢到地主后"+ C);
        }

    private void sortCards(List<Card> cards) {
        Collections.sort(cards, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
               // return o1.getSize()-o2.getSize();//升序排
                return o2.getSize()-o1.getSize();//降序排
            }
        });
    }


}


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【⑭MySQL | 数据类型(二)】字符串 | 二进制类型

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL字符串 | 二进制类型类型的分享✨ 目录 前言5 字符串类型6 二进制类型总结 5 字符串类型 字符串类型用来存储字符串数据&#xff0c;还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比…

java八股文面试[java基础]——如何实现不可变的类

知识来源&#xff1a; 【23版面试突击】如何实现不可变的类&#xff1f;_哔哩哔哩_bilibili 【2023年面试】怎样声明一个类不会被继承&#xff0c;什么场景下会用_哔哩哔哩_bilibili

cnpm安装时总是报错

使用npm下载cnpm安装时总是报错 解决办法&#xff1a; 1、执行&#xff1a;npm config get proxy npm config get https-proxy 如果返回值不为null&#xff0c;继续执行&#xff1a; &#xff08;这一步很重要&#xff0c;一定要保证两个命令的返回值都为null,话说回来&#xf…

TypeScript三种特殊类型

1.any类型 说明&#xff1a;any类型代表着可以赋值任意类型 let nickname:any"王二"nickname15nicknametruenicknameundefinednicknamenullnickname{}2.unknown类型 说明&#xff1a;类似any类型&#xff1b;只是不能赋值到其它类型上&#xff1b;除了any和known。…

java八股文面试[java基础]——字节码

字节码技术应用 字节码技术的应用场景包括但不限于AOP&#xff0c;动态生成代码&#xff0c;接下来讲一下字节码技术相关的第三方类库&#xff0c;第三方框架的讲解是为了帮助大家了解字节码技术的应用方向&#xff0c;文档并没有对框架机制进行详细分析&#xff0c;有兴趣的可…

使用Aircrack-ng进行无线网络破解

Aircrack-ng是一款流行的无线网络渗透测试工具&#xff0c;主要用于密码破解和网络分析。但是&#xff0c;请注意&#xff0c;仅在有合法授权的情况下使用这些工具。 以下是一个使用Aircrack-ng进行无线网络破解的示例&#xff0c;以及一些步骤和注意事项&#xff1a; 步骤&a…

2023年京东睡眠经济市场数据分析(京东商品数据)

如今&#xff0c;伴随快节奏的生活&#xff0c;越来越多的人饱受睡眠问题的影响。同时&#xff0c;伴随现代化的发展&#xff0c;睡眠障碍群体或许会达到新的体量&#xff0c;而日趋增加的失眠人群自然而然低催生了助眠产品的增长。随着人们对健康睡眠重视的程度不断提高&#…

Dubbo 开发入门

一、通过模板生成项目脚手架 Dubbo Initializer 可用来快速生成 Java 项目脚手架&#xff0c;帮助简化微服务项目搭建、基本配置、组件依赖管理等。 Initializer 仍在持续更新中&#xff0c;更多 Dubbo Feature 的支持将会陆续发布。 选择 Dubbo 版本 Initializer 将使用 dub…

05:TIM定时器功能------输入捕获功能

目录 1:简历 2:频率测量 3:主从触发模式 4:结构 A:输入捕获功能测频率 1:连接图 2:函数介绍 3:测周法 4 输入捕获模式基本结构 5:步骤 6:代码 B :PWMI模式测频率占空比 1: 连接图 2:PWMI模式的结构 3:函数介绍 4:步骤 5:代码 1:简历 IC&#xff08;Input Capture…

JDBC概述

JDBC概述 核心JDBC组件 JDBC驱动程序连接声明结果集 常见JDBC用例 查询数据库查询数据库元数据更新数据库执行事务 JDBC组件交互图 JDBC API由以下核心部分组成&#xff1a; JDBC驱动程序连接声明结果集 有四个基本的JDBC用例&#xff0c;大多数JDBC工作都围绕这些用例发展…

微信小程序——van-field中的left-icon属性自定义

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Spring 学习源码的基础 核心原理与核心概念

文章目录 核心原理AnnotationConfigApplicationContextIoC 容器加载流程Spring 中如何创建一个对象Bean 的创建过程 (生命周期)单例 原型推断构造方法依赖注入AOP 动态代理判断是否需要 AOP 的大致流程CGLib 做 AOP 的大致流程事务事务代理对象执行方法的流程事务注解排至失效的…

Docker安装并配置Node-Exporter

Linux下安装Docker请参考&#xff1a;Linux安装Docker Node-Exporter简介 Exporter是Prometheus的指标数据收集组件。它负责从目标Jobs收集数据&#xff0c;并把收集到的数据转换为Prometheus支持的时序数据格式。 和传统的指标数据收集组件不同的是&#xff0c;他只负责收集…

Linux的Man Page知识记录

Man&#xff08;short for manual&#xff09; Page是Unix和Linux操作系统中的一个重要文档&#xff0c;提供命令、函数、系统调用等的详细介绍和使用说明。它是以纯文本的形式出现&#xff0c;通常在终端&#xff08;terminal&#xff09;中使用man命令访问。Man Page按照章节…

语言、习俗与成功:海外网红营销的文化敏感性

随着全球互联网的普及和社交媒体的兴起&#xff0c;海外网红营销正成为越来越多品牌和企业的选择。然而&#xff0c;要在海外市场取得成功&#xff0c;单纯的翻译内容和机械式的推广已经远远不够&#xff0c;文化敏感性成为海外网红营销的关键。本文Nox聚星将深入探讨语言、习俗…

什么是Spring框架?Spring有什么优势?Spring核心模块有哪些?

简介 Spring 是一个以 IoC 和 AOP 为基础的Java EE轻量级开源框架&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。 广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spr…

Unity编辑器扩展:提高效率与创造力的关键

Unity编辑器扩展&#xff1a;提高效率与创造力的关键 前言 一、理解Unity编辑器二、扩展Unity编辑器的意义三、扩展Unity编辑器的必要性四、Unity编辑器的扩展方式五、扩展Unity编辑器的步骤六、Unity编辑器扩展的应用案例七、总结 前言 Unity是一款广泛使用的游戏开发引擎&am…

管理三个层级,你是哪一层管理者?

大家好&#xff0c;我是老原。 “什么算是一个好的项目经理&#xff1f;” “我不知道自己现在的水平怎么样&#xff0c;有没有判断标准&#xff1f;” 其实这些问题的本质是&#xff1a;我想提升&#xff0c;该朝着哪个方向去努力&#xff1f; 很多人会说&#xff0c;能力…

Vinted、PoshMark、Carousell这些海外二手跨境电商平台如何运营?

相信大家都知道“闲鱼”&#xff0c;二手交易平台一般来说入驻成本低&#xff0c;运营操作简单&#xff0c;平台流量多&#xff0c;因此也非常适合小型卖家入驻。那么海外的“闲鱼”有哪些呢&#xff1f;如何运营&#xff1f; 小编为大家找到了国外热门这些平台&#xff0c;有…

【芯片设计封装与测试】芯片测试目的、方法、分类及案例

目录 1.芯片测试概述&#xff08;目的、方法&#xff09; 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关…