基于java封装、继承、多态、数组等技术栈的黑神话-悟空Boss信息管理系统

文章目录

概要

Boss类

BossManager类

Melee_magic、Melee_Physics等子类

效果展示

小结


概要

本项目可以加深对Java编程语言中的封装、继承、多态以及数组的使用熟练度。系统功能主要为增删改查,项目包含6个类。其中一个父类Boss,一个操作类BossManager,四个子类(方便多态的运用)。

Boss类

Boss类中,定义了Boss的属性name、速度speed、生命值Health_value、Boss类型types、数组shuzu。然后右键点击生成get、set方法,interface一个person接口,接口里面写入三个方法用于子类的调用。

public class Boos {
    private   String name;
    private int power;
    private int speed;
    private Double Health_value;
    private String types;
    static Boos[] shuzu = new Boos[20];
    public static Boos[] getShuzu() {
        return shuzu;
    }
    public static void setShuzu(Boos bs, int wz) {
        Boos.shuzu[wz] = bs;
    }

    public Boos() {

    }

    public Boos(String name, int power, int speed, Double health_value, String types) {
        this.name = name;
        this.power = power;
        this.speed = speed;
        Health_value = health_value;
        this.types = types;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getPower() {
        return power;
    }

    public void setPower(int power) {
        this.power = power;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public Double getHealth_value() {
        return Health_value;
    }

    public void setHealth_value(Double health_value) {
        this.Health_value = health_value;
    }

    public String getTypes() {
        return types;
    }

    public void setTypes(String types) {
        this.types = types;
    }
    interface Person{
        void attack(Boos boss1, Boos boss2);
        void defense();
        void wq();
    }
}

BossManager类

BossManager类是Boss的操作类,定义了主函数。所有的功能都将在这里实现:增删改查。

import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;

public class BossManager {
    public static void main(String [] args){
        Scanner scan =new Scanner(System.in);
        int a = 0;
        boolean n = true;
        while (n) {
            System.out.println("========欢迎来到《黑神话悟空》Boss能力信息系统========");
            System.out.println("1.添加Boss信息");
            System.out.println("2.删除Boss信息");
            System.out.println("3.更改Boss信息");
            System.out.println("4.查询Boss信息");
            System.out.println("5.Boss能力分析");
            System.out.println("6.退出");
            String select = scan.next();
            switch (Integer.parseInt(select)){
                case 1 :
                    addBoss(a);
                    a += 1;//控制数组shuzu的索引下移
                    break;
                case 2 :
                    remove();
                    break;
                case 3 :
                    change();
                    break;
                case 4 :
                    inquire();
                    break;
                case 5 :
                    analysis();
                    break;
                case 6 :
                    n = false;
                    break;
            }
        }
    }





    //添加Boos
    public static void addBoss(int a){
        Scanner sc =new Scanner(System.in);
        boolean type = true;
        shuru(sc, type, a);
    }






    //查询Boss
    public static void inquire(){
        for (Boos boss : Boos.getShuzu()) {
            if(boss != null){
                System.out.println("\nBoss名称:" + boss.getName() + "\t\t力量:" + boss.getPower() + "\t\t速度:" + boss.getSpeed() + "\t\t生命值:" + boss.getHealth_value() + "\t\t类型:" + boss.getTypes());
            }
        }
    }




    //删除Boss信息
    public static void remove(){
        Scanner scan = new Scanner(System.in);
        boolean flag = false;
        System.out.println("请输入你要删除的Boss: ");
        Boos bs = new Boos();
        String s = scan.next();
        bs.setName(s);
        for (int i = 0; i< Boos.shuzu.length; i++) {
            if (Boos.shuzu[i]!= null) {
                if (Objects.equals(bs.getName(), Boos.shuzu[i].getName())) {
                    Boos.shuzu[i] = null;
                    flag = true;
                    break;
                }
            }
        }
        if(flag)
            System.out.println("删除" + bs.getName() + "成功!");
        else
            System.out.println("输入有误," + bs.getName() + "不存在。");
    }




    //更改Boss信息
    public static void change(){
        Scanner sc = new Scanner(System.in);
        boolean type = true;
        System.out.println("请输入你要更改的Boss: ");
        String s = sc.next();
        for (int i = 0; i < Boos.shuzu.length; i++) {
            if (Boos.getShuzu()!= null) {
                if (Objects.equals(s, Boos.shuzu[i].getName())) {
                    shuru(sc, type, i);
                    break;
                }
            }

        }
    }





    //Boss能力分析
    public static void analysis(){
        int [] sum = new int[Boos.shuzu.length];
        int sy = 0;
        for (int i = 0; i < Boos.shuzu.length; i++) {
            if (Boos.shuzu[i]!= null) {
                //在数组中存放战力值
                sum[i] = (int) (Boos.shuzu[i].getSpeed() + Boos.shuzu[i].getPower() + Boos.shuzu[i].getHealth_value());
            }
        }
        //找出最大值
        int max = Arrays.stream(sum).max().getAsInt();
        for (int j = 0; j < sum.length; j++) {
            if (Boos.shuzu[j] != null) {
                if (max == (int) (Boos.shuzu[j].getSpeed() + Boos.shuzu[j].getPower() + Boos.shuzu[j].getHealth_value())) {
                    System.out.println("最强Boss为: " + Boos.shuzu[j].getName() + "\t战力值为: "+ max + "注:最强Boss没有具体职业,所有职业类型的武器,技能都可使用。");
                    sy = j;
                }
            }
        }
        //战斗过程
        for (int k = 0; k < Boos.shuzu.length; k++) {
            if ((Boos.shuzu[k] != null)&&(k!=sy)) {
                switch (Boos.shuzu[k].getTypes()){
                    case "近战物理":
                        Boos.Person a1 = new Melee_physics();
                        a1.wq();
                        a1.attack(Boos.shuzu[sy], Boos.shuzu[k]);
                        break;
                    case "近战魔法":
                        Boos.Person b1 = new Melee_magic();
                        b1.wq();
                        b1.attack(Boos.shuzu[sy], Boos.shuzu[k]);
                        break;
                    case "远程物理":
                        Boos.Person c = new Remote_physics();
                        c.wq();
                        c.attack(Boos.shuzu[sy], Boos.shuzu[k]);
                        break;
                    case "远程魔法":
                        Boos.Person d = new Remote_Magic();
                        d.wq();
                        d.attack(Boos.shuzu[sy], Boos.shuzu[k]);
                        break;
                }
            }
        }
    }






    //输入数据的方法
    private static void shuru(Scanner sc, boolean type, int i) {
        System.out.println("请输入【名称】:  ");
        String name = sc.next();
        int n = 0;
        for (int j = 0; j < Boos.shuzu.length - 1; j++) {
            if ((Boos.shuzu[j] != null)) {
                while (Boos.shuzu[j].getName().equals(name)) {
                    System.out.println("该Boss已经存在,请重新输入!!!");
                    name = sc.next();
                }
            }
        }
        System.out.println("请输入【力量】:  ");
        int power = sc.nextInt();
        System.out.println("请输入【速度】:  ");
        int speed = sc.nextInt();
        System.out.println("请输入【生命值】:  ");
        double Health_value = sc.nextDouble();
        System.out.println("请输入【Boss类型】(近战物理/近战魔法/远程物理/远程魔法):  ");
        String types = sc.next();
        Boos boos = new Boos(name, power, speed, Health_value, types);
        type_determine(types, sc, type, boos);
        Boos.setShuzu(boos, i);
    }




    //判断Boss类型
    private static void type_determine(String types, Scanner sc, boolean type, Boos boss) {
        while (type) {
            switch (types) {
                case "近战物理":
                    Boos.Person a1 = new Melee_physics();
                    a1.defense();
                    type = false;
                    break;
                case "近战魔法":
                    Boos.Person b = new Melee_magic();
                    b.defense();
                    type = false;
                    break;
                case "远程物理":
                    Boos.Person c = new Remote_physics();
                    c.defense();
                    type = false;
                    break;
                case "远程魔法":
                    Boos.Person d = new Remote_Magic();
                    d.defense();
                    type = false;
                    break;
                default:
                    System.out.println("请重新输入【Boss类型】(近战物理/近战魔法/远程物理/远程魔法):");
                    types = sc.next();
                    boss.setTypes(types);
                    break;
            }
        }
    }





    //判断Boss是否已经存在
    public static void determine(String name){
        for (int i = 0; i < Boos.shuzu.length - 1; i ++) {
            if ((Boos.shuzu[i] != null)) {
                if (Boos.shuzu[i].getName().equals(name)) {
                    System.out.println("该Boss已经存在,请重新输入!!!");
                    break;
                }
            }
        }
    }
}

Melee_magic、Melee_Physics等子类

这些子类中重写了接口里面的方法,不同的Boss类型输出不一样的结果,实现了系统的多态性。

Melee_Magic类

public class Melee_magic extends Boos implements Boos.Person {
    //近战魔法
    @Override
    public void attack(Boos boss1, Boos boss2) {
          System.out.println("\n"+boss1.getName()+"与"+boss2.getName()+"加入了战斗!");
          System.out.println(boss1.getName()+"拿出了武器:搅屎棍 ψ(`∇´)ψ");
          System.out.println(boss2.getName()+"露出惊恐的表情,后退一步说道:你不要过来啊!!! C= C= C=(っ°Д°;)っ");
          System.out.println(boss1.getName()+"拉了一坨为武器附魔,并向"+boss2.getName()+"使用了一记雷霆半月斩,一道气浪附带着惊吓效果追着"+boss2.getName()+"而去·····");
          System.out.println(boss2.getName()+"面对着飘洒而来的搅屎棍以及其难以描述的附着物避无可避,绝望的闭上了眼睛。(* ̄m ̄)");
          System.out.println(boss2.getName()+":卒");
    }

    @Override
    public void defense() {
        System.out.println("\n成功添加近战魔法类Boss!!!\n");
    }

    @Override
    public void wq() {
        System.out.println("\n武器:搅屎棍\n");
    }
}

 Melee_Physics类


public class Melee_physics extends Boos implements Boos.Person {
    //近战物理
    @Override
    public void attack(Boos boss1, Boos boss2) {
        System.out.println("\n"+boss1.getName()+"与"+boss2.getName()+"加入了战斗!");
        System.out.println(boss1.getName()+"握起了拳头看着"+boss2.getName()+"说道:投降吧!你打不过我的。");
        System.out.println(boss2.getName()+"邪魅一笑,掏出武器说到:哦?是吗? ▄︻┻┳═一∵∴∷∶∵");
        System.out.println(boss1.getName()+"看着"+boss2.getName()+"没有说话,对着"+boss2.getName()+"使出了终结技:乌鸦坐飞机。直攻他的上三路");
        System.out.println(boss2.getName()+"看着飞天而来的屁股突然宕机,因为所有的子弹都被这腚弹开了。随着这玩意在眼前慢慢放大,他的生命急速流失。最终难逃一死。");
        System.out.println(boss2.getName()+":卒");
    }

    @Override
    public void defense() {
        System.out.println("\n成功添加近战物理类Boss!!!\n");

    }

    @Override
    public void wq() {
        System.out.println("\n武器:拳头(实际上:大腚)\n");
    }
}

Remote_Magic类


public class Remote_Magic extends Boos implements Boos.Person{
    //远程魔法
    @Override
    public void attack(Boos boss1, Boos boss2) {
        System.out.println("\n"+boss1.getName()+"与"+boss2.getName()+"加入了战斗!");
        System.out.println(boss1.getName()+"看着"+boss2.getName()+"说道:准备好受死了吗?");
        System.out.println(boss2.getName()+"回答:我不会坐以待毙的,就让我们来一场痛快的对决吧!");
        System.out.println(boss1.getName()+"看着"+boss2.getName()+"突然同情道:那你可要准备好哦!(っ´ω`)ノ(╥ω╥)  说完向"+boss2.getName()+"吐了一口浓痰!!!");
        System.out.println(boss2.getName()+":???????");
        System.out.println("在极限速度的加持下,没有任何人能够躲过这一招。这口浓痰精确的留在了"+boss2.getName()+"的脸上,郁闷情绪在这一刻彻底爆发"+boss2.getName()+"最终气血逆行而亡");
    }

    @Override
    public void defense() {
        System.out.println("\n成功添加远程魔法类Boss!!!\n");
    }

    @Override
    public void wq() {
        System.out.println("\n武器:嘴\n");
    }
}

 Remote_Physics类


public class Remote_physics extends Boos implements Boos.Person{
    //远程物理
    @Override
    public void attack(Boos boss1, Boos boss2) {
        System.out.println("\n"+boss1.getName()+"与"+boss2.getName()+"加入了战斗!");
        System.out.println(boss1.getName()+"掏出了武器:AK47   (メ ̄▽ ̄)︻┳═一");
        System.out.println(boss2.getName()+"回退一步,但还是露出了自己的武器:裁纸刀   (ಠ o ಠ)¤=[]:::::>");
        System.out.println(boss1.getName()+"看着"+boss2.getName()+"的武器有点乐了,也懒得废话。拉开保险向"+boss2.getName()+"开火!!!");
        System.out.println("(=゚㉨゚=) ▄︻┻┳━ ·.`.`.`. Biubiubiu");
        System.out.println(boss2.getName()+"卒");
    }

    @Override
    public void defense() {
        System.out.println("\n成功添加远程物理类Boss!!!\n");
    }

    @Override
    public void wq() {
        System.out.println("\n武器:AK47\n");
    }
}

效果展示

添加 Boss,名字重复时会报错且重新输入,类型错误时会提示重新输入。

查询 Boss

 

分析Boss

分析出战力值最强的Boss,力量、速度、生命值相加为战力值

小结

到这里就结束了,项目比较简单涉及的技术比较少。第一次写,慢慢努力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值