当前位置:

首页 > 编程开发 > Java怎么实现斗地主与猜数字游戏

Java怎么实现斗地主与猜数字游戏

斗地主小游戏之洗牌发牌任务描述编写一个斗地主发牌洗牌的程序,要求按照斗地主的规则完成洗牌发牌的过程,牌面由花色色和数字(包括J,Q,K,A字母)组成,花色有红桃,黑桃,方块,梅花组成。还设有大王和小王。将这54张牌的顺序打乱,有三位玩家参与游戏,每人轮流一次摸一张牌,剩余的三张作为底牌,程序结束,打印出每人手中的纸牌和底牌。运行结果任务目标学会分析"斗地主小游戏之洗牌发牌"程序的实现思路。能够根据思路独立完成"斗地主小游戏之洗牌发牌"程序的代码编写,编译及运行。掌握ArrayList和HashMap集合的

本文目录

    斗地主小游戏之洗牌发牌

    任务描述

    编写一个斗地主发牌洗牌的程序,要求按照斗地主的规则完成洗牌发牌的过程,牌面由花色色和数字(包括J,Q,K,A字母)组成,花色有红桃,黑桃,方块,梅花组成。还设有大王和小王。将这54张牌的顺序打乱,有三位玩家参与游戏,每人轮流一次摸一张牌,剩余的三张作为底牌,程序结束,打印出每人手中的纸牌和底牌。

    运行结果  

    Java怎么实现斗地主与猜数字游戏 

    任务目标

    • 学会分析"斗地主小游戏之洗牌发牌"程序的实现思路。

    • 能够根据思路独立完成"斗地主小游戏之洗牌发牌"程序的代码编写,编译及运行。

    • 掌握ArrayList和HashMap集合的特点以及增强for循环的使用。

    实现思路

    ①要实现纸牌程序,首先要在程序中添加54张牌,这些牌包括红桃,黑桃,梅花,方块各13张,加上大王和小王。

    ②将花色集合和数字集合这两个集合进行嵌套循环,将花色与数字组合,形成52张牌,并且赋予编号,将组合后的牌放入HashMap集合中,集合的key值是编号,value值是组装完成的纸牌,还有大王和小王,由于组装规则不一致,需要单独使用add()方法将这两张纸牌加入到HashMap集合中。

    ③创建一个数字集合,用这个数字集合来替代纸牌完成洗牌和发牌的操作,由于一共有54张牌,所以创建集合的范围为0-53。

    ④可以使用Collections类的shuffle()方法完成打乱数字集合的操作,实现洗牌的效果。由于只有三个人,所以可以使用for循环,通过将数字与3取余的方法,将代表不同纸牌的数字分配给不同的人和底牌,实现发牌效果。

    ⑤洗牌发牌完成之后,可通过Collections类的sort()方法完成排序,之后通过增强for循环HashMap集合,根据数字查找对应的纸牌字符串,并存入新创建的字符串集合中,最后展示字符串集合。

    实现代码

    package Swing;
     import java.util.ArrayList;
     import java.util.Collection;
     import java.util.Collections;
     import java.util.HashMap;
     public class DoudiZhu {
         public static void main(String[]args) {
             //准备花色
             ArrayListcolor=new ArrayList();
             color.add("黑桃");
             color.add("红桃");
             color.add("方块");
             color.add("梅花");
             //准备数字,用列表将纸牌从大到小排列
             ArrayListnumber=new ArrayList();
             for(int i=3;i<=10;i++){
                 number.add(i+"");
             }
             number.add("J");
             number.add("Q");
             number.add("K");
             number.add("A");
             number.add("2");
             //定义一个map集合,用来将数字与每一张纸牌进行对应
             HashMapmap=new HashMap();
             //纸牌编号
             int index=0;
             //循环纸牌数字
             for(String thisNumber:number){
                 //循环纸牌花色
                 for(String thisColor:color){
                     //将花色与数字组合,形成52张牌,并赋予编号
                     map.put(index++,thisColor+thisNumber);
                 }
             }
             map.put(index++,"小王");
             map.put(index++,"大王");
             //创建0-53的数字集合代表54张牌
             ArrayListcards=new ArrayList();
             for(int i=0;i<=53;i++){
                 cards.add(i);
             }
             //洗牌,使用Collections工具类的shuffle()方法
             Collections.shuffle(cards);
             //创建三个玩家和底牌
             ArrayListiPlayer=new ArrayList();
             ArrayListiPlayer2=new ArrayList();
             ArrayListiPlayer3=new ArrayList();
             ArrayListiSecretCards=new ArrayList();
             //遍历这副洗好的牌,遍历的过程中,将牌发到三个玩家和底牌中
             for(int i=0;i=51){
                     //留取三个底牌
                     iSecretCards.add(cards.get(i));
     
                 }else{
                     if(i%3==0){//与3取余为0的发给玩家1
                         iPlayer.add(cards.get(i));
                     }else if(i%3==1){//与3取余为1的发给玩家2
                         iPlayer2.add(cards.get(i));
                     }else {//剩余的牌发给玩家3
                         iPlayer3.add(cards.get(i));
                     }
                 }
             }
             //对每个人手中的牌进行排序,使用的使Collections工具类中的sort()方法
             Collections.sort(iPlayer);
             Collections.sort(iPlayer2);
             Collections.sort(iPlayer3);
             ArrayListsPlayer=new ArrayList();
             ArrayListsPlayer2=new ArrayList();
             ArrayListsPlayer3=new ArrayList();
             ArrayListsSectCards=new ArrayList();
             //循环主键,从map中获取纸牌
             for (Integer key:iPlayer){
                 sPlayer.add(map.get(key));
             }
             for (Integer key:iPlayer2){
                 sPlayer2.add(map.get(key));
             }
             for (Integer key:iPlayer3){
                 sPlayer3.add(map.get(key));
             }
             for (Integer key:iSecretCards){
                 sSectCards.add(map.get(key));
             }
             //将分发的牌显示出来
             System.out.println("玩家1:"+sPlayer);
             System.out.println("玩家2:"+sPlayer2);
             System.out.println("玩家3:"+sPlayer3);
             System.out.println("底牌:"+sSectCards);
         }
     }

    猜数字游戏

    任务描述

    编写一个猜数字游戏,这个游戏就是"你出个数字,我来猜",程序后台预先生成一个0-9的随机数,用户键盘录入一个所猜的数字,如果输入的数字与后台预先生成的数字相同,则表示猜对了,这时,程序会打印出"恭喜,答对了",如果不相同,则比较输入的数字和后台预先生成的数字的大小,如果大了,打印"sorry,你猜大了!";如果小了,会打印"sorry,你猜小了";如果一直猜错,则游戏一直进行下去,直到数字猜对为止。

    运行结果

    Java怎么实现斗地主与猜数字游戏  

    任务目标

    • 学会分析"猜数字游戏"程序的实现思路。

    • 根据思路独立完成"猜数字游戏"的源代码编写,编译和运行。

    • 掌握在程序中使用if选择结构和while循环结构语句进行运算操作。

    实现思路

    ①要实现这个功能,首先程序要在后台预先生成一个0-9的随机数,生成随机数可以使用Random类中的nextInt(int n)方法,其具体的定义如下:

     public int nextInt(int n)

    ②要使用键盘输入所猜的数字,可以使用Scanner类,可以让用户从键盘中输入数字。

     Scanner sc=new Scanner(System.in);
     int i=sc.nextInt();

    ③输入数字后,需要比较键盘输入的数字和后台预先生成的数字,由于猜数字并非一定一次成功,很可能是多次进行,因此可以通过while循环使程序能够多次从键盘输入,每次输入都进行猜数字对错判断。如果猜对了,跳出循环,输出"恭喜,你答对了!",游戏结束。

    ④如果猜错,这时使用if....else语句判断,将错误分为猜大了和猜小了两种结果。如果猜大了,打印"sorry,你猜大了!"继续下一次循环;如果猜小了,打印"sorry,你猜小了!"继续下一次循环。根据结果,给出提示,接着继续猜数字,游戏继续。

    实现代码

     package math;
     import java.util.Random;
     import java.util.Scanner;
     public class CaishuZi {
         public static void main(String[] args) {
             int randomNumber = new Random().nextInt(10);
             System.out.println("随机数已经生成");
             System.out.println("请输入你所猜的数字");
             Scanner sc =new Scanner(System.in);
             int enterNumber =sc.nextInt();
             //通过while循环,进行猜数字对错判断
             //猜对,跳出循环,游戏结束
             while(enterNumber!=randomNumber){
                 //猜错了,根据结果,给出提示,接着猜数字,游戏继续
                 if(enterNumber>randomNumber){
                     //猜大了给出的提示
                     System.out.println("sorry,你猜大了");
                 }else{
                     //猜小了,给出的提示
                     System.out.println("sorry,你猜小了");
                 }
                 //输入猜的数字
                 System.out.println("请输入你猜的数字");
                 enterNumber = sc.nextInt();
             }
             System.out.println("恭喜你,答对了!");
         }
     }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    上一篇: MySQL如何实现JDBC
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。