Java基于面向对象实现一个战士小游戏
思路
-
定义一个
Warrior
类,该类具有以下属性: -
姓名
- 体力值
- 攻击值
- 防御值
该类还应该具有以下方法:
attack(Warrior)
表示攻击另一个战士,需要传入被攻击的战士对象作为参数defense()
表示进行防御-
rest()
表示进行休息,恢复一定的体力值 -
编写
Game
类,该类作为游戏的主类,应该具有以下属性: -
player1
表示玩家1所选的战士 player2
表示玩家2所选的战士round
表示当前回合数
该类还应该具有以下方法:
getPlayer1()
和getPlayer2()
分别返回玩家1和玩家2所选的战士对象start()
表示游戏开始roundStart()
表示每个回合开始roundEnd()
表示每个回合结束attack()
表示当前玩家进行攻击defense()
表示当前玩家进行防御
代码实现
Warrior
类
public class Warrior {
private String name;
private int health;
private int attack;
private int defense;
public Warrior(String name, int health, int attack, int defense) {
this.name = name;
this.health = health;
this.attack = attack;
this.defense = defense;
}
public void attack(Warrior enemy) {
int damage = this.attack - enemy.defense;
if (damage > 0) {
enemy.health -= damage;
System.out.println(this.name + "攻击了" + enemy.name + ",造成了" + damage + "点伤害。");
} else {
System.out.println(this.name + "攻击了" + enemy.name + ",但是" + enemy.name + "的防御值太高了,没有造成任何伤害。");
}
}
public void defense() {
System.out.println(this.name + "进行了防御。");
}
public void rest() {
this.health += 10;
System.out.println(this.name + "进行了休息,恢复了10点体力值,当前体力值为" + this.health + "。");
}
public boolean isAlive() {
return this.health > 0;
}
public String getName() {
return this.name;
}
public int getHealth() {
return this.health;
}
public int getAttack() {
return this.attack;
}
public int getDefense() {
return this.defense;
}
}
Game
类
import java.util.Random;
import java.util.Scanner;
public class Game {
private Warrior player1;
private Warrior player2;
private int round;
public Game(Warrior player1, Warrior player2) {
this.player1 = player1;
this.player2 = player2;
this.round = 1;
}
public Warrior getPlayer1() {
return this.player1;
}
public Warrior getPlayer2() {
return this.player2;
}
public void start() {
System.out.println("游戏开始!");
Scanner scanner = new Scanner(System.in);
while (player1.isAlive() && player2.isAlive()) {
System.out.println("第" + round + "回合开始," + player1.getName() + " vs " + player2.getName() + ":");
roundStart();
System.out.println("第" + round + "回合结束。");
round++;
System.out.println("按任意键继续...");
scanner.nextLine();
}
if (player1.isAlive()) {
System.out.println(player1.getName() + "获胜!");
} else {
System.out.println(player2.getName() + "获胜!");
}
}
private void roundStart() {
Warrior current = getCurrentPlayer();
System.out.println(current.getName() + "的回合:");
System.out.println(current.getName() + ",请选择你的行动:");
System.out.println("1. 攻击");
System.out.println("2. 防御");
System.out.println("3. 休息");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
switch (choice) {
case 1:
attack();
break;
case 2:
defense();
break;
case 3:
current.rest();
break;
default:
System.out.println("无效的选择!");
}
}
private void roundEnd() {
System.out.println("回合结束,双方体力值:");
System.out.println(player1.getName() + ": " + player1.getHealth());
System.out.println(player2.getName() + ": " + player2.getHealth());
}
private void attack() {
Warrior current = getCurrentPlayer();
Warrior enemy = getEnemy();
current.attack(enemy);
}
private void defense() {
Warrior current = getCurrentPlayer();
current.defense();
}
private Warrior getCurrentPlayer() {
int random = new Random().nextInt(2);
return random == 0 ? player1 : player2;
}
private Warrior getEnemy() {
Warrior current = getCurrentPlayer();
return current == player1 ? player2 : player1;
}
}
示例说明
以下是两个示例。
示例1:玩家1攻击玩家2
public class Main {
public static void main(String[] args) {
Warrior player1 = new Warrior("张三", 100, 20, 10);
Warrior player2 = new Warrior("李四", 100, 15, 15);
Game game = new Game(player1, player2);
game.start();
}
}
这个例子中,玩家1的攻击值(20)比玩家2的防御值(15)高,所以玩家1能够对玩家2造成伤害。假设玩家1选择攻击操作,会输出以下信息:
张三的回合:
张三,请选择你的行动:
1. 攻击
2. 防御
3. 休息
1
张三攻击了李四,造成了5点伤害。
回合结束,双方体力值:
张三: 100
李四: 95
按任意键继续...
可以看到,玩家1攻击了玩家2,对其造成了5点伤害。
示例2:玩家2防御
public class Main {
public static void main(String[] args) {
Warrior player1 = new Warrior("张三", 100, 20, 10);
Warrior player2 = new Warrior("李四", 100, 15, 15);
Game game = new Game(player1, player2);
game.start();
}
}
这个例子中,假设玩家1选择攻击操作,玩家2选择防御操作,会输出以下信息:
张三的回合:
张三,请选择你的行动:
1. 攻击
2. 防御
3. 休息
1
张三攻击了李四,但是李四的防御值太高了,没有造成任何伤害。
回合结束,双方体力值:
张三: 100
李四: 100
按任意键继续...
可以看到,玩家2选择了防御操作,成功抵挡住了玩家1的攻击。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基于面向对象实现一个战士小游戏 - Python技术站