我目前正在編寫一個模擬大規模Java作戰的羣體AI程序。繼承相同父項的兩個對象已交換屬性
public abstract class AIUnit
{
private int health;
protected AIUnit(int health)
{
this.health = health;
}
public abstract void Move(); //Move unit
public abstract void Attack(AIUnit unit); //Attack unit in front
public abstract void Send(int freq,int msg); //Send message on frequency
public abstract void Recv(); //Receive message
public int GetHealth()
{
return health;
}
public void TakeDamage(String name)
{
--health;
System.out.println(name+" took damage! Health remaining: "+health);
if (health == 0)
{
System.out.println(name+" is dead!");
this.Die();
}
}
public void Die()
{
System.exit(0);
}
}
有兩個AI類,作爲尚未:野蠻人和醫學,定義如下: 野蠻人:
public class Barbarian extends AIUnit
{
private String name = "Barbarian";
public Barbarian(int health)
{
super(health);
}
//Move unit
public void Move()
{
}
//Attack unit in front
public void Attack(AIUnit unit)
{
unit.TakeDamage(name);
}
//Send message on frequency
public void Send(int freq, int msg)
{
}
//Receive message
public void Recv()
{
}
}
,我用一個抽象類,AIUnit,定義如下: Medic:
public class Medic extends AIUnit
{
private String name = "Medic";
public Medic(int health)
{
super(health);
}
//Move unit
public void Move()
{
}
//Attack unit in front
public void Attack(AIUnit unit)
{
unit.TakeDamage(name);
}
//Send message on frequency
public void Send(int freq, int msg)
{
}
//Receive message
public void Recv()
{
}
//Heal unit
public void Heal(AIUnit unit)
{
}
}
請注意,這兩個類大多相同,僅在名稱上有所不同,並且Medic類具有未實現的Heal方法。
現在,測試一個簡單的攻擊方法時,具有下列主要類:
import java.util.Random;
public class Main
{
public static int barbhealth = 3;
public static int medhealth = 2;
public static void main(String[] args)
{
Random rand = new Random();
int whoAttacks = rand.nextInt() % 2;
Barbarian b = new Barbarian(barbhealth);
Medic m = new Medic(medhealth);
for(;;whoAttacks = rand.nextInt() % 2)
{
if (whoAttacks == 0)
m.Attack(b);
else
b.Attack(m);
}
}
}
我得到奇怪的結果。出於某種原因,應該有3個健康狀況的野蠻人以2開頭,而Medic應該有2個健康狀態,以3開頭。任何人都可以解釋這種行爲嗎?
創建一個展示奇怪行爲的最小自包含測試用例。 – aioobe 2014-09-24 18:57:34
更新:調用Attack()的對象正在受到傷害。 :/ – Dolphiniac 2014-09-24 18:59:12
這將是很好,如果有一種機制,遵循程序一步一步地做他的工作,看看會發生什麼...... – Tom 2014-09-24 19:02:54