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 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
2月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
1月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
46 1
java制作游戏,如何使用libgdx,入门级别教学
|
25天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
40 2
|
28天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
34 1
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
41 5
|
2月前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
1月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
25 0
|
2月前
|
监控 Java 数据库
Java程序如何进行不停机更新?
Java程序如何进行不停机更新?
89 1