Du bist nicht angemeldet.

Werbeanzeige

1

05.10.2021, 20:33

Charaktererstellung Wertzuweisung mittels Setter?

Guten Abend zusammen,

ich bin gerade dabei mir selbständig das Programmieren beizubringen, als Programmiersprache habe ich für mich C# gewählt. Auf Grund meines Lebensweges ist ein Studium oder eine weitere Ausbildung einfach nicht mehr möglich, daher versuche ich es aus Eigeninterresse mit Hilfe von Büchern, Foren und Videos. Natürlich enstehen dadurch auch einige Wissenslücken, welche dann natürlich zu diversen Problemen im Code führen können. Ich bin auch schon in einem anderen Forum registriert, wo mir zu meinem Glück auch wirklich gut geholfen wird und wo die Mitglieder sehr nett mit Leuten wie mir umgehen, bzw. etwas mehr Verständnis, für die eine oder andere Frage haben.
Als ich letztens bei einem Problem wiedermal das Internet durchstöberte, bin ich auf euer Forum aufmerksam geworden. Da ich als Lernobjekt eine kleine Spieleidee verfolgen möchte, dachte ich mir, das ich in einem Forum für Spieleprogrammierung gar nicht so verkehrt sein kann.

Vorne weg, meine Idee selbst dreht sich um ein Spiel, welches als mmorpg daher kommen könnte. Es geht mir allerdings gar nicht darum das Spiel als solches zu programmieren. Was für mich alleine, ohne blassen Schimmer vom code schreiben auch etwas realitätsfremd wäre. Derzeit bin ich z.B. dabei eine Art Charaktererschaffung zu generieren ( z.Z. über einfache Konsolenanwendungen), um die oop, verwendung von Methoden, Schleifen u.a. zu erlernen. Die Spieleidee soll das ganze einfach nur etwas interessanter zu machen.

Bei der oop habe ich derzeit noch etwas zu knabbern und bin auch dieses mal wieder auf ein kleines Problem gestoßen. Wenn ich wärend der Charaktererschaffung meinem neuen Objekt einen Wert zuweisen möchte, dann erledige ich das über eine meiner Eigenschaften.

int _stamina = 0;
public int Stamina { get { return _stamina;} set { _stamina = value; } }

Gedacht ist, dass ich eine Rasse für meinen Charakter aussuche, normaler Mensch, genveränderter Mensch oder eine Art Zauberer, wobei es in diesem Spiel keine Zauberer gibt ( Zauberer ist nicht wirklich der Audruck dafür). Wenn der Nutzer z.B. die genveränderte Rasse auswählt, sollen auf Grund dieser Auswahl gewisse Grundattribute gesetzt werden. Diese Rasse soll eine Art Tankklasse darstellen, welche von grund auf mehr Lebenspunkte, eine höhere Zähigkeit und leider auch weniger Intelligenz besitzen soll. Die Methoden für die Auswahl sind soweit fertig und funktionieren auch tadellos. Für die Zuweisung der weiteren Werte dachte ich mir folgendes.

public int Stamina { get {return _stamina;} set { if( CharGenus == Genus.ModifiedHuman){ _stamina = 50 }else if( CharGenus == Genus.Human){_stamina = 20}}

Dadurch würde ich ja theoretisch über den Setter gleich nach der Ausführung der SetGenus() die geforderten Werte setzen. Jetzt ist es jedoch so, das die Variable int _stamina wärend der Abfrage im Main dennoch 0 bleibt, da ich die Werte ja nicht mit ref übergebe. Meine Frage hierzu ist, - möchte ich das überhaupt? Würde ich diese Werte mittels ref übergeben, würde ich ja die Attribute direkt in der Klasse ändern (Dies soll ja die Grundklasse für alle weiteren Charaktere sein, blanco sozusagen).
Wenn ich den Wert direkt über den Konstruktor übergebe, dann wird der Wert auch ohne ref entsprechend ausgegeben, ich gehe davon aus, dass der Konstruktor ja direkt ein neues Onjekt mit Wert x erzeugt und mir daher auch der angegebene Wert angezeigt wird. Ist es somit eigentlich gar nicht möglich meine Idee der Wertzuweisung mittels Setter zu realisieren, oder sollte ich für die Zuweisung eine weitere Methode erschaffen, welche meine Idee des Setters ersetzt?

Ich hoffe meine Ausführungen sind halbwegs verständlich. ^^

mit freundlichen Grüßen

Gewinde

2

06.10.2021, 16:35

1.

Zitat

Wenn ich wärend der Charaktererschaffung meinem neuen Objekt einen Wert zuweisen möchte, dann erledige ich das über eine meiner Eigenschaften.

Um eine Klasse zu Initialisieren ist der Constructor da. Constructor Doku

2. Wenn ich richtig verstanden habe, möchtest du Stamina abhängig von CharGenus zuweisen. Dann kannst du aus CharGenus einen Getter/Setter machen und je nach dem ob value Genus.ModifiedHuman oder Genus.Human ist, Stamina den gewünschten Wert zuweisen.

Zum Verständnis ein Beispiel.

Ich hoffe ich konnte dir helfen.

Hannes

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Hannes« (06.10.2021, 16:43)


Tris

Frischling

Beiträge: 81

Wohnort: ~Stuttgart

  • Private Nachricht senden

3

06.10.2021, 16:56

Ich möchte dich nicht gleich mit noch mehr neuen Dingen überfordern, aber das klingt ideal für Vererbung.
https://csharp.net-tutorials.com/de/122/klassen/vererbung/

4

06.10.2021, 22:39

Guten Abend zusammen,

danke für eure Antworten. Die Möglichkeit, welche Hannes schrieb hatte ich noch gar nicht bedacht. Wahrscheinlich fehlt mir da noch etwas der Durchblick in der oop ( ich tue mich sehr schwer mit den Gettern und Settern). Ich danke dir dafür und werde mich die Tage mal dran setzen und diese Idee in meinem Code umzusetzen. Die Idee der Vererbungsvariante von Tris kam mir gestern abend, nachdem ich hier geschieben hatte. Dadurch würde die Klasse class ModifiedHuman sozusagen von der Klasse Character erben. Ganz übervordert bin ich mit der Materie nicht, ich habe durchaus schon mit Vererbungen gearbeitet oder besser gesagt geübt. Dabei würde dann für mich eine weitere Frage aufkommen. Wenn ich das richtig verstanden habe, dann kann eine Klasse an viele verschiedene Klassen vererbt werden. Eine Klasse kann jedoch nur von einer Klasse erben. Dadurch würde sich für mich im weiteren Programmverlauf ein Problem ergeben. Da ich die Character-Klasse an die ModifiedHuman-Klasse vererbe, ich den Typ ModifiedHuman allerdings für jede im Spiel befindliche Charakterklasse (Zauberer, Kämpfer, Tank u.ä.) nutzen können soll ( ich denke da waren meine Ausschweife bezüglich Spieleidee nicht ganz ausführlich gewesen ), könnte ich diese dann nur an eine bestimmte Klasse weiter vererben. Ich gehe davon aus, der gedanke lag dabei an meiner angegebenen Tank-Klasse, welches dann natürlich auch funktionieren würde. In meiner Idee sind die GenusKlassen allerdings am Ende unabhängig der Berufsklasse spielbar.

Ich danke euch beiden vielmals und werde mir alle Mühe geben eure angegebenen Hilfestellungen erfolgreich umzusetzen.

mit freundlichem Gruß

Gewinde ^^

Werbeanzeige