个人写作项目:文字版格斗游戏
(1) 定义角色(Role)类,成员变量中定义姓名(name),血量(blood或hp(horsepower)),属性私有,生成空参、有参构造方法,生成set/get方法;
(2) 定义测试类,在main方法中创建该类的对象并给属性赋值(set方法);
(3) 调用成员方法,打印如下:
郭靖打了欧阳克一拳,造成失血XX点,欧阳克还剩XX点血。
欧阳克打了郭靖一拳,造成失血XX点,郭靖还剩XX点血。
郭靖(欧阳克)K.O.了欧阳克(郭靖)。
【提示】编写攻击(attack)的成员方法,方法中对成员变量进行使用,如r1.attack(r2);
测试类:
public static void main(String[] a) {
String name;
int HP;
Role r1 = new Role();
Role r2 = new Role();
Scanner input = new Scanner(System.in);
System.out.print("请输入一号玩家姓名:");
name = input.next();
r1.setName(name);
System.out.print("请输入一号玩家姓名血量:");
HP = input.nextInt();
r1.setHP(HP);
System.out.print("请输入二号玩家姓名:");
name = input.next();
r2.setName(name);
System.out.print("请输入二号玩家姓名血量:");
HP = input.nextInt();
r2.setHP(HP);
r1.attack(r2);
}
参与类:
/**
* @program: Day01
* @ClassName Role
* @description(类信息): 定义角色
* @author: honor
* @create: 2024-04-11 16:24
* @Version 1.0
**/
public class Role {
private String name;
private int HP;
private int hurt;
public Role() {
}
public Role(String name, int HP) {
this.name = name;
this.HP = HP;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHP() {
return HP;
}
public void setHP(int HP) {
this.HP = HP;
}
/**
* @return void
* @ClassName Role
* @anthor 上善若水
* @description (方法信息):生成一个1-100的随机数
* @Date 2024/4/11 20:24
* @Param []
*/
public void RandomInt() {
this.hurt = (int) (Math.random() * 100 + 1);
}
/**
* @return void
* @ClassName Role
* @anthor 上善若水
* @description (方法信息):用来计算战斗血条
* @Date 2024/4/11 20:21
* @Param [role]
*/
public void attack(Role role) {
int Hp = 0;
Hp = role.getHP();
while (true) {
RandomInt();
if (Hp > 0 && this.HP > 0) {
Hp = Hp - hurt;
System.out.println(getName() + "打了" + role.getName() + "一拳,造成失血" + hurt + "点," + role.getName() + "还剩" + Hp + "点血。");
if (Hp > 0) {
RandomInt();
this.HP = this.HP - hurt;
System.out.println(role.getName() + "打了" + getName() + "一拳,造成失血" + hurt + "点," + getName() + "还剩" + this.HP + "点血。");
}
} else if (Hp < 1) {
System.out.print(getName() + "K.O.了" + role.getName());
break;
} else {
System.out.print(role.getName() + "K.O.了" + getName());
break;
}
}
}
}
思路:
使用Role类进行运算,分别输入俩个值进入俩个Role类,在Main中调用其中一个Role中的attack方法进行计算,输出结果
问题:
调用过程中指向不明,if else叠加较长
总结:
总体思路较为直接,完成预期目标功能。
但是因为多用相同名字变量,代码可读性差,细小功能集中,没有将代码块分开,显得极为臃肿,对于功能并没有做0血显示,输出伤害会显示负血,不够美观。调用类较为生疏,需要加强熟练。