欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 练习之回合制游戏,练习接口,随机,数组,可变参数

程序员文章站 2022-03-14 19:51:50
weapon定义一个武器类,武器需要具有武器的名称,武器的伤害值private String weaponName; // 武器的名称 private double injuryValue; // 武器的伤害值equipment定义一个装备类,武器需要含有装备名称,装备的防御值 private String equipName; private double defenceValue;character定义一个角色类,角色含有角色名称和角色ID private St...

weapon
定义一个武器类,武器需要具有武器的名称,武器的伤害值

private String weaponName;  // 武器的名称
    private double injuryValue; // 武器的伤害值

equipment
定义一个装备类,武器需要含有装备名称,装备的防御值

 private String equipName;
    private double defenceValue;

character
定义一个角色类,角色含有角色名称和角色ID

   private String characterName; // 角色名称
    private String charID;  

skill
定义一个技能类,具备法术攻击和物理攻击的功能

//skill
//定义一个技能类,具备法术攻击和物理攻击的功能
public interface  Skill {
    void physicsAttack(Hero ... heroes); //物理攻击
    void magicAttack(Hero ... heroes);   //法术攻击
}

hero
定义一个英雄类,英雄含有英雄名称,英雄的角色,英雄的生命值,英雄需要含有武器属性,含有装备属性
需要具备攻击功能, 切换 技能功能 ,具备添加穿戴装备的功能

package todayHw;

import java.util.Random;

/*
定义一个英雄类,英雄含有英雄名称,英雄的角色,英雄的生命值,
英雄需要含有武器属性,含有装备属性
需要具备攻击功能, 切换 技能功能 ,具备添加穿戴装备的功能
 */
public class Hero extends Character implements Skill {

    // 继承自 角色类
    // 英雄名称
    // 英雄的角色
    private double HP;       // 血量    HP=health point
    private Weapon weapon;   // 武器属性
    private Equipment equip; // 装备属性

    public int addHP() {

        int temp = new Random().nextInt(50);
        System.out.println("本次加血" + temp + "点");
        return temp;
    }


    /**
     * 减去对方英雄的HP
     *
     * @param heroes
     */
    // 实现一下 接口中的 物理攻击 和 法术攻击
    @Override
    public void physicsAttack(Hero... heroes) {
        // 物理攻击
        System.out.println("===================================");
        // 输出获取武器的伤害值
        double weaponThisInjury = weapon.getInjuryValue();


        // 减去对方英雄的HP
        for (int i = 0; i < heroes.length; i++) {

            // 1. 判断对方的血量是否为 0
            if (heroes[i].getHP() > 0 && this.getHP() > 0) {


                // 0.8 ~ 1.5之间随机
                // 武器造成的伤害值 = 武器的伤害值(80% - 150%) - 防御值
                Random r = new Random();
                weaponThisInjury = (int) (weaponThisInjury * r.nextDouble() * 1.5) - heroes[i].getEquip().getDefenceValue();

                // 如果伤害值 经过 防具减伤后 攻击值小于0,则不减少 HP
                if (weaponThisInjury < 0) {
                    System.out.println(" 格挡掉了本次所造成的所有伤害");
                } else {
                    // 显示盾牌
                    System.out.println(heroes[i].getCharacterName()
                            + " 装备了 "
                            + heroes[i].getEquip().getEquipName()
                            + "格挡掉了 , 来自"
                            + this.getCharacterName()
                            + " 的 "
                            + heroes[i].getEquip().getDefenceValue()
                            + " 点 伤害值! ");

                    System.out.println(this.getCharacterName()
                            + " 使用 "
                            + this.getWeapon().getWeaponName()
                            + " 对 "
                            + heroes[i].getCharacterName()
                            + " 本次物理攻击的伤害值是: " + weaponThisInjury + " HP");
                    heroes[i].setHP(heroes[i].getHP() - weaponThisInjury);
                }

                // 判断此次攻击后 血量是否 小于 10
                if (isLowerThenTen(heroes[i])) {
                    System.out.println(heroes[i].getCharacterName() + " 发动被动魔法攻击");
                    magicAttack(this);
                }

                // 判断此次攻击后, 血量是否为 0
                isEmpty(heroes[i]);

                // 输出对方的英雄剩余的HP
                if (heroes[i].getHP() > 0) {
                    System.out.println("对方 " + heroes[i].getCharacterName() + " 还剩余 " + heroes[i].getHP() + " HP");
                }
                // 输出己方的血量
                System.out.println("己方 " + this.getCharacterName()
                        + " 还剩余 "
                        + this.getHP()
                        + " 点血量 "
                );
            }
        }


        System.out.println("===================================");
    }


    // 判断对方血量是否低于 10
    public boolean isLowerThenTen(Hero hero) {
        //
        if (hero.getHP() < 10 && hero.getHP() > 0) {
            System.out.println(
                    hero.getCharacterName() + " 血量低于10"
            );
            System.out.println("建议 " + hero.getCharacterName() + " 转换技能或者加血!!!");


            boolean addOrMagic = new Random().nextBoolean();
            if (addOrMagic) {
                System.out.println(hero.getCharacterName() + " 使用加血功能 ");
                int tempAddHP = addHP();
                hero.setHP(hero.getHP() + tempAddHP);
                System.out.println(hero.getCharacterName() + " 加血 " + tempAddHP + "点");

            }


            return true;
        } else {
            return false;
        }
    }

    // 判断对象经过本次攻击后,血量是否小于 0;
    public void isEmpty(Hero hero) {
        //
        if (hero.getHP() < 0) {
            System.out.println(
                    hero.getCharacterName() + " 的血量低于0 " + " 结束本次战斗"
            );
            System.out.println("造成 " + Math.abs(hero.getHP()) + " 点,过量伤害!!!");
            return;
        }
    }

    @Override
    public void magicAttack(Hero... heroes) {
        // 魔法攻击
        /*
        1.判断血量是否为 0
        2.攻击对方
         */
        for (int i = 0; i < heroes.length; i++) {

            // 1. 判断对方的血量是否为 0
            if (heroes[i].getHP() > 0) {

                // 2. 获取对方的血量
                // 3. 以对方血量为随机数,对 对方 造成伤害
                int magicInjury = new Random().nextInt((int) heroes[i].getHP());

                System.out.println("对 "
                        + heroes[i].getCharacterName()
                        + "造成"
                        + magicInjury
                        + " 点 魔法伤害 "
                );

                // 4.减掉血量
                heroes[i].setHP(heroes[i].getHP() - magicInjury);

            }

            // 判断此次攻击后 血量是否 小于 10
            isLowerThenTen(heroes[i]);

            // 判断此次攻击后, 血量是否为 0
            isEmpty(heroes[i]);

            // 输出对方的英雄剩余的HP
            if (heroes[i].getHP() > 0) {
                System.out.println(heroes[i].getCharacterName() + " 还剩余 " + heroes[i].getHP() + " HP");
            }

        }

    }


    // 空参构造
    public Hero() {
    }

    // 构造方法
    public Hero(double HP, Weapon weapon, Equipment equip) {
        this.HP = HP;
        this.weapon = weapon;
        this.equip = equip;
    }

    // 全参构造
    public Hero(String characterName, String charID, double HP, Weapon weapon, Equipment equip) {
        super(characterName, charID);
        this.HP = HP;
        this.weapon = weapon;
        this.equip = equip;
    }

    public double getHP() {
        return HP;
    }

    public void setHP(double HP) {
        this.HP = HP;
    }

    public Weapon getWeapon() {
        return weapon;
    }

    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }

    public Equipment getEquip() {
        return equip;
    }

    public void setEquip(Equipment equip) {
        this.equip = equip;
    }
}

游戏开始时,某些英雄登场,这些英雄需要穿戴一些装备和武器,
显示某某英雄开始交战,
某某英雄释放了,某些技能,造成了对方多大的伤害,
当某一个英雄的血量低于10% 提醒,血量过低,建议切换技能或者加血动作,
当全场只剩一个英雄的时候,其他英雄全部血量为0的时候,结束

package todayHw;

public class Battle {
    public static void main(String[] args) {
        Hero h = new Hero(" A ", "100", 100,
                new Weapon(" 埃辛诺斯双刃 ", 35),
                new Equipment(" 埃辛诺斯盾牌 ",10));

        Hero h2 = new Hero(" B ", "101", 100,
                new Weapon(" 风剑 ", 25),
                new Equipment(" 橡木盾 ",5));

        Hero h3 = new Hero(" C ", "102", 100,
                new Weapon(" 战斧 ", 15),
                new Equipment(" 复活甲 ",2));

        boolean flag = true;
        int count = 1;
        while (flag) {
            //
            System.out.println(
                    "第" + count++ +" 回合"
            );
            System.out.println("A 攻击 BC");
            h.physicsAttack(h2,h3);

            System.out.println("B 攻击 AC");
            h2.physicsAttack(h,h3);

            System.out.println("C 攻击 AB");
            h3.physicsAttack(h,h2);

            if((h.getHP() < 0 && h2.getHP()< 0)
                    ||(h2.getHP() < 0 && h3.getHP()< 0)
                    ||(h.getHP() < 0 && h3.getHP()< 0)){
                flag = false;
            }
        }


    }
}

本文地址:https://blog.csdn.net/HarrisJayce/article/details/110209375

相关标签: java