Java面向对象编程实战:模拟法师与战士对战
使用Java模拟精彩的法师与战士对战
想要学习如何使用Java编写简单的回合制游戏吗?本文将带你一步步实现一个法师与战士对战的模拟程序,并在过程中学习面向对象编程的核心概念。
游戏规则:
- 法师初始生命值为80,战士初始生命值为100。* 每个回合随机选择一位角色行动。* 行动的角色可以选择练习或攻击: * 练习:法师伤害值+20,战士伤害值+16。 * 攻击:使用武器攻击对方,造成等同于武器攻击力的伤害。* 游戏结束的条件是一方生命值小于等于0,另一方获胜。
**代码实现:**javaimport java.util.Random;
// 角色类class Character { private String name; private int damage; private int health;
public Character(String name, int damage, int health) { this.name = name; this.damage = damage; this.health = health; }
public String getName() { return name; }
public int getDamage() { return damage; }
public void setDamage(int damage) { this.damage = damage; }
public int getHealth() { return health; }
public void setHealth(int health) { this.health = health; }
public void attack(Character opponent) { // Placeholder for attack method }
public void practice() { // Placeholder for practice method }}
// 武器类class Weapon { private String name; private int attack; private String material;
public Weapon(String name, int attack, String material) { this.name = name; this.attack = attack; this.material = material; }
public String getName() { return name; }
public int getAttack() { return attack; }
public String getMaterial() { return material; }}
// 法师类class Mage extends Character { private Weapon weapon;
public Mage(String name, int damage, int health, Weapon weapon) { super(name, damage, health); this.weapon = weapon; }
@Override public void attack(Character opponent) { System.out.println(super.getName() + ' attacks ' + opponent.getName() + ' with a staff.'); opponent.setHealth(opponent.getHealth() - weapon.getAttack()); }
@Override public void practice() { System.out.println(super.getName() + ' practices and increases damage by 20.'); super.setDamage(super.getDamage() + 20); }}
// 战士类class Warrior extends Character { private Weapon weapon;
public Warrior(String name, int damage, int health, Weapon weapon) { super(name, damage, health); this.weapon = weapon; }
@Override public void attack(Character opponent) { System.out.println(super.getName() + ' attacks ' + opponent.getName() + ' with a sword.'); opponent.setHealth(opponent.getHealth() - weapon.getAttack()); }
@Override public void practice() { System.out.println(super.getName() + ' practices and increases damage by 16.'); super.setDamage(super.getDamage() + 16); }}
// 测试类public class TestBattle { public static void main(String[] args) { // 创建武器 Weapon staff = new Weapon('Staff', 20, 'Wood'); Weapon sword = new Weapon('Sword', 16, 'Steel');
// 创建法师和战士 Mage mage = new Mage('Mage', 40, 80, staff); Warrior warrior = new Warrior('Warrior', 50, 100, sword);
Random random = new Random();
while (mage.getHealth() > 0 && warrior.getHealth() > 0) { int randomNumber = random.nextInt(2);
if (randomNumber == 0) { mage.practice(); warrior.attack(mage); } else { warrior.practice(); mage.attack(warrior); }
System.out.println('Mage health: ' + mage.getHealth()); System.out.println('Warrior health: ' + warrior.getHealth()); System.out.println(); }
if (mage.getHealth() <= 0) { System.out.println('Warrior wins!'); } else { System.out.println('Mage wins!'); } }}
代码解读:
- 创建角色类(Character): 包含姓名、伤害值、生命值等属性,以及攻击、练习等方法。2. 创建武器类(Weapon): 包含武器名称、攻击力、材质等属性。3. 创建法师类(Mage)和战士类(Warrior): 继承自角色类,并分别实现各自的攻击和练习方法。4. 在测试类(TestBattle)中: * 创建法师和战士实例,并为其配备武器。 * 使用循环模拟战斗过程,直到一方生命值小于等于0。 * 输出战斗结果,宣布获胜方。
学习要点:
- 封装: 将属性私有化,并提供公有的getter和setter方法来访问和修改属性。* 继承: 法师类和战士类继承自角色类,并重写了父类的方法,实现了代码的复用。* 多态: 通过父类引用指向子类对象,调用相同的方法,展现不同的行为。
希望通过这个简单的游戏例子,你能更好地理解Java面向对象编程的精髓,并开始尝试编写属于自己的小游戏!
原文地址: https://www.cveoy.top/t/topic/Sav 著作权归作者所有。请勿转载和采集!