当前位置: 首页 > news >正文

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.lryc.cn/news/609465.html

相关文章:

  • 亚马逊撤离Google购物广告:重构流量生态的战略博弈
  • 编译 Paddle 遇到 flashattnv3 段错误问题解决
  • 37. line-height: 1.2 与 line-height: 120% 的区别
  • YAML文件
  • Vue Router快速入门
  • 高精度实战:YOLOv11交叉口目标行为全透视——轨迹追踪×热力图×滞留分析(附完整代码)
  • 深度学习TR3周:Pytorch复现Transformer
  • 第三阶段—8天Python从入门到精通【itheima】-143节(pyspark实战——数据计算——flatmap方法)
  • 大型语言模型落地应用全景指南:微调、提示工程、多模态与企业级解决方案
  • Perl 面向对象编程深入解析
  • 如何计算卷积层的计算量?从参数到公式的详细推导
  • PPT自动化 python-pptx - 11 : 备注页 (Notes Slides)
  • JUCE VST AI 开源
  • 进程生命周期管理:从创建到终止的完整逻辑
  • 解锁高并发LLM推理:动态批处理、令牌流和使用vLLM的KV缓存秘密
  • Oracle ASH的手册
  • Git简易教程
  • javacc实现简单SQL解析器
  • JSqlParser学习笔记 快速使用JSqlParser
  • [特殊字符] Ubuntu 下 MySQL 离线部署教学(含手动步骤与一键脚本)
  • 虚拟机中查看和修改文件权限
  • SelectDB:新一代实时数仓的核心引擎与应用实战
  • Python day34
  • Druid学习笔记 03、Druid的AstNode类详解与其他产品测试体验
  • 阿里云-通义灵码:解锁云原生智能开发新能力,让云开发更“灵”~
  • 【Linux操作系统】简学深悟启示录:进程初步
  • [spring-cloud: @LoadBalanced @LoadBalancerClient]-源码分析
  • DevOps平台大比拼:Gitee、Jenkins与CircleCI如何选型?
  • 集成电路学习:什么是BLE Mesh低功耗蓝牙网络
  • AI产品经理手册(Ch6-8)AI Product Manager‘s Handbook学习笔记