c# kalla på metodd från annan class

Permalänk
Medlem

c# kalla på metodd från annan class

Det finns inga errors medans programmet inte körs, men när det ska kalla på metoden så står det "Objektreferensen har inte angetts till en instans av ett objekt.", har letat runt på det här nu men kan inte hitta något. Någon som skulle kunna hjälpa mig :)!
Problemet ligger när jag kallar på player.RemoveItems()

public class RedPotion : Weapon { private Player player; public override void Attack(Direction direction, Random random) { if (PotionQuant.RedPotionQuantity > 0) { game.IncreasePlayerHealth(10, random); PotionQuant.RedPotionQuantity--; Used = true; Player player; player.RemoveItem("Red Potion"); } } } public class Player { public void RemoveItem(string WeaponName) { bool remove = false; int count = 0; for (int i = 0; i < Inventory.Count; i++) { if (Inventory[i].Name == WeaponName) { count++; remove = true; break; } count = i; } if (remove == true) { Inventory.RemoveAt(count); } } }

Permalänk
Medlem

Vart deklarerar du Inventory?
Samt, var skapar du ditt Player objekt?

Player player = new Player();

Permalänk
Medlem

Vet inte riktigt om jag hänger med, men har varje redPotion en player?
Känns lite fel om du frågar mig, borde inte player ta hand om alla "Items".
En item ska inte veta nåt om player, så känner jag iaf.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Hedersmedlem

Borde du inte köra
count++;
efter break?
Edit: Varför inte stega genom funktionen och se vad som händer?

Permalänk
Medlem

Jo en player borde ju ha items (om inte någon rolig variant)
varje player borde ju också ha ett ID. Felet ligger i new Player iaf

Permalänk
Medlem

Håller med föregående, du instansierar aldrig player vilket ger dig felet. Vad händer om du sätter den som property istället?
Du kan ju annars läsa in en player i funktionen.

Dessutom, du verkar försöka skapa ett objekt "Player player" innuti funktionen, du måste vara vaksam med att inte använda samma namn flera gånger, det går inte

Jag skulle nog löst det såhär:

class mittNamn : namnPåKlassAttUtökaFrån { public void Heal(Player player) { player.Health += 10; player.Remove("Small Potion"); } } class Player { int Health {get; set;} public List<Item> Inventory {get; set;} public void Remove(string itemName){ //Kod för att ta bort här } }

Dessutom, varför inte döpa om Weapon till något mer lämpligt? Förstår mig så via din kod att du tar inventory, där finns ju dessutom: "Armor", "Health & Mana", "Gold", "etc" vilket blir pyttelite missledande.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40