我正在製作一個簡單的回合制RPG遊戲。我正在制定戰鬥系統。我曾與1個敵人合作,並且想要更新它來處理多個敵人。我有它產卵多個敵人,但我有針對他們的問題。C#更新對象列表中的值也會更新其他值
基本上,敵人存儲在名爲actualEnemies的列表中。敵人在運行時產生,可能在1-3之間。生成一個標籤來顯示敵人的名字,雙擊敵人就可以選擇敵人。
這個問題似乎是在對敵人的命名。他們有一個名爲characterName的屬性來識別敵人。問題是,可以有2個或更多相同類型的角色(例如3x Goblin)。因此,在生成敵人的代碼中,如果列表中已經存在一個,我想向characterName添加1。這個想法是給每個敵人一個獨特的名字。
問題是,當我嘗試這個時,它改變了所有相同名字的敵人的值,並且這一切都是一團糟。下面是代碼的相關章節:
if(EnemyExists(e))
{
e.characterName +=c.ToString();
}
c的只是正在使用一個計數器,讓我知道,如果是敵人1,2或3
的EnemyExists功能如下:
public bool EnemyExists(Enemy e)
{
bool exists = false;
int eCount = 0;
foreach(Enemy en in actualEnemies)
{
if(en.characterName==e.characterName)
{
eCount++;
}
}
if(eCount>1)
{
exists = true;
}
return exists;
}
要注意的是,敵人都以默認名稱開始。對於我正在研究的這個例子,只有兩種敵人。遊戲在1-3之間挑選一個隨機數字,以確定有多少敵人。每個敵人將成爲2個預先定義的敵人之一,隨機選取。這就是爲什麼我只想添加一個數字到已經存在的名稱的末尾。
我懷疑它是與我是怎麼創造的敵人名單:
public void CreateActualEnemies()
{
int r;
int potEnemyNum = potentialEnemies.Count;
int numEnemies;
Random rand = new Random();
numEnemies = rand.Next(1, 4);
for (int i = 0; i < numEnemies; i++)
{
r = rand.Next(0,potEnemyNum);
Enemy ene = new Enemy();
ene = potentialEnemies.ElementAt(r);
actualEnemies.Add(ene);
}
DisplayEnemyDetails();
}
當我添加到actualEnemies,我只是指着potentialEnemies地址,所以即使我實例一個新的敵人,每一個,如果它有相同的名字,指向同一個地方?我是否需要正確複製對象?
它已經很晚了,我很累,但我覺得我正在接近,任何幫助都會很棒,謝謝。
編輯:
敵對階級:
public class Enemy:Character
{
public int xpGiven { get; set; }
public LootTable lootTable { get; set; }
public int goldDropped { get; set; }
public bool alive { get; set; }
public NamedTimer timer { get; set; }
public Enemy()
{
alive = true;
xpGiven = 10;
lootTable = new LootTable();
goldDropped = 10;
timer = new NamedTimer();
}
}
請提供'Enemy' – Chrotenise
市民階級敵人的類定義:字符 { 公衆詮釋xpGiven {獲得;組; } public LootTable lootTable {get;組; } public int goldDropped {get;組; } public bool alive {get;組; } public NamedTimer timer {get;組; } public Enemy() { alive = true; xpGiven = 10; 012otlootTable = new LootTable(); goldDropped = 10; timer = new NamedTimer(); } } – rm46
只需使用代碼標記將其編輯爲原始問題即可。 – Chrotenise