两个阵营互打的回合制游戏
- 定义一个游戏生物基类(Sprite)
- 下面有4种继承:英雄(Hero),远程-弓箭手(Archer),哥布林(Goblin),远程-哥布林投矛手(GoblinHunter)
- 共有的属性:名字(name),等级(lv),生命(hp),攻击力(atk),防御力(defense),攻速(speed),暴击(cri率),立场(Stand)对应(红方=Red,蓝方Blue),远程、近程(range)对应(近战=Near,远程=Far)
- 把4个角色都定义接口叫IFighter
- 加入角色可以进行自动战斗,攻速为每多少回合攻击一次,每回合都有机会产生暴击(暴击=伤害*2),战斗采用回合制,每个回合角色都有一次攻击机会,对打优先打对方近战类,当近战类死了再打远程
- 设定X回合,战斗过程输出文字战报
1.写一个基类也就是父类Sprite
public abstract class Sprite {
protected String name;
protected int lv;
protected int hp;
protected int maxhp;
protected int atk;
protected int defense;
protected int speed;
protected double cri;
protected StandEnum stand;
protected RangeEnum range;
protected StatusEnum status;
protected int count = 0;
public Sprite(String name, int lv, int maxhp, int atk, int defense, int speed, double cri, StandEnum stand, RangeEnum range) {
this.name = name;
this.lv = lv;
this.maxhp = maxhp;
this.hp = this.maxhp;
this.atk = atk;
this.defense = defense;
this.speed = speed;
this.cri = cri;
this.stand = stand;
this.range = range;
this.status = StatusEnum.NORMAL;
}
/**
*战斗的处理函数
*/
public void fighting(IFighter enemy) {
int damage = this.atk;//伤害值
boolean isCritical = Math.random() < cri;//比随机数大,说明暴击生效。比随机数小,说明暴击没生效
enemy.damage(damage, isCritical);//将伤害值和暴击率传入伤害计算函数内
this.status = StatusEnum.CD;//攻击完后,进入CD状态,无法攻击
}
/**
*计算伤害值
*/
public int damage(int damage, boolean isCritical) {
//讲伤害值和暴击传入
damage = damage - defense;//伤害值减去防御值得到最终伤害
damage = damage > 0 ? damage : 0;//伤害值大于0时,等于伤害值,伤害值不大于0时,等于0
if (isCritical) {
//暴击生效
damage *= 2;//暴击值
System.out.println(name + "被暴击");
}
hp = hp - damage;//被攻击后,剩余生命值
if (hp <= 0) {
hp = 0;
this.status = StatusEnum.DIE;//当血量小于0时,属于死亡状态
System.out.println(name + "阵亡");
}
System.out.println("[" + name + "]受到伤害:" + damage + " (" + hp + "/