使用策略模式设计一个动作冒险类游戏

背景

    动作冒险游戏: 游戏中有一系列角色(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运行展示

瞎写,技术有限…有不合理之处,见谅(○´・д・)ノ
经验分享 程序员 微信小程序 职场和发展