一、需求分析
Java人狗大战是一款经典的面向对象编程练习项目,核心需求包括:
– 实现人类和狗的属性(姓名、生命值、攻击力)
– 实现攻击方法(人类攻击狗、狗攻击人类)
– 实现游戏流程(回合制战斗、判断胜负)
– 输出战斗过程和结果
二、面向对象设计
2.1 类设计
| 类名 | 作用 |
|---|---|
| Person | 表示人类角色,包含姓名、生命值、攻击力 |
| Dog | 表示狗角色,包含姓名、生命值、攻击力 |
| Game | 控制游戏流程,实现回合制战斗 |
2.2 属性设计
- Person类属性:
- String name:姓名
- int health:生命值(初始100)
-
int attackPower:攻击力(初始10)
-
Dog类属性:
- String name:姓名
- int health:生命值(初始80)
- int attackPower:攻击力(初始15)
2.3 方法设计
- Person类方法:
- void attack(Dog dog):攻击狗,减少狗的生命值
-
boolean isAlive():判断是否存活
-
Dog类方法:
- void attack(Person person):攻击人类,减少人类的生命值
-
boolean isAlive():判断是否存活
-
Game类方法:
- void start():启动游戏,控制回合制战斗
- void showStatus():显示当前双方状态
三、代码实现(完整示例)
3.1 Person类代码
public class Person {
private String name;
private int health;
private int attackPower;
// 构造方法
public Person(String name) {
this.name = name;
this.health = 100;
this.attackPower = 10;
}
// 攻击方法
public void attack(Dog dog) {
dog.setHealth(dog.getHealth() - this.attackPower);
System.out.println(this.name + " 攻击了 " + dog.getName() + ",造成了 " + this.attackPower + " 点伤害!");
}
// 判断是否存活
public boolean isAlive() {
return this.health > 0;
}
// Getter和Setter方法
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getHealth() { return health; }
public void setHealth(int health) { this.health = health; }
public int getAttackPower() { return attackPower; }
public void setAttackPower(int attackPower) { this.attackPower = attackPower; }
}
3.2 Dog类代码
public class Dog {
private String name;
private int health;
private int attackPower;
// 构造方法
public Dog(String name) {
this.name = name;
this.health = 80;
this.attackPower = 15;
}
// 攻击方法
public void attack(Person person) {
person.setHealth(person.getHealth() - this.attackPower);
System.out.println(this.name + " 攻击了 " + person.getName() + ",造成了 " + this.attackPower + " 点伤害!");
}
// 判断是否存活
public boolean isAlive() {
return this.health > 0;
}
// Getter和Setter方法
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getHealth() { return health; }
public void setHealth(int health) { this.health = health; }
public int getAttackPower() { return attackPower; }
public void setAttackPower(int attackPower) { this.attackPower = attackPower; }
}
3.3 Game类代码
public class Game {
private Person person;
private Dog dog;
// 构造方法
public Game(Person person, Dog dog) {
this.person = person;
this.dog = dog;
}
// 启动游戏
public void start() {
System.out.println("===== 人狗大战开始! =====");
System.out.println(person.getName() + " 生命值:" + person.getHealth() + ",攻击力:" + person.getAttackPower());
System.out.println(dog.getName() + " 生命值:" + dog.getHealth() + ",攻击力:" + dog.getAttackPower());
System.out.println("==========================");
// 回合制战斗
int round = 1;
while (person.isAlive() && dog.isAlive()) {
System.out.println("\n第 " + round + " 回合:");
// 人类攻击狗
person.attack(dog);
// 狗攻击人类
dog.attack(person);
// 显示当前状态
showStatus();
round++;
}
// 判断胜负
if (person.isAlive()) {
System.out.println("\n===== 游戏结束!" + person.getName() + " 获胜! =====");
} else {
System.out.println("\n===== 游戏结束!" + dog.getName() + " 获胜! =====");
}
}
// 显示当前状态
private void showStatus() {
System.out.println(person.getName() + " 当前生命值:" + person.getHealth());
System.out.println(dog.getName() + " 当前生命值:" + dog.getHealth());
}
}
3.4 主类代码
public class Main {
public static void main(String[] args) {
// 创建角色
Person person = new Person("张三");
Dog dog = new Dog("大黄");
// 启动游戏
Game game = new Game(person, dog);
game.start();
}
}
四、扩展功能
4.1 增加技能系统
- 人类可以学习技能(比如暴击,有20%概率造成2倍伤害)
- 狗可以学习技能(比如闪避,有15%概率躲避攻击)
4.2 增加道具系统
- 人类可以使用血瓶(恢复20点生命值)
- 狗可以使用骨头(恢复15点生命值)
4.3 增加难度设置
- 简单模式:人类攻击力+5,狗攻击力-5
- 困难模式:人类攻击力-5,狗攻击力+5
- 地狱模式:人类生命值-20,狗生命值+20
五、运行测试
5.1 编译代码
javac Person.java Dog.java Game.java Main.java
5.2 运行代码
java Main
5.3 测试案例
- 测试1:人类获胜(张三生命值剩余10,大黄生命值为-5)
- 测试2:狗获胜(大黄生命值剩余5,张三生命值为-10)
- 测试3:平局(双方生命值同时变为0)
六、常见问题解答
Q1: 代码编译报错?
A: 检查:
– 类名是否与文件名一致
– 缺少Getter/Setter方法
– 语法错误(比如分号、括号不匹配)
Q2: 游戏逻辑错误?
A: 检查:
– 攻击方法是否正确减少生命值
– 存活判断是否正确
– 回合制是否正确执行
Q3: 如何修改角色属性?
A: 修改构造方法中的默认值,或者在主类中调用Setter方法修改
Q4: 如何增加更多角色?
A: 继承Person类创建其他人类角色,继承Dog类创建其他狗角色
七、总结
Java人狗大战是一款非常适合初学者的面向对象编程练习项目,通过实现类的设计、属性和方法的定义,以及游戏流程的控制,能够很好地理解面向对象的核心概念。本文提供了完整的代码实现和扩展功能,帮助读者快速掌握Java面向对象编程的基本技能。
注:本文基于Java 8版本编写,具体实现可根据实际环境调整。