Hauptklasse "Engine" play = new spielfeld player = new player monst = new monster etc.. - spielerbewegen() - monsterbewegen() - spielfeld_nach_sicht_zeichnen()// wird ja nicht alles gezeichnet, sondern nur der Bereich den man sieht. - sontiges events()
Alle unterklassen werden in der "Engine" Klasse instanziiert.
Unterklasse "Spielfeld" - größe, sprite each sqm, position x, position y, etc.
Unterklasse "Spieler" - level, hp, schwertskill, position x, position y, sprite etc.
Unterklasse "Monster" - level, hp, position x, position y, sprite etc.
Unterklasse "Waffe" - Angriffswert, Def. Wert, etc.
was haltet ihr davon? Sollte ich den Aufbau anders gestalten?
Sieht für den Angang ganz gut auf folgende Änderungen würde ich vornehmen:
Sieht für den Angang ganz gut auf folgende Änderungen würde ich vornehmen:
Hauptklasse "Engine" play = new spielfeld player = new player List<IMonster> monst = new List<IMonster>() - Methode: StartLeve(int LevelId) { //Soviele Monster wie das Level zum start hat hinzufügen und positionieren monst.add(new mosnter(...)); } - spielerbewegen() - monsterbewegen() - spielfeld_nach_sicht_zeichnen()// wird ja nicht alles gezeichnet, sondern nur der Bereich den man sieht. - sontiges events()
Alle unterklassen werden in der "Engine" Klasse instanziiert.
Unterklasse "Spielfeld" - größe, sprite each sqm, position x, position y, etc.
Interface "IEntity" - level - Position - List<ISkills> - List<IWeapon> - List<IStats> (Hier dann HP, Angriffskraft, ...)
//Buff ein Buff / Debuff ist eine temporäre Steigerung der Fähigkeiten // oder Attribute (z.b. "SuperHpPot, Erhöht die HP für 20 sec. um 10%") - List<DeBuffs>
Unterklasse "MonsterTyp_SehrBöhse" : "Monster" - MustOverwride Methode: init(){ //alternative Construtor //Muss überschrieben werden! //- Hier Liste der Skills, Waffem, Stats inizialisieren, z.B. aus einer Datenbank }
Im wesendlichen immer für jeden neuen Objekttyp auf dem Spielfeld auch ein eigenes Objekt machen und Zusatzinformationen wie Fähigkeiten, Attribute, Waffen etc. ebenfalls von Objekten und Interface ableiten. Damit bist du am ende am flexibelsten und kannst schnell neue Sachen hinzufügen ohne diese an 20 Stellen nachzupflegen.
Wie immer, sehr geile Antwort von dir. Thumbs up! Jetzt aber eine Frage mit der ich den DAU- Award überreicht bekomme(bin ich mir ziemlich sicher). Undzwar der Punkt "Interface". Ein Interface ist doch nichts anderes als eine abstrakte Klasse die abgeleitete Klassen nutzt. Richtig oder falsch?
Oh, ich nehme die Frage da oben zurück :-)! Wie ich sehe, habe ich ein riesiges Kapitel in der OOP übersprungen. Das ganze ist ja noch komplexer als die Klassifizierung. Ich verstehe nur Bahnhof!
Hallo spicejam, als als erstes kann ich dir anbieten das wir uns mal privat um Skype oder Teamspeak oder so treffen und du deine Fragen direkt loswerden kannst :D Als zweites: Interfaces dienen der Beschreibung einer Schnittstelle. Jede Klasse (ob abstract oder nicht) kann eines oder mehrere Interface implementieren und muss dann die im Interface geforderten Methoden (und Eigenschaften, Properties etc) zur Verfügung stellen. Ein Interface selber kann jedoch keinerlei Programmcode enthalten. Warum? Weil ein Interface eine Beschreibung ist. Und Programmcode gehört nicht in eine solche.
Ein weiteres Thema ist Vererbung. Klassen können von anderen Klassen erben und somit alle Methoden(..) der Basisklasse übernehmen und überschreiben. Ansonsten verhalten Sie sich wie normale Klassen. (Wichtig: In C# ist es nicht möglich von mehreren Klassen zu erben! In VB.Net geht das) Fügst du nun der Basisklasse eine neue Methode hinzu, erben alle abgeleiteten Klassen ebenfalls diese Methode. Änderst du eine Methode in der Basisklasse brauchst du keinerlei Änderungen an den abgeleiteten Klassen vornehmen.
Ein Beispiel, die Klasse "Dictionary" aus System.Collections.Generic: "public class Dictionary<TKey,TValue> : Object, IDictionary<TKey,TValue>, IDictionary, ISerializable, IDeserializationCallback" Diese Klasse Implemtiert 3(respektive 4) Interfaces. Und zwar IDictionary, ISerializable und IDeserializationCallback. Dazu erbt Sie alle Eigenschaften und Methoden der Klasse "Object".
Btw. zum Thema DAU-Award. Ich würd dir lieber den DAP-Award überreichen (DA Programmer :D) .. ne Spaß beiseite. Wir haben alle mal klein angefangen. Jeder der sich heute GURU nennt hat sich das alles erarbeiten müssen. Auch wenn viele so tun als ob sie mit dem ganzen Wissen schon gebohren wurden.
Hallo spicejam, du hast dich zum Thema Skype noch nicht geäußert. Wenn du interesse hast, kannst du mir unter der Adresse: fzygom@tempalias.com eine E-Mail (z.B. mit deinem Skype-Name) zukommen lassen. Diese E-Mailweiterleitung ist die nächsten 10 Tage gültig.
Hey Floyd. Vielen dank für die ausführliche Erklärung! Dein Angebot nehme ich gerne entgegen :-). bin nur momenten ziemlich im Arbeitsstress! Ich schicke dir aber aufjedenfall meine E-Mail zu. Danke.