Java基础-斗地主游戏

目录

案例要求:​

实现思路:

代码:

Main启动类:

Card实体类:

Room操作类:

总结:


案例要求:

实现思路:

1构造卡牌,细节:实体类另设一个int类型变量表示大小,后面为了实现斗地主牌降序或者升序排序

2打乱卡牌的顺序和发牌

3选定大小王

4实现对牌顺序

5展示玩家的卡牌即可

代码:

Main启动类:

import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或
// 点击装订区域中的 <icon src="AllIcons.Actions.Execute"/> 图标。
public class Main {static Scanner sc = new Scanner(System.in);public static void main(String[] args) {Room room = new Room();room.start();}
}

Card实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Objects;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Card implements Comparable<Card> {private String number;private String color;private int size;@Overridepublic String toString() {return number + color;}@Overridepublic int compareTo(Card o) {return o.size-size;}
}

Room操作类:

import java.util.*;
import java.util.stream.Collectors;public class Room {private List<Card> list=new ArrayList<>();{String [] colors={"♥","♠","♣","♦"};String [] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};for (int i = 0; i < numbers.length; i++){for(int j = 0; j < colors.length; j++){list.add(new Card(numbers[i],colors[j],i));}}list.add(new Card("","\uD83C\uDCCF",13));list.add(new Card("","\uD83E\uDDD1",14));}Scanner sc = new Scanner(System.in);public void start(){System.out.println("洗牌前");System.out.println(list);System.out.println("洗牌后");
//        使用集合类工具打乱卡牌顺序Collections.shuffle(list);System.out.println(list);
//        发牌,三个玩家Map<String,List<Card>> players=new HashMap<>();List<Card> p1=new ArrayList<>();players.put("张三",p1);List<Card> p2=new ArrayList<>();players.put("李四",p2);List<Card> p3=new ArrayList<>();players.put("王五",p3);for(int i=0;i<list.size()-3;i++){if(i%3==0){p1.add(list.get(i));} else if (i%3==1) {p2.add(list.get(i));}else{p3.add(list.get(i));}}System.out.print("底牌是  ");for (int i = list.size()-3; i < list.size(); i++) {System.out.print(list.get(i)+" ");}System.out.println();System.out.print("玩家  ");for (String name : players.keySet()){System.out.print(name+" ");}System.out.print("请决定谁是地主(姓名)");String name=sc.next();for(Map.Entry<String,List<Card>> entry:players.entrySet()) {if (entry.getKey().equals(name)) {List<Card> cards = entry.getValue();cards.addAll(list.stream().skip(51).toList());}}
////TODO或者
//            if(entry.getKey().equals(name)){
//                entry.getValue().addAll(list.stream().skip(51).collect(Collectors.toList()));
//            }//        对拍顺序
//        TODO法一
//            sortCards(p1);
//            sortCards(p2);
//            sortCards(p3);
//        TODO法二Collections.sort(p1);Collections.sort(p2);Collections.sort(p3);//        看牌
/*  //TODO遍历方法一:
List<String> names=players.entrySet().stream().map(Map.Entry::getKey).toList();for(int i=0;i<names.size();i++){System.out.println(names.get(i)+"的牌是:");List<Card> cards=players.get(names.get(i));for(int j=0;j<cards.size();j++){System.out.print(cards.get(j)+"  ");}System.out.println();}*/for(Map.Entry entry:players.entrySet()){System.out.println(entry.getKey()+"的牌是:");List<Card> cards=(List<Card>) entry.getValue();for(Card card:cards){System.out.print(card+" ");}System.out.println();}}//TODO法一;哪用哪里构造比较器
//    private void sortCards(List<Card> p1) {
//        Collections.sort(p1, new Comparator<Card>() {
//            @Override
//            public int compare(Card o1, Card o2) {
//
//                return o1.getSize()-o2.getSize();
//            }
//        });
//    }////    TODO简化版的
//    private void sortCards(List<Card> p1) {
//        Collections.sort(p1, (o1, o2) -> o1.getSize()-o2.getSize());
//    }
}


总结:

本文展示了一个Java实现的简单扑克牌游戏程序。程序主要包含三个类:Main启动类、Card实体类(使用Lombok简化代码)和Room操作类。程序实现了洗牌、发牌、选择地主、排序牌面和显示牌面等功能。通过Collections工具类实现洗牌和排序,使用HashMap存储玩家信息,并展示了多种遍历和排序的实现方式(包括Lambda表达式)。程序能正确处理54张牌(含大小王),支持3名玩家游戏,由用户指定地主并获得底牌。

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

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

相关文章

基于Java的AI/机器学习库(Smile、Weka、DeepLearning4J)的实用

基于Java和AI技术处理动漫视频 以下是一些基于Java和AI技术处理动漫视频(如《亚久斗》)的实用案例和实现方法,涵盖视频分析、风格转换、角色识别等方向。每个案例均提供技术思路和关键代码片段。 视频关键帧提取 使用OpenCV提取动漫视频中的关键帧,保存为图片供后续分析…

Qt 自动无法加载数据库为空

解决方式:main() 中设置QDir::setCurrent(QCoreApplication::applicationDirPath());即可 1、开机自启 void setAutoStart(bool enable) {QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);QS…

vue3指定设置了dom元素的ref但是为null问题

目录 问题场景 ​编辑问题原因 解决方案 问题场景 可以看到我指定了元素的ref&#xff0c;正常来说在组件挂载完毕后可以通过ref.value正常获取到dom元素 但是实际打印出来为null 问题原因 根本原因就是v-if指令的问题&#xff0c;v-if指令能够控制元素是否渲染&#xff0…

控制建模matlab练习08:根轨迹

此练习主要是&#xff1a;在matlab中绘制根轨迹的方法。 一、在matlab中建立对应系统 1、例如&#xff0c;对于如图的反馈系统。 2、其中开环传递函数G(s)、闭环传递函数Gcl(s)。3、因此&#xff0c;其闭环传递函数的根轨迹&#xff0c;就可以直接在matlab中绘制出来。 4、直接…

深度学习中的三种Embedding技术详解

提纲背景介绍特征类型与Embedding方法1. ID类特征的Embedding处理1.1 标准Embedding方法1.2 IdHashEmbedding方法2. 数值型特征的Embedding处理2.1 RawEmbedding方法三种Embedding方法对比总结实践建议总结背景介绍 在深度学习领域&#xff0c;Embedding&#xff08;嵌入&…

前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)

八、DOM 编程1&#xff0e;DOM&#xff08;Document Object Model&#xff09;,文档对象模型&#xff1a;将 HTM L文档进行模型化处理&#xff0c;形成一颗结构化的文档树&#xff0c;从而提供访问&#xff0c;修改文档的统一编程接口&#xff08;API&#xff09;&#xff0c;一…

Spring Boot 的事务注解 @Transactional 失效的几种情况

开发中我们经常会用到 Spring Boot 的事务注解&#xff0c;为含有多种操作的方法添加事务&#xff0c;做到如果某一个环节出错&#xff0c;全部回滚的效果。但是在开发中可能会因为不了解事务机制&#xff0c;而导致我们的方法使用了 Transactional 注解但是没有生效的情况&…

RabbitMQ面试精讲 Day 8:死信队列与延迟队列实现

【RabbitMQ面试精讲 Day 8】死信队列与延迟队列实现 文章标签 RabbitMQ,消息队列,死信队列,延迟队列,面试技巧,分布式系统 文章简述 本文是"RabbitMQ面试精讲"系列第8天&#xff0c;深入讲解死信队列与延迟队列的实现原理与实战应用。文章详细解析死信队列的触发…

快速掌握Python编程基础

干货分享&#xff0c;感谢您的阅读&#xff01;备注&#xff1a;本博客将自己初步学习Python的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握Python的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01;&#xff08;持续更新&a…

Redis数据库存储键值对的底层原理

前言Redis可以简单理解为是一个存储键值对的内存结构下面我们来看一下Redis使用什么数据结构来存储键值对的叭Redis键值对的存储原理Redis存储键值对的数据结构是哈希表存储键值对的运行机制因为Redis的数据存储类型是多种多样的,所以管理键值对的哈希表只是存储这个数据的地址…

全球化 2.0 | 中国香港教育机构通过云轴科技ZStack实现VMware替代

中国香港教育机构是非营利性组织。随着智慧教育升级与业务量激增&#xff0c;客户面临VMware持续的授权和维护成本带来总体拥有成本压力&#xff1b;部分业务仍运行在性能与扩展性不足的老旧物理服务器和 VMware 架构上&#xff0c;存在单点故障风险&#xff1b;跨校区物理机与…

C#中对于List的多种排序方式

在 C# 中给 List<AI> 排序&#xff0c;只要 明确排序规则&#xff08;比如按某个字段、某几个字段、或外部规则&#xff09;&#xff0c;就能用下面几种常见写法。下面全部基于这个示例类&#xff1a;public class AI {public int country; // 国家编号public int pr…