Java基础--用程序模拟打怪游戏

简介: Java基础--用程序模拟打怪游戏

模拟回合制打怪游戏

注:这是随机数的提升练习,不会生成随机数的点这里

一、问题具体描述

打怪游戏:玩家、怪物

玩家:血量值315

怪物:血量值500

玩家和怪物互砍。

玩家每次攻击怪物产生5\~8点伤害,怪物每次攻击玩家产生3\~5点伤害。

采用回合制(玩家和怪物互砍一刀为一个回合)。

一方挂掉,游戏结束。

要求:用程序模拟战斗过程。

二、分析

(1)可以定义两个变量,分别代表玩家(315)和怪物(500)。

(2)打斗过程是反复执行的,就要用到循环。

循环成立的条件:玩家和怪物都活着。

循环里面执行:玩家和怪物互砍。

(3)玩家攻击怪物

①生成玩家攻击力(5~8)。

②怪物血量值对应减少。

③输出:玩家攻击怪物,怪物掉了多少血量,还剩多少血量。

(4)怪物攻击玩家

①生成怪物攻击力(3~5)。

②玩家血量值对应减少。

③输出:怪物攻击玩家,玩家掉了多少血量,还剩多少血量。

(5)循环之后,判断玩家和怪物是否都活着,若都活着,就再循环,否则结束循环。

(6)游戏结束。

三、代码编写

(1)根据上面的分析,我们不难写出代码:

package Test1;

public class demo2 {
    public static void main(String[] args) {
        /* 打怪游戏 */
        //1、定义两个变量,分别赋值相应的血量值
        int w=315; //玩家
        int g=500; //怪物
        int i=1;//回合计数变量
        //2、用循环模拟打斗回合
        while(w>0 && g>0){ //循环条件是两者都活着
            //循环里面执行两者互砍
            System.out.println("----------第"+i+"回合----------");
            i++;//每一次回合之后,让回合计数变量加一
        //3、玩家攻击怪物
            //生成玩家攻击力(5~8)
            int wg=(int)(Math.random()*4)+5;
            //减少怪物血量值
            g-=wg;
            //输出结果
            System.out.println("玩家攻击怪物,怪物掉了"+wg+"点血量值,"+"还剩"+g+"点血量值");
        //4、怪物攻击玩家
            //生成怪物攻击力(3~5)
            int gw=(int)(Math.random()*3+3);
            //减少玩家血量值
            w-=gw;
            //输出结果
            System.out.println("怪物攻击玩家,玩家掉了"+gw+"点血量值,"+"还剩"+w+"点血量值");
        }
    }
}

看一下执行结果,会出一点小意外:

image-20220309173048383

我们会发现,最后一个回合中,怪物血量已经减少为负值了,即已经挂掉了。

但是最后还是攻击了玩家,“诈尸”了?

按照道理,本不应该再攻击玩家了。

(2)那刚才编写的代码究竟哪里出错了呢?

:cloud_with_lightning: 当我们减少怪物血量值之后,如果怪物已经挂了,此时,若并没有让循环停止,下面“怪物攻击玩家”的代码将继续执行。

image-20220309173732772

我们可以在“玩家攻击怪物”之后的代码添加一个判断“怪物是否已经挂掉”

        //判断怪物是否已经挂掉
        if(g<=0){
            //让循环停止,并输出结果
            System.out.println("怪物挂掉,玩家胜利!");
            break; //可以在循环中使用哦。在此处作用:停止循环继续执行
        }

同理,在“怪物攻击玩家”之后的代码添加一个判断“玩家是否已经挂掉”

        //判断玩家是否已经挂掉
        if(w<=0){
            //让循环停止,并输出结果
            System.out.println("玩家挂掉,怪物胜利!");
            break; 
        }

整体代码:

package Test1;

public class demo2 {
    public static void main(String[] args) {
        /* 打怪游戏 */
        //1、定义两个变量,分别赋值相应的血量值
        int w=315; //玩家
        int g=500; //怪物
        int i=1;//回合计数变量
        //2、用循环模拟打斗回合
        while(w>0 && g>0){ //循环条件是两者都活着
            //循环里面执行两者互砍
            System.out.println("----------第"+i+"回合----------");
            i++;//每一次回合之后,让回合计数变量加一
        //3、玩家攻击怪物
            //生成玩家攻击力(5~8)
            int wg=(int)(Math.random()*4)+5;
            //减少怪物血量值
            g-=wg;
            //输出结果
            System.out.println("玩家攻击怪物,怪物掉了"+wg+"点血量值,"+"还剩"+g+"点血量值");

            //判断怪物是否已经挂掉
            if(g<=0){
                //让循环停止,并输出结果
                System.out.println("怪物挂掉,玩家胜利!");
                break; //可以在循环中使用哦。在此处作用:停止循环继续执行
            }

        //4、怪物攻击玩家
            //生成怪物攻击力(3~5)
            int gw=(int)(Math.random()*3+3);
            //减少玩家血量值
            w-=gw;
            //输出结果
            System.out.println("怪物攻击玩家,玩家掉了"+gw+"点血量值,"+"还剩"+w+"点血量值");
            
            //判断玩家是否已经挂掉
            if(w<=0){
                //让循环停止,并输出结果
                System.out.println("玩家挂掉,怪物胜利!");
                break;
            }
        }
    }
}

运行结果:

image-20220309174715273

可以看到,怪物没有“诈尸”了!

显示结果正常。

(3)代码调整。

此时“break”有调整循环的作用。

当怪物或玩家的血量值<=0的时候,循环就会停止。

那么此时while中的条件判断就没有意义了。

可以写一个恒成立的条件:true

image-20220309175639897

最终代码:

package Test1;

public class demo2 {
    public static void main(String[] args) {
        /* 打怪游戏 */
        //1、定义两个变量,分别赋值相应的血量值
        int w=315; //玩家
        int g=500; //怪物
        int i=1;//回合计数变量
        //2、用循环模拟打斗回合
        while(true){ //循环条件是两者都活着
            //循环里面执行两者互砍
            System.out.println("----------第"+i+"回合----------");
            i++;//每一次回合之后,让回合计数变量加一
        //3、玩家攻击怪物
            //生成玩家攻击力(5~8)
            int wg=(int)(Math.random()*4)+5;
            //减少怪物血量值
            g-=wg;
            //输出结果
            System.out.println("玩家攻击怪物,怪物掉了"+wg+"点血量值,"+"还剩"+g+"点血量值");

            //判断怪物是否已经挂掉
            if(g<=0){
                //让循环停止,并输出结果
                System.out.println("怪物挂掉,玩家胜利!");
                break; //可以在循环中使用哦。在此处作用:停止循环继续执行
            }

        //4、怪物攻击玩家
            //生成怪物攻击力(3~5)
            int gw=(int)(Math.random()*3+3);
            //减少玩家血量值
            w-=gw;
            //输出结果
            System.out.println("怪物攻击玩家,玩家掉了"+gw+"点血量值,"+"还剩"+w+"点血量值");

            //判断玩家是否已经挂掉
            if(w<=0){
                //让循环停止,并输出结果
                System.out.println("玩家挂掉,怪物胜利!");
                break;
            }
        }
    }
}

运行结果展示(每个人每次运行结果不同很正常,因为是随机生成):

image-20220309175827906

相关文章
|
1月前
|
设计模式 人工智能 前端开发
现代 Java 实现数字华容道与石头迷阵游戏的项目实战及项目开发指南
本项目基于Java 17+,采用JavaFX与MVC架构,实战开发数字华容道/石头迷阵游戏。内容涵盖技术选型、核心逻辑、现代GUI设计、动画实现及项目打包发布,结合sealed class、record等新特性,打造简洁可维护的游戏代码结构。
76 0
|
2月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
|
8月前
|
Java
Java实现贪吃蛇游戏
本文介绍了如何使用Java实现一个简单的贪吃蛇游戏。
288 4
|
6月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
|
6月前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
|
6月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
6月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
228 0
|
6月前
|
Java 开发工具
课时5:第一个Java程序
课时5介绍了编写第一个Java程序的步骤,包括创建Hello.java文件、编写“Hello World”代码、编译和运行程序。主要内容有:1) 新建并编辑Hello.java;2) 编译Java源文件生成.class文件;3) 通过命令行解释执行Java程序;4) 解释主方法的作用及信息输出操作。本课强调了类定义、文件命名规则和基本程序结构的重要性,并建议初学者使用记事本编写代码以熟悉基础语法。
|
8月前
|
传感器 安全 算法
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。
|
8月前
|
IDE Java 开发工具
消防救援支队消防员单兵装备智能养护舱点击驱动java版程序(一)
智能消防作战服架通过电机驱动系统提升消防员作业效率和安全性。本文介绍基于Java的电机驱动程序开发,涵盖硬件准备、软件环境搭建及驱动程序实现。重点包括串口通信配置、电机控制类设计与控制逻辑实现,确保电机高效稳定运行。通过正确配置通信协议和串口参数,并添加异常处理机制,保障系统的安全性和可靠性。

热门文章

最新文章