使用策略模式设计一个动作冒险类游戏
背景
-
动作冒险游戏: 游戏中有一系列角色(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 +" " + "Weapon: " + weapon.weaponName() + " " + "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(" ----怪物向全体人类进行反击!!----"); troll.attack(knight); troll.attack(queen); troll.attack(king); //查看角色的基本信息 System.out.println(" ----查看所有角色具体信息----"); king.disply(); System.out.println("---------------------------"); knight.disply(); System.out.println("---------------------------"); queen.disply(); System.out.println("---------------------------"); troll.disply(); } }
Client运行展示
瞎写,技术有限…有不合理之处,见谅(○´・д・)ノ