/*factory(工厂)
*/
/*MageRoleFactory*/
package finalexam.factory;
import finalexam.role.*;
/**
* @Author PoX21s
* @Date: 2021/12/4 11:57
* @Version 1.0
*/
/*
* 法师工厂,返回一个具体的法师实例
* */
public class MageRoleFactory implements RoleFactory{
//持有一个法师
private MageRole mageRole;
//根据用户传入的创建类别,创建法师和设置角色名字
public Role getRole(String type, String name){
if (type.equals("火球法师")){
mageRole = new MageRole(name,new FireballMagic());
}else if (type.equals("雷电法师")){
mageRole = new MageRole(name,new ThunderMagic());
}else if (type.equals("治疗法师")){
mageRole = new MageRole(name,new RecoveryMagic());
}else if (type.equals("强力法师")){
mageRole = new MageRole(name,new AssaultMagic());
}
return mageRole;
}
}
/*RoleFactory*/
package finalexam.factory;
import finalexam.role.Role;
/*
* 定义工厂接口
* */
public interface RoleFactory {
// 基本方法,返回一个指定的角色
Role getRole(String type, String name);
}
/*WarriorRoleFactory*/
package finalexam.factory;
import finalexam.role.*;
/**
* @Author PoX21s
* @Date: 2021/12/4 12:06
* @Version 1.0
*/
public class WarriorRoleFactory implements RoleFactory{
private WarriorRole warriorRole;
public Role getRole(String type, String name){
if (type.equals("冲锋战士")){
warriorRole = new WarriorRole(name,new Axe());
} else if (type.equals("独立战士")){
warriorRole = new WarriorRole(name,new Stick());
} else if (type.equals("快枪战士")){
warriorRole = new WarriorRole(name,new Spear());
} else if (type.equals("无畏战士")){
warriorRole = new WarriorRole(name,new Sword());
}
return warriorRole;
}
}
/*role*/
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:07
* @Version 1.0
*/
/*
* 加强攻击魔法
* - 使攻击效果加强
* */
public class AssaultMagic extends MagicBehavior {
public AssaultMagic() {
setName("攻击加强");
setEffect(30.0);
setMp(10.0);
}
public void attackByMagic() {
System.out.println("使用"+getName()+"魔法,造成"+ getEffect()+"点伤害;扣除"+getMp()+"点魔法值。");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:06
* @Version 1.0
*/
/*
* 武器
* - 斧头
* */
public class Axe extends WeaponBehavior{
public Axe() {
setAtk(30);
}
public void attackByWeapon() {
System.out.println("使用武器-斧头攻击,造成"+getAtk()+"伤害");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:03
* @Version 1.0
*/
/*
* 具体魔法攻击 -- 火球术
* */
public class FireballMagic extends MagicBehavior {
/*
* 初始赋值,技能的名字、影响和蓝量消耗
* */
public FireballMagic() {
setName("火球");
setEffect(50.0);
setMp(20.0);
}
/*
* 重写相关方法,实现不同技能的不同效果
* */
@Override
public void attackByMagic() {
System.out.println("使用"+getName()+"魔法,造成"+ getEffect()+"点伤害;扣除"+getMp()+"点魔法值。");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/12/4 11:34
* @Version 1.0
*/
/*
* 法师
* - 法师可以使用魔法攻击
* - 魔法比基本角色多50点
* - 血量比基本角色少10点
* */
public class MageRole extends Role{
//持有魔法攻击
private MagicBehavior magicBehavior;
/*
* 初始赋值,基本属性
* */
public MageRole(String name, MagicBehavior magicBehavior) {
super(name);
setHp(90.0);
setMp(150.0);
this.magicBehavior = magicBehavior;
}
//重写相关方法实现技能使用
@Override
public void skillAttack() {
//使用技能
magicBehavior.attackByMagic();
//技能使用后扣取相应的蓝量
this.setMp(getMp() - magicBehavior.getMp());
}
public MagicBehavior getMagicBehavior() {
return magicBehavior;
}
@Override
public String toString() {
return "角色属性:" +
"名字为:'" + getName() + '\''+
", 生命值为:" + getHp() +
", 魔法值为:" + getMp() +
", 攻击力为:" + getAtk() +
", 防御力为:" + getDef() + ", 拥有技能为:" +
getMagicBehavior().getName();
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:02
* @Version 1.0
*/
/*
* 魔法攻击抽象类,定义魔法攻击的基础属性和基本方法。
* */
public abstract class MagicBehavior{
/*
* 基础属性
* */
private double mp; // 技能所需要的消耗蓝量
private double effect; // 使用技能造成的影响
private String name; // 魔法技能的名字
/*
* 基本方法
* */
// 使用魔法技能
abstract void attackByMagic();
public double getMp() {
return mp;
}
public void setMp(double mp) {
this.mp = mp;
}
public double getEffect() {
return effect;
}
public void setEffect(double effect) {
this.effect = effect;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:04
* @Version 1.0
*/
/*
* 恢复魔法
* - 恢复血量
* */
public class RecoveryMagic extends MagicBehavior {
public RecoveryMagic() {
setName("恢复");
setEffect(60.0);
setMp(30.0);
}
public void attackByMagic() {
System.out.println("使用"+getName()+"魔法,恢复"+ getEffect()+"点生命值;扣除"+getMp()+"点魔法值。");
}
}
package finalexam.role;
import finalexam.state.*;
/**
* @Author PoX21s
* @Date: 2021/12/4 11:17
* @Version 1.0
*/
/*
* 定义一个角色抽象类,其他角色从中扩展。
* - 默认初始化属性
* */
public class Role {
private String name; // 人物名字
private double hp = 100.0; // 血量
private double mp = 100.0; // 蓝量
private double atk = 10; // 基础攻击力
private double def = 10; // 防御力
// 状态管理
InitState initState = new InitState(this);
DeadState deadState = new DeadState(this);
DieRightState dieRightState = new DieRightState(this);
FightState fightState = new FightState(this);
MoveState moveState = new MoveState(this);
// 初始状态
private State state = initState; // 初始状态
// 玩家在游戏中的坐标
private int x = 1; // 默认初始化在起点
private int y = 1;
// 人物有参构造器
public Role(String name) {
this.name = name;
}
// 普通攻击
public void Attack(){
System.out.println("进行普通攻击,造成"+getAtk()+"点伤害。");
}
// 技能攻击
/*
* 基本人物是不能使用技能攻击的,默认会抛出一个异常
* 后续的扩展人物,重写方法,实现不同人物效果
* */
public void skillAttack(){
throw new RuntimeException();
}
/*
* 玩家基本功能,移动和攻击
* 调用具体状态下的具体方法
* */
public boolean move(){
return state.move();
}
public int fight(){
return state.fight();
}
// 防御
public void Defense(){
System.out.println("基本防御");
}
// 状态设置
public void setDeadState() {
this.state = deadState;
}
public void setDieRightState() {
this.state = dieRightState;
}
public void setFightState() {
this.state = fightState;
}
public void setMoveState() {
this.state = moveState;
}
@Override
public String toString() {
return "角色属性:" +
"名字为:'" + name + '\''+
", 生命值为:" + hp +
", 魔法值为:" + mp +
", 攻击力为:" + atk +
", 防御力为:" + def;
}
// 人物属性的get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHp() {
return hp;
}
public void setHp(double hp) {
this.hp = hp;
}
public double getMp() {
return mp;
}
public void setMp(double mp) {
this.mp = mp;
}
public double getAtk() {
return atk;
}
public void setAtk(double atk) {
this.atk = atk;
}
public double getDef() {
return def;
}
public void setDef(double def) {
this.def = def;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:06
* @Version 1.0
*/
/*
* 武器 - 枪
* */
public class Spear extends WeaponBehavior{
public Spear() {
setAtk(25.0);
}
public void attackByWeapon() {
System.out.println("使用武器-枪攻击,造成"+getAtk()+"伤害");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:05
* @Version 1.0
*/
/*
* 武器
* - 权杖
* */
public class Stick extends WeaponBehavior{
public Stick() {
setAtk(40);
}
public void attackByWeapon() {
System.out.println("使用武器-权杖攻击,造成"+getAtk()+"伤害");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:05
* @Version 1.0
*/
/*
* 武器
* - 剑
* */
public class Sword extends WeaponBehavior{
public Sword() {
setAtk(27);
}
public void attackByWeapon() {
System.out.println("使用武器-剑攻击,造成"+getAtk()+"伤害");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/11/26 19:04
* @Version 1.0
*/
public class ThunderMagic extends MagicBehavior {
public ThunderMagic() {
setName("雷电");
setEffect(60.0);
setMp(25.0);
}
public void attackByMagic() {
System.out.println("使用"+getName()+"魔法,造成"+ getEffect()+"点伤害;扣除"+getMp()+"点魔法值。");
}
}
package finalexam.role;
/**
* @Author PoX21s
* @Date: 2021/12/4 11:43
* @Version 1.0
*/
/*
* 战士
* - 使用武器攻击
* - 血量比基本角色初始多10点
* - 魔法比基本角色少40点
* */
public class WarriorRole extends Role{
private WeaponBehavior weaponBehavior;
public WarriorRole(String name, WeaponBehavior weaponBehavior) {
super(name);
setHp(110);
setMp(60);
this.weaponBehavior = weaponBehavior;
}
@Override
public void Attack() {
weaponBehavior.attackByWeapon();
}
public WeaponBehavior getWeaponBehavior() {
return weaponBehavior;
}
}
package finalexam.role;
public abstract class WeaponBehavior {
private double atk; // 攻击力值
abstract void attackByWeapon();
public double getAtk() {
return atk;
}
public void setAtk(double atk) {
this.atk = atk;
}
}
/*state*/
package finalexam.state;
import finalexam.role.Role;
/**
* @Author PoX21s
* @Date: 2021/12/4 13:01
* @Version 1.0
*/
public class DeadState implements State{
private Role role;
public DeadState(Role role) {
this.role = role;
}
@Override
public boolean move() {
System.out.println("您已死亡,不能移动,请重新开始游戏...");
return false;
}
@Override
public int fight() {
System.out.println("您已死亡,不能战斗,请重新开始游戏...");
return 0;
}
@Override
public void fightState(String s) {
}
@Override
public void Result() {
System.out.println("您已死亡,请重新开始游戏...");
}
}
package finalexam.state;
import finalexam.role.Role;
/**
* @Author PoX21s
* @Date: 2021/12/4 13:01
* @Version 1.0
*/
/*
* 濒死状态
* - 生命值小于10%
* */
public class DieRightState implements State{
private Role role;
public DieRightState(Role role) {
this.role = role;
}
@Override
public boolean move() {
System.out.println("当前为濒死状态,不能移动,请恢复到健康血量以后再尝试移动...");
return false;
}
@Override
public int fight() {
System.out.println("当前为濒死状态,不能战斗,请恢复到健康血量以后再尝试战斗...");
return 0;
}
@Override
public void fightState(String s) {
}
@Override
public void Result() {
if (role.getHp() >=0 && role.getHp() <= 20){
role.setDieRightState();
} else if(role.getHp() > 20 && role.getHp() <= 90){
role.setMoveState();
} else {
role.setDeadState();
}
}
}
package finalexam.state;
import finalexam.role.MageRole;
import finalexam.role.Role;
import finalexam.role.WarriorRole;
import java.util.Scanner;
/**
* @Author PoX21s
* @Date: 2021/12/4 13:00
* @Version 1.0
*/
/*
* 战斗状态
* */
public class FightState implements State{
private Role role;
public FightState(Role role) {
this.role = role;
}
@Override
public boolean move() {
System.out.println("当前为战斗状态不能移动...");
return false;
}
@Override
public int fight() {
if (role instanceof MageRole){
System.out.println("攻击类型:-普通攻击- -魔法攻击-");
Scanner scanner = new Scanner(System.in);
String fight = scanner.nextLine();
if (fight.equals("普通攻击")){
role.Attack();
return (int) role.getAtk();
} else if (fight.equals("魔法攻击")){
role.skillAttack();
role.setMp(role.getMp()-((MageRole) role).getMagicBehavior().getMp());
return (int) ((MageRole) role).getMagicBehavior().getEffect();
}
} else if (role instanceof WarriorRole){
System.out.println("-普通攻击- -武器攻击-");
Scanner scannerW = new Scanner(System.in);
String fight = scannerW.nextLine();
role.Attack();
return (int) ((WarriorRole) role).getWeaponBehavior().getAtk();
}
return 0;
}
@Override
public void fightState(String s) {
}
@Override
public void Result() {
if (role.getHp() >=0 && role.getHp() <= 20){
System.out.println("战斗胜利");
role.setDieRightState();
} else if(role.getHp() > 20 && role.getHp() <= 90){
System.out.println("战斗胜利");
role.setMoveState();
} else {
System.out.println("战斗失败");
role.setDeadState();
}
}
}
// if (role.getState() instanceof FightState){
//
// }
package finalexam.state;
import finalexam.role.Role;
import java.util.Scanner;
/**
* @Author PoX21s
* @Date: 2021/12/4 12:28
* @Version 1.0
*/
public class InitState implements State{
private Role role;
public InitState(Role role) {
this.role = role;
}
@Override
public boolean move() {
Scanner moveSc = new Scanner(System.in);
System.out.println("W - 向上移动");
System.out.println("S - 向下移动");
System.out.println("A - 向左移动");
System.out.println("D - 向右移动");
String move = moveSc.nextLine();
switch (move) {
case "A":
role.setY(role.getY() - 1);
break;
case "D":
role.setY(role.getY() + 1);
break;
case "W":
role.setX(role.getX() - 1);
break;
case "S":
role.setX(role.getX() + 1);
break;
}
return true;
}
@Override
public int fight() {
return 0;
}
@Override
public void fightState(String s) {
if(s.equals("y")){
role.setFightState();
}
}
@Override
public void Result() {
if (role.getHp() >=0 && role.getHp() <= 20){
role.setDieRightState();
} else if(role.getHp() > 20 && role.getHp() <= 90){
role.setMoveState();
} else {
role.setDeadState();
}
}
}
package finalexam.state;
import finalexam.role.Role;
import java.util.Scanner;
/**
* @Author PoX21s
* @Date: 2021/12/4 13:00
* @Version 1.0
*/
public class MoveState implements State{
private Role role;
public MoveState(Role role) {
this.role = role;
}
@Override
public boolean move() {
Scanner moveSc = new Scanner(System.in);
System.out.println("W - 向上移动");
System.out.println("S - 向下移动");
System.out.println("A - 向左移动");
System.out.println("D - 向右移动");
String move = moveSc.nextLine();
switch (move) {
case "A":
role.setY(role.getY() - 1);
break;
case "D":
role.setY(role.getY() + 1);
break;
case "W":
role.setX(role.getX() - 1);
break;
case "S":
role.setX(role.getX() + 1);
break;
}
return true;
}
@Override
public int fight() {
System.out.println("当前为移动状态,不能进入战斗...");
return 0;
}
@Override
public void fightState(String s) {
}
@Override
public void Result() {
if (role.getHp() >=0 && role.getHp() <= 20){
role.setDieRightState();
} else if(role.getHp() > 20 && role.getHp() <= 90){
role.setMoveState();
} else {
role.setDeadState();
}
}
}
package finalexam.state;
/**
* @Author PoX21s
* @Date: 2021/12/4 12:27
* @Version 1.0
*/
/*
* 状态接口,定义基本的方法和状态切换
* */
public interface State {
// 玩家移动,根据移动到地图的位置进行状态模式的切换
boolean move();
// 玩家进行战斗
int fight();
// 切换为战斗状态
void fightState(String s);
// 状态切换为濒死、死亡、初始化或移动状态
void Result();
}
/*Client*/
package finalexam;
import finalexam.factory.MageRoleFactory;
import finalexam.factory.RoleFactory;
import finalexam.factory.WarriorRoleFactory;
import finalexam.role.Role;
import java.util.Scanner;
/**
* @Author PoX21s
* @Date: 2021/12/4 11:45
* @Version 1.0
*/
public class Client {
private static Role role; // 每局游戏的角色
private static RoleFactory rf; // 角色工厂
static String[][] map = new String[3][3]; // 游戏地图
static boolean flag = true; // 游戏结束/进行判断标志位
// 游戏初始化
static {
try {
initGame();
creatMap();
} catch (Exception e) {
e.printStackTrace();
}
}
// 主程序
public static void main(String[] args) throws Exception {
Client client = new Client();
/*
* 开始游戏,直到玩家选择退出。
* */
while (flag){
client.action();
}
}
// 初始化游戏加载
public static void initGame() throws Exception {
System.out.println("======欢迎来到 - xxxxxx======");
System.out.println("游戏分为法师和战士,当前游戏角色列表为:");
System.out.println("====法师===");
System.out.println("法师 - 火球法师");
System.out.println("法师 - 雷电法师");
System.out.println("法师 - 治疗法师");
System.out.println("法师 - 强力法师");
System.out.println();
System.out.println("====战士====");
System.out.println("战士 - 冲锋战士");
System.out.println("战士 - 独立战士");
System.out.println("战士 - 快枪战士");
System.out.println("战士 - 无畏战士");
System.out.println();
System.out.println("请输入您创建的角色类别:");
Scanner sc = new Scanner(System.in);
String roleType = sc.nextLine();
/*
* 根据类型选择相应的工厂,然后进行角色创建返回。
* */
if (roleType.equals("法师")){
rf = new MageRoleFactory();
}else if (roleType.equals("战士")){
rf = new WarriorRoleFactory();
}
System.out.println("请输入您想扮演角色类别的名称:");
String roleTypeName = sc.nextLine();
System.out.println("请输入您在游戏中的名字:");
String roleName = sc.nextLine();
System.out.println("请稍后,正在为您生成角色....");
role = rf.getRole(roleTypeName, roleName);
System.out.println("角色生成成功...");
System.out.println();
System.out.println(role.toString());
}
// 创建地图
public static void creatMap(){
map[0][0] = "商家";
map[0][1] = "空地";
map[0][2] = "家 ";
map[1][0] = "怪一";
map[1][1] = "起点";
map[1][2] = "怪二";
map[2][0] = "城市";
map[2][1] = "怪三";
map[2][2] = "空地";
}
// 输出地图
public static void printMap(){
for (String[] chars : map) {
for (String aChar : chars) {
System.out.printf("%5s",aChar);
}
System.out.println();
}
}
// 玩家操作
public void action(){
System.out.println();
Scanner sc = new Scanner(System.in);
System.out.println("操作:-移动- -查看人物信息- -查看地图- -恢复- -退出游戏-");
String action = sc.nextLine();
switch (action){
case "移动":
roleMove();
break;
case "查看人物信息":
System.out.println("人物当前位置为: "+map[role.getX()][role.getY()]);
System.out.println();
System.out.println(role.toString());
break;
case "退出游戏":
flag = false;
System.out.println("再见~~");
break;
case "查看地图":
printMap();
break;
case "恢复":
seeState();
role.getState().Result();
break;
default:
System.out.println("无法识别,请输入正确操作。");
break;
}
}
// 血量恢复
public void seeState(){
if (role.getHp() >= 10){
role.setHp(role.getHp()+50);
System.out.println("已恢复50点生命值,当前生命值为: "+role.getHp());
} else if (role.getHp() <= 0){
System.out.println("您已死亡,无法恢复状态,请重新开始游戏");
}
role.getState().Result();
}
// 玩家移动
public void roleMove(){
if (role.move())
select();
}
// 进一步选择
public void select(){
System.out.println("当前位置为: "+map[role.getX()][role.getY()]);
switch (map[role.getX()][role.getY()]) {
case "怪一": {
System.out.println("是否进入战斗?(y/n)");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
if (s.equals("y")) {
role.getState().fightState(s);
fightGA();
} else {
role.getState().fightState(s);
action();
}
break;
}
case "怪二": {
System.out.println("是否进入战斗?(y/n)");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
if (s.equals("y")) {
role.getState().fightState(s);
fightGB();
} else {
role.getState().fightState(s);
action();
}
break;
}
case "怪三": {
System.out.println("是否进入战斗?(y/n)");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
if (s.equals("y")) {
role.getState().fightState(s);
fightGC();
} else {
role.getState().fightState(s);
action();
}
break;
}
default:
action();
break;
}
}
// 玩家战斗
public int fight(){
return role.fight();
}
// 怪物
public void fightGA(){
int hp = 30;
System.out.println("进入战斗~");
while (hp > 0 && role.getHp() > 0){
System.out.println("怪一生命值:"+hp);
System.out.println("怪一发动攻击,造成10点伤害");
role.setHp(role.getHp() - 10);
System.out.println("轮到您发动攻击,请选择:");
//玩家战斗,发动攻击
int fight = fight();
hp -= fight;
}
role.getState().Result();
}
public void fightGB(){
System.out.println();
int hp = 1000;
System.out.println("进入战斗~");
while (hp > 0 && role.getHp() > 0){
System.out.println();
System.out.println("怪二当前生命值:"+hp);
System.out.println("怪二发动攻击,造成50点伤害");
role.setHp(role.getHp() - 50);
System.out.println();
System.out.println("轮到您发动攻击,请选择:");
int fight = fight();
hp -= fight;
}
role.getState().Result();
}
public void fightGC(){
System.out.println();
int hp = 120;
System.out.println("进入战斗~");
while (hp > 0 && role.getHp() > 0){
System.out.println();
System.out.println("怪三当前生命值:"+hp);
System.out.println("怪三发动攻击,对您造成40点伤害");
role.setHp(role.getHp() - 40);
System.out.println();
System.out.println("轮到您发动攻击,请选择:");
int fight = fight();
hp -= fight;
}
role.getState().Result();
}
}
/* if (role.getState() instanceof FightState){
if (role instanceof MageRole){
System.out.println("攻击类型:-普通攻击- -魔法攻击-");
Scanner = new Scanner(System.in);
String fight = scanner.nextLine();
if (fight.equals("普通攻击")){
role.Attack();
return (int) role.getAtk();
} else if (fight.equals("魔法攻击")){
role.skillAttack();
role.setMp(role.getMp()-((MageRole) role).getMagicBehavior().getMp());
return (int) ((MageRole) role).getMagicBehavior().getEffect();
}
} else if (role instanceof WarriorRole){
System.out.println("-普通攻击- -武器攻击-");
Scanner scannerW = new Scanner(System.in);
String fight = scannerW.nextLine();
role.Attack();
return (int) ((WarriorRole) role).getWeaponBehavior().getAtk();
}
} else {
State state = role.getState();
state.fight();
}
return 0;*/
// role.move();
// if (role.getState() instanceof MoveState || role.getState() instanceof InitState)
// select();
/*// 战斗结果
public void fightResult(){
if (role.getHp() > 0){
System.out.println("赢得战斗!");
}else {
System.out.println("战斗失败。");
System.out.println("您已死亡请重新开始游戏。");
}
role.getState().fightResult();
}*/
/* // 状态判定
*//* public void stateIf(){
if (role.getHp() >=0 && role.getHp() <= 20){
role.setDieRightState();
} else if(role.getHp() > 20 && role.getHp() <= 90){
role.setMoveState();
} else {
role.setDeadState();
}
}*/
/*Test*/
package finalexam;
import finalexam.factory.MageRoleFactory;
import finalexam.role.FireballMagic;
import finalexam.role.MageRole;
import finalexam.role.Role;
import finalexam.state.FightState;
/**
* @Author PoX21s
* @Date: 2021/12/15 15:19
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
// FightState = new FightState();
// fightState.fight();
}
}










