每日作业20200604 - 道具的生命回复效果

题目

“不死鸟之眼”是某游戏的一件游戏道具
    设计程序,提示用户输入最大生命值, 当前血量,5秒回复生命值
    程序输出购买该道具后的生命回复效果。
    (以每5秒为时间单位显示回复效果)
    装备效果:
        +1200最大生命值
        +100每五秒回血
        每损失10%生命值,受到的治疗效果额外增加6%
    样例输入:
        最大生命值: 8800
        当前血量: 50005秒回复: 100
    样例输出:
        5260  (+260)
        5520 (+260)
        5780 (+260)
        6040 (+260)
        6288 (+248)
        ……

代码

import java.util.Scanner;

public class Homework0604 {
    public static void main(String[] args) {
        print();    //打印题目
        System.out.println("********************样例************************");
        int[] player0 = {8800, 5000, 100};
        method(player0);    //调用方法

        System.out.println("\n************************************************\n");

        int[] player = player();    //用户输入
        method(player);     //调用方法
    }

    /**
     * 方法
     * @param player 玩家状态
     */
    private static void method(int[] player) {
        /*玩家初始状态*/
        int maxBlood = player[0];   //最大生命值8800
        int nowBlood = player[1];   //当前血量5000
        int reply = player[2];      //每5秒回复生命值100
        /*装备附加属性*/
        int equipmentBlood = 1200;  //装备最大生命值
        int equipmentReply = 100;   //装备每5秒回复生命值
        /*加上装备后,属性变化*/
        int sumBlood = maxBlood + equipmentBlood;   //总血量10000
        double extraReply = 0;      //额外回复速率
        int add = 0;                //回复血量 = (装备+自身)每5秒回复生命值 * (1 + 额外回复速率)

        System.out.println("总血量 = " + sumBlood + "\n");

        while (nowBlood < sumBlood){    //血量未满,则继续回复
            extraReply = (sumBlood - nowBlood) / (int)(sumBlood * 0.1) * 0.06;     //每损失10%生命值,受到的治疗效果额外增加6%
            System.out.println("当前血量 = " + nowBlood + ", 需恢复 = " + (sumBlood - nowBlood) + ", 额外回复速率 = " + extraReply);

            add = (int)(( equipmentReply + reply ) * ( 1 + extraReply)) ;           //回复血量 = (装备+自身)每5秒回复生命值 * (1 + 回复速度)
            nowBlood += add ;   //回复后当前血量
            if(nowBlood > sumBlood){    //
                add = sumBlood - (nowBlood - add);
                nowBlood = sumBlood;
                System.out.println( "当前生命值: " + nowBlood + " ( +" + add + " )");
                return;
            }
            System.out.println( "当前生命值: " + nowBlood + " ( +" + add + " )\n");
        }
    }

    /**
     * 玩家状态
     * @return  玩家状态
     */
    private static int[] player() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入最大生命值:");
        int maxBlood = sc.nextInt();
        System.out.print("请输入当前血量:");
        int nowBlood = sc.nextInt();
        System.out.print("请输入每5秒回复生命值:");
        int reply = sc.nextInt();

        int[] player = {maxBlood, nowBlood, reply};
        return player;
    }

    /**
     * 打印
     */
    private static void print() {
        System.out.println("\n********************************************************************************************\n");
        System.out.println("设计程序,提示用户输入最大生命值, 当前血量, 每5秒回复生命值, 程序输出购买该道具后的生命回复效果。");
        System.out.println("(以每5秒为时间单位显示回复效果)");
        System.out.println("装备效果:   ");
        System.out.println("\t+1200最大生命值");
        System.out.println("\t+100每五秒回血");
        System.out.println("\n********************************************************************************************\n");
    }

}

运行结果

********************************************************************************************

设计程序,提示用户输入最大生命值, 当前血量,5秒回复生命值, 程序输出购买该道具后的生命回复效果。
(以每5秒为时间单位显示回复效果)
装备效果:   
	+1200最大生命值
	+100每五秒回血

********************************************************************************************

********************样例************************
总血量 = 10000

当前血量 = 5000, 需恢复 = 5000, 额外回复速率 = 0.3
当前生命值: 5260 ( +260 )

当前血量 = 5260, 需恢复 = 4740, 额外回复速率 = 0.24
当前生命值: 5508 ( +248 )

当前血量 = 5508, 需恢复 = 4492, 额外回复速率 = 0.24
当前生命值: 5756 ( +248 )

当前血量 = 5756, 需恢复 = 4244, 额外回复速率 = 0.24
当前生命值: 6004 ( +248 )

当前血量 = 6004, 需恢复 = 3996, 额外回复速率 = 0.18
当前生命值: 6240 ( +236 )

当前血量 = 6240, 需恢复 = 3760, 额外回复速率 = 0.18
当前生命值: 6476 ( +236 )

当前血量 = 6476, 需恢复 = 3524, 额外回复速率 = 0.18
当前生命值: 6712 ( +236 )

当前血量 = 6712, 需恢复 = 3288, 额外回复速率 = 0.18
当前生命值: 6948 ( +236 )

当前血量 = 6948, 需恢复 = 3052, 额外回复速率 = 0.18
当前生命值: 7184 ( +236 )

当前血量 = 7184, 需恢复 = 2816, 额外回复速率 = 0.12
当前生命值: 7408 ( +224 )

当前血量 = 7408, 需恢复 = 2592, 额外回复速率 = 0.12
当前生命值: 7632 ( +224 )

当前血量 = 7632, 需恢复 = 2368, 额外回复速率 = 0.12
当前生命值: 7856 ( +224 )

当前血量 = 7856, 需恢复 = 2144, 额外回复速率 = 0.12
当前生命值: 8080 ( +224 )

当前血量 = 8080, 需恢复 = 1920, 额外回复速率 = 0.06
当前生命值: 8292 ( +212 )

当前血量 = 8292, 需恢复 = 1708, 额外回复速率 = 0.06
当前生命值: 8504 ( +212 )

当前血量 = 8504, 需恢复 = 1496, 额外回复速率 = 0.06
当前生命值: 8716 ( +212 )

当前血量 = 8716, 需恢复 = 1284, 额外回复速率 = 0.06
当前生命值: 8928 ( +212 )

当前血量 = 8928, 需恢复 = 1072, 额外回复速率 = 0.06
当前生命值: 9140 ( +212 )

当前血量 = 9140, 需恢复 = 860, 额外回复速率 = 0.0
当前生命值: 9340 ( +200 )

当前血量 = 9340, 需恢复 = 660, 额外回复速率 = 0.0
当前生命值: 9540 ( +200 )

当前血量 = 9540, 需恢复 = 460, 额外回复速率 = 0.0
当前生命值: 9740 ( +200 )

当前血量 = 9740, 需恢复 = 260, 额外回复速率 = 0.0
当前生命值: 9940 ( +200 )

当前血量 = 9940, 需恢复 = 60, 额外回复速率 = 0.0
当前生命值: 10000 ( +60 )

************************************************

请输入最大生命值:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值