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

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

背景

  • 动作冒险游戏:
    游戏中有一系列角色(Character),包括国王(King)、皇后(Queen)、骑士(Knight)、妖怪(Troll),这些角色可以在游戏中每一次使用一个武器(Weapon)来攻击对方,并且可以在运行时切换武器,为了增加游戏的乐趣,可以有的武器包括:匕首、宝剑、斧头、弓箭等等,可能以后又更时髦的武器出现。使用策略模式来设计。

ClassDiagram图

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运行展示

在这里插入图片描述

瞎写,技术有限…有不合理之处,见谅(○´・д・)ノ

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值