使用策略模式设计一个动作冒险类游戏
背景
- 动作冒险游戏:
游戏中有一系列角色(Character),包括国王(King)、皇后(Queen)、骑士(Knight)、妖怪(Troll),这些角色可以在游戏中每一次使用一个武器(Weapon)来攻击对方,并且可以在运行时切换武器,为了增加游戏的乐趣,可以有的武器包括:匕首、宝剑、斧头、弓箭等等,可能以后又更时髦的武器出现。使用策略模式来设计。
ClassDiagram图
部分代码展示
Character.java
package RPGDemo;
public class Character {
protected Weapon weapon;
protected String name = "Character";
protected int HP = 100;
//构造方法
public Character() {
}
public Character(String name) {
this.name = name;
}
public Character(String name,Weapon weapon) {
this.name = name;
this.weapon = weapon;
}
public Character(String name, Weapon weapon,int HP) {
this.name = name;
this.weapon = weapon;
this.HP = HP;
}
//普通方法
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void setHP(int hp) {
this.HP = hp;
}
public void attack(Character character) {
if(character.HP - weapon.getDamage() <= 0 ) {
character.HP = 0;
}
else {
character.HP = character.HP - weapon.getDamage();
}
System.out.println(name +" uses " + weapon.weaponName() + " to attack " + character.name + "!" );
}
public void disply() {//显示角色信息
if (this.HP>0) {
System.out.println("Character: " + name +"\n" + "Weapon: " + weapon.weaponName() + "\n" + "HP: " + HP);
}
else {
System.out.println("Character: " + name +" 【DEAD】 "+"!");
}
}
}
King.java
package RPGDemo;
public class King extends Character{
public King() {
name = "King";
}
public King(String name) {
this.name = name;
}
public King(String name, Weapon weapon) {
this.name = name;
this.weapon = weapon;
}
public King(String name, Weapon weapon,int hp) {
this.name = name;
this.weapon = weapon;
this.HP = hp;
}
}
Sword.java
package RPGDemo;
public class Sword implements Weapon{
String name = "Sword";
int damage_value = 10;
public String weaponName() {
return name;
}
public void setDamage(int damage) {
this.damage_value = damage;
}
public int getDamage() {
return damage_value;
}
}
Client.java
package RPGDemo;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Character king = new King();
Character queen = new Queen();
Character troll = new Troll();
Character knight = new Knight();
Weapon axWeapon = new Ax();
Weapon swordWeapon = new Sword();
Weapon daggerWeapon = new Dagger();
Weapon bowWeapon = new Bow();
//角色选择武器!!!
king.setWeapon(daggerWeapon);
queen.setWeapon(bowWeapon);
troll.setWeapon(axWeapon);
knight.setWeapon(swordWeapon);
//集体向怪物攻击!!!
System.out.println("----全体人类向怪物进行攻击!!----");
king.attack(troll);
queen.attack(troll);
knight.attack(troll);
//怪物向人类反击!!!
System.out.println("\n----怪物向全体人类进行反击!!----");
troll.attack(knight);
troll.attack(queen);
troll.attack(king);
//查看角色的基本信息
System.out.println("\n----查看所有角色具体信息----");
king.disply();
System.out.println("---------------------------");
knight.disply();
System.out.println("---------------------------");
queen.disply();
System.out.println("---------------------------");
troll.disply();
}
}
Client运行展示
瞎写,技术有限…有不合理之处,见谅(○´・д・)ノ