代码需求
java实现
(1)有很多的武器,包括弓箭(BowAndArrow)、魔杖(Wand)和剑(Sward),每种武器都具备攻击和防守两个行为。在每种行为实现中,打印相应的提示信息即可,例如“弓箭攻击力90,防守力80”。
(2)有很多的人物角色,包括射手(Shooter)、法师(Mags)和武士(Knight)。每种人物都包括姓名和武器两个属性,具有战斗、移动和变更武器的行为。
姓名属性是角色的身份(如射手的name默认就是“射手”),武器属性默认是射手用弓箭、法师用魔杖、武士用剑。
战斗行为包括用自身装备的武器进行攻击和防守。
移动行为则根据人物角色不同而不同,射手骑马,武士是奔跑,法师是瞬移(提示:具体实现打印信息即可)。
变更武器行为,改变角色自身的默认武器。
3)建立测试类,完成以下功能:
对于每种武器,定义一个对象
对于每种人物角色,定义两个对象,即两个武士、两个法师和两个射手
定义攻击团队1,里面包括一个武士、一个法师和一个射手,该团队使用默认的武器进行攻击和移动。
定义攻击团队2,里面包括一个武士、一个法师和一个射手,对于每种角色进行变更武器后攻击和移动,武士的武器换成弓箭、法师换成剑、射手换成法杖。
整体分析:
有很多不同的武器和人物,首先会想到继承,武器类和人物类,测试类
武器类:
具备攻击和防守两个行为。在每种行为实现中,打印相应的提示信息,弓箭(BowAndArrow)、魔杖(Wand)和剑(Sward),继承武器类并进行攻击和防御的方具体实现,武器类最好采用接口实现。
人物类:
具备名字和武器两个属性,首先实现其构造方法,初始化人物基类的名字和武器,最后定义人物的两个方法,攻击和移动。然后建立具体的人物类包括射手(Shooter)、法师(Mags)和武士(Knight)。每种人物继承人物基类都包括姓名和武器两个属性,具有战斗、移动和变更武器的行为。
测试类:
对于每种武器,定义一个对象
对于每种人物角色,定义两个对象,即两个武士、两个法师和两个射手
定义攻击团队1,里面包括一个武士、一个法师和一个射手,该团队使用默认的武器进行攻击和移动。
定义攻击团队2,里面包括一个武士、一个法师和一个射手,对于每种角色进行变更武器后攻击和移动,武士的武器换成弓箭、法师换成剑、射手换成法杖。
代码实现
整体java代码包和类的架构
武器类
武器基类Weapon
package weapon;
//实现武器
public interface Weapon
{
void attack();
void defense();
}
弓箭BowAndArrow
package weapon;
//弓箭
public class BowAndArrow implements Weapon
{
public void attack()
{
System.out.println("弓箭攻击力200");
}
public void defense()
{
System.out.println("弓箭防守力50");
}
}
魔杖Wand
package weapon;
// 魔杖
public class Wand implements Weapon
{
public void attack()
{
System.out.println("魔杖攻击力70");
}
public void defense()
{
System.out.println("魔杖防守力60");
}
}
剑Sword
package weapon;
//剑
public class Sword implements Weapon
{
public void attack()
{
System.out.println("剑攻击力80");
}
public void defense()
{
System.out.println("剑防守力70");
}
}
人物类
人物基类
package character;
import weapon.*;//导包
//实现人物角色
abstract class Character
{
public String name;
public Weapon weapon;
public Character(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setWeapon(Weapon weapon)
{
this.weapon = weapon;
}
public abstract void fight();
public abstract void move();
}
射手 Shooter
package character;
import weapon.*;
//射手
public class Shooter extends Character
{
public Shooter(String name)
{
super(name);
weapon = new BowAndArrow(); // 默认武器为弓箭
}
public void fight()
{
System.out.print(name + "使用" + weapon.getClass().getSimpleName());
weapon.attack();
weapon.defense();
}
public void move()
{
System.out.println(name + "骑马移动");
}
}
法师Mags
package character;
import weapon.*;
public class Mags extends Character
{
public Mags(String name)
{
super(name);
weapon = new Wand(); // 默认武器为魔杖
}
public void fight()
{
System.out.print(name + "使用" + weapon.getClass().getSimpleName());
weapon.attack();
weapon.defense();
}
public void move()
{
System.out.println(name + "瞬移移动");
}
}
武士Knight
package character;
import weapon.*;
//武士
public class Knight extends Character
{
public Knight(String name)
{
super(name);
weapon = new Sword(); // 默认武器为剑
}
public void fight()
{
System.out.print(name + "使用" + weapon.getClass().getSimpleName());
weapon.attack();
weapon.defense();
}
public void move()
{
System.out.println(name + "奔跑移动");
}
}
实现攻击团队AttackTeam
package character;
import weapon.*;
//实现攻击团队
public class AttackTeam {
private Knight knight;
private Mags mags;
private Shooter shooter;
public AttackTeam(Knight knight, Mags mags, Shooter shooter)
{
this.knight = knight;
this.mags = mags;
this.shooter = shooter;
}
public void attack()
{
knight.fight();
mags.fight();
shooter.fight();
}
public void move()
{
knight.move();
mags.move();
shooter.move();
}
public void changeWeapon()
{
knight.setWeapon(new BowAndArrow()); // 将武器换成弓箭
mags.setWeapon(new Sword()); // 将武器换成剑
shooter.setWeapon(new Wand()); // 将武器换成法杖
}
}
测试类
package text;
import weapon.*;
import character.*;
//测试类
public class Test
{
public static void main(String[] args)
{
// 创建武器
BowAndArrow bowAndArrow = new BowAndArrow();
Wand wand = new Wand();
Sword sword = new Sword();
// 创建角色
Shooter shooter1 = new Shooter("射手1");
Shooter shooter2 = new Shooter("射手2");
Mags mags1 = new Mags("法师1");
Mags mags2 = new Mags("法师2");
Knight knight1 = new Knight("武士1");
Knight knight2 = new Knight("武士2");
// 创建攻击团队1
AttackTeam attackTeam1 = new AttackTeam(knight1, mags1, shooter1);
System.out.println("攻击团队1默认武器");
attackTeam1.attack();
System.out.print("移动:");
attackTeam1.move();
System.out.println();
// 创建攻击团队2
AttackTeam attackTeam2 = new AttackTeam(knight2, mags2, shooter2);
System.out.println("攻击团队2换武器后");
attackTeam2.changeWeapon();
attackTeam2.attack();
System.out.print("移动:");
attackTeam2.move();
}
}
实现结果
结语:个人理解,仅供参考哈!肯定还有很多可以优化的地方,望大家多多指正,感谢感谢!