概要
本项目可以加深对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,力量、速度、生命值相加为战力值
小结
到这里就结束了,项目比较简单涉及的技术比较少。第一次写,慢慢努力!