Soldier 和 Monster 都是抽像类,想随机的产生soldier 和monster 的级别,可这样出错了,大虾进来看看, Soldier soldier;
switch (tslevel + 1) {
case 1:
soldier = new WeakSoldier(((tslevel + 1) * 10 + 5),
tslevel + 1);
break;
case 2:
soldier = new NormalSoldier(((tslevel + 1) * 10 + 5),
tslevel + 1);
break;
case 3:
soldier = new StrongSoldier(((tslevel + 1) * 10 + 5), tslevel + 1);
}
/**
* 随机产生怪
*/
Monster monster;
switch (tmlevel + 1) {
case 1:
monster = new BabyMonster(((tslevel + 1) * 10), tslevel + 1);
break;
case 2:
monster = new NormalMonster(((tslevel + 1) * 10), tslevel + 1);
break;
case 3:
monster = new FinalMonster(((tslevel + 1) * 10), tslevel + 1);
break;
} System.out.println("战士级别" + (tslevel + 1) + " " + "战士HP" + soldier.HP);//soldier.hp 出错 说没有定义soldier
System.out.println("怪级别" + (tmlevel + 1) + " " + "怪HP" + monster.HP);//monster.HP 出错,说没有定义monster
switch (tslevel + 1) {
case 1:
soldier = new WeakSoldier(((tslevel + 1) * 10 + 5),
tslevel + 1);
break;
case 2:
soldier = new NormalSoldier(((tslevel + 1) * 10 + 5),
tslevel + 1);
break;
case 3:
soldier = new StrongSoldier(((tslevel + 1) * 10 + 5), tslevel + 1);
}
/**
* 随机产生怪
*/
Monster monster;
switch (tmlevel + 1) {
case 1:
monster = new BabyMonster(((tslevel + 1) * 10), tslevel + 1);
break;
case 2:
monster = new NormalMonster(((tslevel + 1) * 10), tslevel + 1);
break;
case 3:
monster = new FinalMonster(((tslevel + 1) * 10), tslevel + 1);
break;
} System.out.println("战士级别" + (tslevel + 1) + " " + "战士HP" + soldier.HP);//soldier.hp 出错 说没有定义soldier
System.out.println("怪级别" + (tmlevel + 1) + " " + "怪HP" + monster.HP);//monster.HP 出错,说没有定义monster
Soldier soldier = null;
Monster monster = null;
public interface Creature {
// 所有的生物都有攻击行为
public int getAttackLevel();
// 生物受到攻击
public void attacked(int attackLevel);
// 取得生命值
public int getHP(); public boolean isDead();
}// 可升级是一个接口
public interface Upgradable {
public void upgrade();
}Soldier和Monster是Creature的两个实现,也可以先有一个抽象类public abstract class AbstractCreature implements Creature { private int hp; private int creatureLevel; public AbstractCreature(int hp, int creatureLevel) {
this.hp = hp;
this.creatureLevel = creatureLevel;
} public int getHP() {
return hp;
}
public int getCreatureLevel() {
return creatureLevel;
} public void setCreatureLevel(int creatureLevel) {
this.creatureLevel = creatureLevel;
} public void lostHP(int count) {
this.hp -= count;
if(this.hp < 0) {
this.hp = 0;
}
} public boolean isDead() {
return this.hp==0;
}
}public class Soldier extends AbstractCreature implements Upgradable{
public Soldier(int level) {
super(level*10 + 5, level);
} public int getAttackLevel() {
// 跟生物等级相关,随便你怎么搞
return getCreatureLevel();
} public void attacked(int attackLevel) {
// 根据自己的等级和攻击等级计算, 也是随便搞
int count = (attackLevel-this.getCreatureLevel()/2) * 5;
lostHP(count);
} public void upgrade() {
setCreatureLevel(getCreatureLevel() + 1);
}
}Monster类似,这里就不写了, 如果Monster不能升级不实现Upgradable接口就好了。实例化:
Soldier soldier = new Soldier(tslevel + 1);
Monster monster = new Monster(tmlevel + 1);或者:
Creature soldier = new Soldier(tslevel + 1);
Creature monster = new Monster(tmlevel + 1);这样的好处是:战士可以升级。按楼主的设计,战士从WeakSoldier升级到NormalSoldier,就要新建一个NormalSoldier,然后抛弃原来的对象。还有soldier.HP是不对的。内部属性不要直接暴露给外部对象。应该用soldier.getHP()
在第二个switch中,
monster = new ...Monster(((tslevel + 1) * 10), tslevel + 1);
这句中tslevel应该该为tmlevel造成这个结果的直接原因可能是楼主进行了代码的复制粘贴。之所以要把一个原本很简单的实例化搞的如此复杂,正是由于楼主没有进行正确的抽象。
你可以在switch语句里加入defalut看看到底是哪里出了错