这个游戏是我课后的一个作业。
1.代码内容
- 运用多个if-else嵌套,while循环,swit-case语句。
- 定义boolean类型来进行判断。
- 运用了封装的知识点,以及构造方法并调用方法
- 运用了Random方法
-
运用了this关键字,setter和getter方法
2.定义新的类
这里我们首先要自己先定义一个新的Fighter类,里面包含后面要创立的对象的成员变量(属性):姓名,HP和MP。因为我们用的是private(私有化)修饰符,所以我们要用setter方法来为对应的私有属性进行设置值和getter方法来获取对应属性的值。
例如:
step1:使用private关键字,修饰成员变量(属性)。
step2:提供setter 方法,用于对属性进行赋值。
public void set属性名(参数){
this.属性名 = 参数;
}
step3:提供getter 方法,用于获取属性值。
public 属性值类型 get属性名(){
return this.属性名;
}
public class Fighter {
private String name; // 用private修饰符修饰成员变量
private int HP; // 用private修饰符修饰成员变量
private int MP; // 用private修饰符修饰成员变量
public void setName(String name) { // setter方法
this.name = name;
}
public String getName() { // getter方法
return name;
}
public void setHP(int HP) { // setter方法
this.HP = HP;
}
public int getHP() { // getter方法
return HP;
}
public void setMP(int MP) { // setter方法
this.MP = MP;
}
public int getMP() { // getter方法
return MP;
}
public Fighter() { // 无(空)参构造器,因为在测试类里面不会用到无(空)参构造器,所以不在无(空)参构造器里面放语句
}
public Fighter(String name, int HP, int MP) { // 有参构造器,便于在测试类中定义对象的时候直接赋值
this.name = name;
this.HP = HP;
this.MP = MP;
}
最后我们要构造无参和有参构造器。例如:
public Fighter() { } public Fighter(String name, int HP, int MP) { this.name = name; this.HP = HP; this.MP = MP; }
3.构造方法
在这里我构造了一个名字叫做fight的方法,显而易见就是攻击的方法。其中运用了判断结构,循环结构,分支结构等等。
在定义random的对象的时候将随机生成的数的范围+1是因为Random的随机数范围包左不包右,也就是左闭右开的区间。看用户需求,这里+1将范围改为1~21左闭右开。因为考虑到攻击对方时不应该出现对方不扣血,或自己蓝条不增加的特殊情况。
public void fight(Fighter fighter) {
Random random = new Random();
int damage = random.nextInt(20) + 1; // 运用Random来随机生成一个数-> 伤害值
int magic = random.nextInt(20) + 1; // 运用Random来随机生成一个数-> 魔法值
if (this.MP >= 100) this.MP = 100; // 判断如果英雄蓝条大于100了,就变成100。设置蓝条最大值为100
Scanner input = new Scanner(System.in);
boolean flag = true; // 定义布尔类型
if (this.MP >= 10) { // 判断如果蓝条大于10了,那么就提示玩家可以释放普通技能了
if (this.name == "小肖") {
System.out.println(this.name + "可以选择释放技能");
System.out.println("1.嘴炮攻击");
System.out.println("2.身高压制");
System.out.println("3.不释放技能");
int x = input.nextInt();
while (x != 1 && x != 2 && x != 3) { // 如果用户输入的数字不是1,2,3。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("1.嘴炮攻击");
System.out.println("2.身高压制");
System.out.println("3.不释放技能");
x = input.nextInt();
}
switch (x) {
case 1:
fighter.HP -= 5;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了1技能嘴炮攻击,对" + fighter.name + "造成了5点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 10; // 己方英雄释放技能后蓝条-10
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 2:
fighter.HP -= 10;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了2技能身高压制,对" + fighter.name + "造成了10点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 20; // 己方英雄释放技能后蓝条-20
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 3:
System.out.println(this.name + "选择不释放技能"); // 因为用户选择不释放技能那么,英雄就进行平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小童") {
System.out.println(this.name + "可以选择释放技能");
System.out.println("1.彝语袭击");
System.out.println("2.体能压制");
System.out.println("3.不释放技能");
int t = input.nextInt();
while (t != 1 && t != 2 && t != 3) { // 如果用户输入的数字不是1,2,3。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("1.彝语袭击");
System.out.println("2.体能压制");
System.out.println("3.不释放技能");
t = input.nextInt();
}
switch (t) {
case 1:
fighter.HP -= 5;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了1技能彝语袭击,对" + fighter.name + "造成了5点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 10; // 己方英雄释放技能后蓝条-10
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 2:
fighter.HP -= 10;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了2技能体能压制,对" + fighter.name + "造成了10点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 20; // 己方英雄释放技能后蓝条-20
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 3:
System.out.println(this.name + "选择不释放技能"); // 因为用户选择不释放技能那么,英雄就进行平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小罗") {
System.out.println(this.name + "可以选择释放技能");
System.out.println("1.狗粮袭击");
System.out.println("2.故事合集");
System.out.println("3.不释放技能");
int l = input.nextInt();
while (l != 1 && l != 2 && l != 3) { // 如果用户输入的数字不是1,2,3。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("1.狗粮袭击");
System.out.println("2.故事合集");
System.out.println("3.不释放技能");
l = input.nextInt();
}
switch (l) {
case 1:
fighter.HP -= 5;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了1技能狗粮袭击,对" + fighter.name + "造成了5点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 10; // 己方英雄释放技能后蓝条-10
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 2:
fighter.HP -= 10;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了2技能故事合集,对" + fighter.name + "造成了10点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 20; // 己方英雄释放技能后蓝条-20
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 3:
System.out.println(this.name + "选择不释放技能"); // 因为用户选择不释放技能那么,英雄就进行平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
}
if (this.MP >= 50) { // 判断如果蓝条大于50了,那么就提示玩家可以释放大招了
if (this.name == "小肖") {
System.out.println(this.name + "可以释放大招了");
System.out.println("4.学委威慑");
System.out.println("5.不释放大招");
int X = input.nextInt();
while (X != 4 && X != 5) { // 如果用户输入的数字不是4,5。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("4.学委威慑");
System.out.println("5.不释放大招");
X = input.nextInt();
}
switch (X) {
case 4:
fighter.HP -= 20;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "释放了大招学委威慑,对" + fighter.name + "造成了20点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 50;
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 5:
System.out.println(this.name + "选择不释放大招");
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小童") {
System.out.println(this.name + "可以释放大招了");
System.out.println("4.极致内卷");
System.out.println("5.不释放大招");
int T = input.nextInt();
while (T != 4 && T != 5) { // 如果用户输入的数字不是4,5。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("4.极致内卷");
System.out.println("5.不释放大招");
T = input.nextInt();
}
switch (T) {
case 4:
fighter.HP -= 20;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "释放了大招极致内卷,对" + fighter.name + "造成了20点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 50;
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 5:
System.out.println(this.name + "选择不释放大招");
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小罗") {
System.out.println(this.name + "可以释放大招了");
System.out.println("4.夜不归宿");
System.out.println("5.不释放大招");
int L = input.nextInt();
while (L != 4 && L != 5) { // 如果用户输入的数字不是4,5。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("4.夜不归宿");
System.out.println("5.不释放大招");
L = input.nextInt();
}
switch (L) {
case 4:
fighter.HP -= 20;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "释放了大招夜不归宿,对" + fighter.name + "造成了20点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 50;
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 5:
System.out.println(this.name + "选择不释放大招");
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
}
if (this.MP < 10 && flag) { // 如果英雄蓝条小于10,并且没有释放过技能再平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
}
}
}
4.自己定义的类的完整代码
import java.util.*;
public class Fighter {
private String name; // 用private修饰符修饰成员变量
private int HP; // 用private修饰符修饰成员变量
private int MP; // 用private修饰符修饰成员变量
public void setName(String name) { // setter方法
this.name = name;
}
public String getName() { // getter方法
return name;
}
public void setHP(int HP) { // setter方法
this.HP = HP;
}
public int getHP() { // getter方法
return HP;
}
public void setMP(int MP) { // setter方法
this.MP = MP;
}
public int getMP() { // getter方法
return MP;
}
public Fighter() { // 无(空)参构造器,因为在测试类里面不会用到无(空)参构造器,所以不在无(空)参构造器里面放语句
}
public Fighter(String name, int HP, int MP) { // 有参构造器,便于在测试类中定义对象的时候直接赋值
this.name = name;
this.HP = HP;
this.MP = MP;
}
public void fight(Fighter fighter) {
Random random = new Random();
int damage = random.nextInt(20) + 1; // 运用Random来随机生成一个数-> 伤害值
int magic = random.nextInt(20) + 1; // 运用Random来随机生成一个数-> 魔法值
if (this.MP >= 100) this.MP = 100; // 判断如果英雄蓝条大于100了,就变成100。设置蓝条最大值为100
Scanner input = new Scanner(System.in);
boolean flag = true; // 定义布尔类型
if (this.MP >= 10) { // 判断如果蓝条大于10了,那么就提示玩家可以释放普通技能了
if (this.name == "小肖") {
System.out.println(this.name + "可以选择释放技能");
System.out.println("1.嘴炮攻击");
System.out.println("2.身高压制");
System.out.println("3.不释放技能");
int x = input.nextInt();
while (x != 1 && x != 2 && x != 3) { // 如果用户输入的数字不是1,2,3。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("1.嘴炮攻击");
System.out.println("2.身高压制");
System.out.println("3.不释放技能");
x = input.nextInt();
}
switch (x) {
case 1:
fighter.HP -= 5;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了1技能嘴炮攻击,对" + fighter.name + "造成了5点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 10; // 己方英雄释放技能后蓝条-10
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 2:
fighter.HP -= 10;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了2技能身高压制,对" + fighter.name + "造成了10点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 20; // 己方英雄释放技能后蓝条-20
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 3:
System.out.println(this.name + "选择不释放技能"); // 因为用户选择不释放技能那么,英雄就进行平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小童") {
System.out.println(this.name + "可以选择释放技能");
System.out.println("1.彝语袭击");
System.out.println("2.体能压制");
System.out.println("3.不释放技能");
int t = input.nextInt();
while (t != 1 && t != 2 && t != 3) { // 如果用户输入的数字不是1,2,3。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("1.彝语袭击");
System.out.println("2.体能压制");
System.out.println("3.不释放技能");
t = input.nextInt();
}
switch (t) {
case 1:
fighter.HP -= 5;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了1技能彝语袭击,对" + fighter.name + "造成了5点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 10; // 己方英雄释放技能后蓝条-10
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 2:
fighter.HP -= 10;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了2技能体能压制,对" + fighter.name + "造成了10点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 20; // 己方英雄释放技能后蓝条-20
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 3:
System.out.println(this.name + "选择不释放技能"); // 因为用户选择不释放技能那么,英雄就进行平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小罗") {
System.out.println(this.name + "可以选择释放技能");
System.out.println("1.狗粮袭击");
System.out.println("2.故事合集");
System.out.println("3.不释放技能");
int l = input.nextInt();
while (l != 1 && l != 2 && l != 3) { // 如果用户输入的数字不是1,2,3。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("1.狗粮袭击");
System.out.println("2.故事合集");
System.out.println("3.不释放技能");
l = input.nextInt();
}
switch (l) {
case 1:
fighter.HP -= 5;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了1技能狗粮袭击,对" + fighter.name + "造成了5点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 10; // 己方英雄释放技能后蓝条-10
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 2:
fighter.HP -= 10;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "发动了2技能故事合集,对" + fighter.name + "造成了10点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 20; // 己方英雄释放技能后蓝条-20
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 3:
System.out.println(this.name + "选择不释放技能"); // 因为用户选择不释放技能那么,英雄就进行平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
}
if (this.MP >= 50) { // 判断如果蓝条大于50了,那么就提示玩家可以释放大招了
if (this.name == "小肖") {
System.out.println(this.name + "可以释放大招了");
System.out.println("4.学委威慑");
System.out.println("5.不释放大招");
int X = input.nextInt();
while (X != 4 && X != 5) { // 如果用户输入的数字不是4,5。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("4.学委威慑");
System.out.println("5.不释放大招");
X = input.nextInt();
}
switch (X) {
case 4:
fighter.HP -= 20;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "释放了大招学委威慑,对" + fighter.name + "造成了20点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 50;
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 5:
System.out.println(this.name + "选择不释放大招");
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小童") {
System.out.println(this.name + "可以释放大招了");
System.out.println("4.极致内卷");
System.out.println("5.不释放大招");
int T = input.nextInt();
while (T != 4 && T != 5) { // 如果用户输入的数字不是4,5。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("4.极致内卷");
System.out.println("5.不释放大招");
T = input.nextInt();
}
switch (T) {
case 4:
fighter.HP -= 20;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "释放了大招极致内卷,对" + fighter.name + "造成了20点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 50;
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 5:
System.out.println(this.name + "选择不释放大招");
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
if (this.name == "小罗") {
System.out.println(this.name + "可以释放大招了");
System.out.println("4.夜不归宿");
System.out.println("5.不释放大招");
int L = input.nextInt();
while (L != 4 && L != 5) { // 如果用户输入的数字不是4,5。那么提示用户重新输入
System.out.println("您输入的数字不对,请重新输入:");
System.out.println("4.夜不归宿");
System.out.println("5.不释放大招");
L = input.nextInt();
}
switch (L) {
case 4:
fighter.HP -= 20;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "释放了大招夜不归宿,对" + fighter.name + "造成了20点伤害,"
+ fighter.name + "还剩下" + fighter.HP + "血量");
this.MP -= 50;
flag = false; // 释放了技能之后就让flag = false,防止后面if语句判断多A一次
break;
case 5:
System.out.println(this.name + "选择不释放大招");
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println("所以" + this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
flag = false; // 平A了之后就让flag = false,防止后面if语句判断多A一次
break;
}
}
}
if (this.MP < 10 && flag) { // 如果英雄蓝条小于10,并且没有释放过技能再平A
fighter.HP -= damage;
if (fighter.HP > 0) { // 如果对方英雄受到伤害后,生命值低于0,那么就让HP=0。没有低于0就不变
fighter.HP = fighter.HP;
} else {
fighter.HP = 0;
}
System.out.println(this.name + "A了" + fighter.name + "一下,对" + fighter.name + "造成了"
+ damage + "点伤害," + fighter.name + "还剩下" + fighter.HP + "血量");
this.MP += magic; // 因为未使用蓝条且平A,所以蓝条值增加
System.out.println(this.name + "的能量增加了" + magic + "点");
}
}
}
5.测试类
在测试类里,我们先定义了三个Fighter的对象,然后利用上述的有参构造器直接对它们进行赋值。后面我们再用while循环来实现连续的对打。最后如果有一方血量<=0了之后,游戏就结束了,再输出点有意思的结局
import java.util.*;
public class BoxGame {
public static void main(String[] args) {
Fighter x = new Fighter("小肖", 100, 0); // 定义三个对象
Fighter t = new Fighter("小童", 100, 0);
Fighter l = new Fighter("小罗", 100, 0);
System.out.println("请挑选两个英雄");
System.out.println("1.小肖" + "," + "2.小童" + "," + "3.小罗"); // 在这里让用户选择其中两个英雄对打
Scanner input = new Scanner(System.in);
int i = input.nextInt();
int j = input.nextInt();
int p = 1;
if (i == 1 && j == 2) {
while (x.getHP() > 0 && t.getHP() > 0) {
System.out.println("第" + p + "回合开始!"); // 这个是每一回合数的提示
x.fight(t); // 调用fight方法
if (t.getHP() > 0) t.fight(x); // 如果被打的英雄血量大于0,那么就打回来,再调用一次fight方法
p++; // 对打完回合数自增1
}
if (x.getHP() <= 0) { // 后面就是判断哪一方血量小于=0,然后输出有意思的结局。
System.out.println("身材高大的" + x.getName() + "被经常内卷的" + t.getName() + "给击倒了!");
System.out.println(x.getName() + "真的太菜了!");
} else {
System.out.println("经常内卷的" + t.getName() + "被身材高大的" + x.getName() + "给击倒了!");
System.out.println(t.getName() + "真的太弱了!");
}
}
if (i == 2 && j == 3) {
while (t.getHP() > 0 && l.getHP() > 0) {
System.out.println("第" + p + "回合开始!");
t.fight(l);
if (l.getHP() > 0) l.fight(t);
p++;
}
if (t.getHP() <= 0) {
System.out.println("经常内卷的" + t.getName() + "被永不疲惫的" + l.getName() + "给击倒了!");
System.out.println(t.getName() + "真的太弱了!");
} else {
System.out.println("永不疲惫的" + l.getName() + "被经常内卷的" + t.getName() + "给击倒了!");
System.out.println(l.getName() + "真的太虚了!");
}
}
if (i == 2 && j == 1) {
while (t.getHP() > 0 && x.getHP() > 0) {
System.out.println("第" + p + "回合开始!");
t.fight(x);
if (x.getHP() > 0) x.fight(t);
p++;
}
if (t.getHP() <= 0) {
System.out.println("经常内卷的" + t.getName() + "被身材高大的" + x.getName() + "给击倒了!");
System.out.println(t.getName() + "真的太弱了!");
} else {
System.out.println("身材高大的" + x.getName() + "被经常内卷的" + t.getName() + "给击倒了!");
System.out.println(x.getName() + "真的太菜了!");
}
}
if (i == 3 && j == 2) {
while (l.getHP() > 0 && t.getHP() > 0) {
System.out.println("第" + p + "回合开始!");
l.fight(t);
if (t.getHP() > 0) t.fight(l);
p++;
}
if (l.getHP() <= 0) {
System.out.println("永不疲惫的" + l.getName() + "被经常内卷的" + t.getName() + "给击倒了!");
System.out.println(l.getName() + "真的太虚了!");
} else {
System.out.println("经常内卷的" + t.getName() + "被永不疲惫的" + l.getName() + "给击倒了!");
System.out.println(t.getName() + "真的太弱了!");
}
}
if (i == 1 && j == 3) {
while (x.getHP() > 0 && l.getHP() > 0) {
System.out.println("第" + p + "回合开始!");
x.fight(l);
if (l.getHP() > 0) l.fight(x);
p++;
}
if (x.getHP() <= 0) {
System.out.println("身材高大的" + x.getName() + "被永不疲惫的" + l.getName() + "给击倒了!");
System.out.println(x.getName() + "真的太菜了!");
} else {
System.out.println("永不疲惫的" + l.getName() + "被身材高大的" + x.getName() + "给击倒了!");
System.out.println(l.getName() + "真的太虚了!");
}
}
if (i == 3 && j == 1) {
while (l.getHP() > 0 && x.getHP() > 0) {
System.out.println("第" + p + "回合开始!");
l.fight(x);
if (x.getHP() > 0) x.fight(l);
p++;
}
if (x.getHP() <= 0) {
System.out.println("永不疲惫的" + l.getName() + "被身材高大的" + x.getName() + "给击倒了!");
System.out.println(l.getName() + "真的太虚了!");
} else {
System.out.println("身材高大的" + x.getName() + "被永不疲惫的" + l.getName() + "给击倒了!");
System.out.println(x.getName() + "真的太菜了!");
}
}
}
}
6.分析
这个简易版的对打游戏,在有一定的Java基础之后,自己都能写出来。通过这个游戏,能加深对封装,无参有参构造器,自己构造方法,调用方法的认识。也能使自己更加灵活的运用这几个知识。
本篇文章完毕,谢谢各位的观看。