Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.05.2012, 16:30

C# Array für Klassen oder ähnliches gesucht

Hallo,

ich hoffe das ist das richtige Forum hierfür. Ich bin gerade dabei für mein RPG die Charakterverwaltung ein wenig zu optimieren. Ich habe hier nun eine Klasse Character mit den üblichen Werten (HP. Mana, Schaden usw).

Ich erstelle am Anfang für meine 6 Chars jeweilige Unterklassen, also z.B...

Character Char1 = new Character();

ich kann nun mit Char1.HP den aktuellen Wert der Lebenspunkte des Chars hinterlegen. Nun aber meine Frage:
Gibt es eine einfache Möglichkeit, auf die entsprechende Unterlasse per Variable zuzugreifen?

Beispiel: Angriff auf Char 4 (die Variable iAttackedPlayer ist in dem Fall 4). Ich müsste momentan alle Chars durchgehen und enstprechen prüfen...

if (iAttackedPlayer==4) Char4.HP = Char4.HP - iSchaden;

Besser wäre natürlich:

DasWasIchSuche(iAttackedPlayer).HP = DasWasIchSuche(iAttackedPlayer).HP - iSchaden

Habe es schonmal mit einem Dictionary versucht

C#-Quelltext

1
2
Dictionary<int, object> diChars = new Dictionary<int, object>();
diChars.Add(1, Char1);


Ich kann dann aber leider nicht via

C#-Quelltext

1
diChars[1].Das was ich will

auf die Werte zugreifen :crazy:
Kann mir da jemand auf die Sprünge helfen?
Gruß

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »asEternal« (04.05.2012, 16:36)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

04.05.2012, 17:07

Character[]

List<Character>

Dictionary<?,Character >
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

04.05.2012, 17:20

Hallo,

danke erstmal für die schnelle Antwort, könntest Du hier bitte ein wenig ins Detail gehen, ich kann es gerade nicht per Quellcode prüfen?

Ich habe meine Charaktere:

C#-Quelltext

1
2
3
4
5
6
public static Charaktere Char1 = new Charaktere();
public static Charaktere Char2 = new Charaktere();
public static Charaktere Char3 = new Charaktere();
public static Charaktere Char4 = new Charaktere();
public static Charaktere Char5 = new Charaktere();
public static Charaktere Char6 = new Charaktere();


Dann erstelle ich eine Liste

C#-Quelltext

1
public static List <Charaktere> lChars = new List<Charaktere>();


...dann die Chars adden

C#-Quelltext

1
2
3
4
5
6
Program.lChars.Add(Program.Char1);
Program.lChars.Add(Program.Char2);
Program.lChars.Add(Program.Char3);
Program.lChars.Add(Program.Char4);
Program.lChars.Add(Program.Char5);
Program.lChars.Add(Program.Char6);


und wie gehe ich dann weiter vor, wenns bis hierhin überhaupt richtig ist :fie:

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

04.05.2012, 17:30

Zitat

und wie gehe ich dann weiter vor, wenns bis hierhin überhaupt richtig ist

Kommt drauf an, was du dann machen willst.

5

04.05.2012, 17:36

Letztendlich will ich ja nur von überall in meinem Quellcode per Variable auf meine Chars zugreifen können.

C#-Quelltext

1
2
3
4
5
class Charaktere
{
        // Allgemeine Werte der Chars
        int iHP;
}

C#-Quelltext

1
public static Charaktere Char1 = new Charaktere();

Hier also nicht

C#-Quelltext

1
Char1.iHP = 1 

sondern

C#-Quelltext

1
2
iChar = 1;
Irgendwas(iChar).iHP = 1;

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

04.05.2012, 17:40

Indexoperator. ;)
Irgendwas[4].iHP = 1;

Chars ist übrings eine denkbar ungünstige Bezeichnung.
Da ein "char" normalerweiße ein einzelnes Zeichen ist. (bzw. in C(++) ein byte)

7

04.05.2012, 17:43

Hallo,

ich weis, das ich mit Irgendwas[1] auf das erste (oder das zweite, das erste ist ja 0) Element zugreifen kann, was ich brauche ist das Irgendwas :)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

8

04.05.2012, 17:47

Hä?
Willst aus dem Charakter heraus auf die Liste zugreifen, die ihn beinhaltet?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

04.05.2012, 17:48

Das Irgendwas ist der Array:

Character[] irgendwas = new Character[10];

Ich glaube die grundlegenden Datentypen und -strukturen von C# solltest Du Dir eventuell noch einmal anschauen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

04.05.2012, 17:50

Wie wärs mit nem einfachen Array?

Werbeanzeige