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

  • 斗地主游戏的开发
  • 业务需求分析
  • 业务:共有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();//降序排
            }
        });
    }


}


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

C++设计模式(工厂模式)

文章目录 前言一、什么是工厂模式二、简单工厂模式三、简单工厂模式优点和缺点四、简单工厂适用场景五、简单工厂类的使用总结 前言 本篇文章正式带大家来学习C中的设计模式&#xff0c;这篇文章主要带大家学习工厂模式。 一、什么是工厂模式 工厂模式&#xff08;Factory P…

SpringCloud/SpringBoot多模块项目中配置公共AOP模块实现打印子模块Controller所有请求参数与日志

项目中遇到多个模块需要打印Controller请求日志&#xff0c;在每个模块里面加AOP并且配置单独的切面笔者认为代码冗余&#xff0c;于是乎就打算把AOP日志打印抽离成一个公共模块&#xff0c;谁想用就引入Maven坐标就行。 定义公共AOP模块 并编写AOP工具 AOP模块pom.xml如下 &…

Elasticsearch 入门安装

1.Elasticsearch 是什么 The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash&#xff08;也称为 ELK Stack&#xff09;。能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。 Elaticsearch&#xff0c;简称为…

非凸联合创始人李佐凡受邀出席复旦DSBA项目座谈会

8月17日&#xff0c;非凸科技联合创始人&CTO李佐凡受邀参加复旦管院数据科学与商业分析专业硕士&#xff08;DS&BA&#xff09;项目发展座谈会&#xff0c;与学校教授、老师在生源背景、课程教学、职业发展、学生培养和企业合作方面进行深入交流&#xff0c;旨在更好地…

大数据课程K6——Spark的Shuffle详解

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的定义&&特点&&目的&&优缺点; ⚪ 掌握Spark的相关参数配置; ⚪ 掌握Hadoop的插件配置; 一、Spark Shuffle详解 1. 概述 Shuffle,就是洗牌。之所以…

ReoGrid.NET集成到winfrom

ReoGrid一个支持excel操作的控件,支持集成到任何winfrom项目内。 先看效果图: 如何使用&#xff1a; 使用ReoGrid自带excel模版设计工具先设计一个模版,设计器如下&#xff1a; 具体例子看官方文档 代码示例如下&#xff1a; var sheet reoGridControl1.CurrentWorksheet; …

虚拟展览有什么优势?设计虚拟展览时需注意什么?

引言&#xff1a; 在这个数字化飞速发展的时代&#xff0c;虚拟展览作为一种崭新的展示方式&#xff0c;正逐渐走入人们的视野。虚拟展览&#xff0c;顾名思义&#xff0c;是通过数字技术将传统的展览呈现方式转变为虚拟的线上体验。 一、什么是虚拟展览 虚拟展览是一种以数…

Ceres Solver 入门

1. Ceres Solver 是什么 Ceres 可以解决以下形式的边界约束鲁棒化非线性最小二乘问题&#xff1a; 给定初始值&#xff0c;通过优化算法&#xff0c;得到最优解。 其中&#xff0c; f i f_i fi​是CostFunction&#xff0c;也叫误差函数&#xff0c;或者代价函数。 ρ i \rho…

设计模式原则及分类

一、概念 设计模式&#xff1a;&#xff08;Design pattern&#xff09;是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的一系列套路。用来提高代码可复用性、可维护性、可读性、稳健性以及安全性。 二、设计模式原则&#xff1a; 单一职责原则&#xff08;Single …

vue学习之hello world

依赖引入 <script src"https://unpkg.com/vue2.6.10/dist/vue.js"></script>Hello world 实现 <html><head><style></style></head><body><script src"https://unpkg.com/vue2.6.10/dist/vue.js">…

【MySQL】2、MySQL数据库的管理

常用 describe user; Field:字段名称 Type:数据类型 Null :是否允许为空 Key :主键 Type:数据类型 Null :是否允许为空key :主键 Default :默认值 Extra :扩展属性&#xff0c;例如:标志符列&#xff08;标识了种子&#xff0c;增量/步长&#xff09;1 2 id&#xff1a;1 3 5 …

lwIP更新记10:IP 冲突检测

lwip-2.2.0-rc1 版本于 2023 年 6 月 29 日发布&#xff0c;带来了我期盼已久的 IPv4 冲突检测 功能。 lwip-2.2.0-rc1 版本重新回归了 master 分支&#xff08;主分支&#xff09;&#xff0c;不再使用单独的稳定分支。 master 分支 是一个 Git&#xff08;版本控制程序&…

AWS 提示证书签名过期无法自动更新

如果域名没有通过验证的话&#xff0c;证书的过去是没有办法自动更新的。 验证的方式也非常简单&#xff0c;通过下面的配置&#xff0c;把 CNAME添加到你的域名上面&#xff0c;AWS 就可会自动完成验证了。 当添加完成后&#xff0c;AWS 验证需要的时间大致在 30 分钟到 1 个…

春秋云镜 :CVE-2020-21650(MyuCMS后台rce)

一、题目 靶标介绍&#xff1a; MyuCMS开源内容管理系统,采用ThinkPHP开发而成的社区商城聚合&#xff0c;插件&#xff0c;模板&#xff0c;轻便快捷容易扩展 其2.2版本中admin.php/config/add方法存在任意命令执行漏洞. 进入题目&#xff1a; exp&#xff1a; url/index.p…

推荐一款好用的开源视频播放器(免费无广告)

mpv是一个自由开源的媒体播放器&#xff0c;它支持多种音频和视频格式&#xff0c;并且具有高度可定制性。mpv的设计理念是简洁、高效和功能强大。 软件特点&#xff1a; 1. 开源、跨平台。可以在Windows\Linux\MacOS\BSD等系统上使用&#xff0c;完全免费无广告。Windows版解压…

k8s 常用命令(四)

12、删除pod中的nginx服务及service [rootmaster ~]# kubectl delete deployment nginx -n kube-public [rootmaster ~]# kubectl delete svc -n kube-public nginx-service 13、查看endpoint的信息 [rootmaster ~]# kubectl get endpoints 14、修改/更新&#xff08;镜像、…

传感网应用开发1+X实训室建方案

一、概述 1.1建设背景 从院校实际教学情况与人才培养计划为出发点&#xff0c;贯彻传感网应用开发1X实训室职业技能等级标准&#xff0c;充分考虑传感网应用开发1X实训室从业人员的职业发展路径与成长路径&#xff0c;以职业素养、职业技能、知识水平为主要框架结构&#xff…

大型企业是否有必要进行数字化转型?

在数字化、信息化、智能化蓬勃发展的今天&#xff0c;初创公司可以很轻易的布局规划数字化发展的路径。而对于大型企业而言&#xff0c;其已经形成了较为成熟稳固的业务及组织架构&#xff0c;是否还有必要根据自身行业发展特点寻求数字化转型&#xff1f;&#xff08;比如制造…

[ACL2023] Exploring Lottery Prompts for Pre-trained Language Models

Exploring Lottery Prompts for Pre-trained Language Models 文章链接 清深的工作&#xff0c;比较有意思的一篇。作者先给出假设&#xff0c;对于分类问题&#xff0c;在有限的语料空间内总能找到一个prompt让这个问题分类正确&#xff0c;作者称之为lottery prompt。为此&…