栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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+"点血量值");
        }
    }
}

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

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

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

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

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

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

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

        //判断怪物是否已经挂掉
        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;
            }
        }
    }
}

运行结果:

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

显示结果正常。

(3)代码调整。

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

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

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

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

最终代码:

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;
            }
        }
    }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号