![]() |
Re: OOP und RPG
Zitat:
Delphi-Quellcode:
Dazu noch eine globale Liste, in die sich der State einfügt (nur über das Interface) und die dann jeden Frame ihre Items durchrattert.
ITiming = interface
procedure Advance(dTime: Cardinal); end; //[...] TState = class protected FOwner: TAvatar; public constructor Create(AOwner: TAvatar); end; TTimeBasedState = class(TState, ITiming) protected FRemainingTime: Cardinal; class function GetDuration: Cardinal; virtual; abstract; public property RemainingTime: Cardinal read FRemainingTime; constructor Create(AOwner: TAvatar); procedure Advance(dTime: Cardinal); virtual; end; TPoison = class(TTimeBasedState) protected class function GetDuration: Cardinal; override; public procedure Advance(dTime: Cardinal); override; end; implementation {$R *.dfm} { TState } constructor TState.Create(AOwner: TAvatar); begin FOwner := AOwner; end; { TTimeBasedState } constructor TTimeBasedState.Create(AOwner: TAvatar); begin FRemainingTime := GetDuration; end; procedure TTimeBasedState.Advance(dTime: Cardinal); begin Dec(FRemainingTime, dTime); FOwner.States.RemoveMe; end; { TPoison } class function TPoison.GetDuration: Cardinal; begin Result := 10 * 1000; // 10 s end; procedure TPoison.Advance(dTime: Cardinal); begin inherited; FOwner.Health -= 10 * dTime / 1000; // 10 Schaden pro Sekunde end; Naja, so könnte ich es mir jedenfalls vorstellen ^^ . *diskussionwiederauftopicführ* :angel2: |
Re: OOP und RPG
Immer ich. Aber er hat ja recht. Ich bin so strenge OT Regelungen nicht gewohnt.
|
Re: OOP und RPG
Zitat:
Zitat:
Was das zippen angeht, es gibt ein paar Komponenten die das können. Hab leider im Moment keine, die ich verwende. Aber du findest mit googlen oder hier suchen sicher schnell was passendes. Und da ist es eigentlich die Regel, dass die in einer Datei beliebig viele weitere speichern können. Würde dir dazu raten, dann eine Datei für die NPCs, eine für die Quests usw. anzulegen. In den Dateien kannst du dann (hoffentlich) die gespeicherten Daten immer gleich strukturiert (also gleich groß) ablegen, dass macht das lesen schonmal leichter. Was das Vererben angeht, auch dass ist eigentlich sehr einfach. Du hast eine Klasse
Delphi-Quellcode:
Beim ableiten schreibst du die Basisklasse (immer nur eine möglich) in die Klammern hinter class
type
TBaseClass = class(TObject) private // Felder & Methoden die nur TBaseClass sehen soll protected // Felder & Methoden die beim vererben auch von der erbenden Klasse gesehen werden public // Felder & Methoden die jeder sieht end;
Delphi-Quellcode:
wobei dann TNpc auch das Feld aussehen, job und die Methode doFoo hat, zusätzlich halt auch building.
type
TCharacter = class(TObject) protected job : TJob; aussehen : TAussehen; procedure doFoo(); public constructor create(...); destructor destroy; override; end; TNpc = class(TCharacter) private building : TBuilding; public end; |
Re: OOP und RPG
Nebenbei bemerkt kann man das (TObject) nach dem Klassennamen auch weglassen.
|
Re: OOP und RPG
Zitat:
Hui, denn genauso will ichs haben :mrgreen: Nur kann ich mit dem Code wenig anfangen, vlcht. muss ich nur näher hingucken... :? kann mir jemand zu dem code von Khabarakh eine Art "Tutorial" - oder eher eine gute Beschreibung liefern? So... jetzt ist mir noch was aufgefallen: Wenn das vorhin der Code fürs Vergisten war. So... nehmen wir an, ich hätte noch Verbrennung, Dies, Das, Et cetera, Et ceteri (hihi, "ceteri" gibts nicht ^^) Dann wird das ja im Quelltcode nen Haufen Text... :| Kann ich den Code vlcht. irgendwie irgendwo auslagern oder so? |
Re: OOP und RPG
Auch mal ne Frage zum Thema (MMO)RPG ;)
Ich bin grad lustigerweise auch dran *fg* und schreib grad die Klasse für einen NPC. Laufen tut er ja - allerdings sollte er sich etwas schlauer verhalten im Laufen. Momentan mache ich es so, dass ich per "if Random(200)=0" entscheide, ob er überhaupt die Richtung wechseln soll. Allerdings führt das eben zu recht blöden Laufverhalten *fg* Gibt es da evtl. eine bessere Lösung, die ihn etwas realistischer laufen lässt? air |
Re: OOP und RPG
Du kannst ihm einen vorgefertigten Weg vorgeben. Oder nur bei jedem x-ten Durchlauf eine Richtungsänderung vorschlagen.
|
Re: OOP und RPG
@airblader:
Bitte mach damit ein eigenes Thema auf, ich bin hier sowieso schon stark gefordert! Danke ;) (Arrrgh... wär ich doch nur in der Schule gefordert, wär ichs gewohnt ;) ) |
Re: OOP und RPG
Die Idee ist Grundsätzlich richtig, nur würde ich mir über den Aufbau noch Gedanken machen.
Code:
Dies Stellt eine Sinnvolle Schnittstelle dar( Ist allerdings sicher noch ein Fehler drin ), welche demonstrieren soll wie man ein Schadenssystem erstellt!
interface IDamage
{ int TakeDamage(int mode, int damage); int GetDamageMode(); void DirectDamage(int damage); } class RPGObject { private int health; private Vector3f position; //.... propertys und sowas } class Human : RPGObject { private HumanDamage Damagesystem; // ....blablabla void TakeFightAction(IDamage damagesystem) { .... } } class HumanDamage : IDamage { int TakeDamage(int mode, int damage) { .... } int GetDamageMode() { .... } void DirectDamage(int damage) { .... } } Dies ist nur ein kurzer Hinweiss von mir wie man ein Spiel mithilfe von Klassen und Interfaces aufbauen kann. Wenn man mit Interfaces Arbeitet kann man sich einige Lästige Dinge Erspaaren, und kann unabhängig von Fähigkeiten und Spezialfähigkeiten ein Spiel Programmieren welches auch ohne Fehler läuft. Dazu muss man eben wie oben im Beispiel gezeigt z.b. eine Sinnvolle Schnittstelle für das Schadenssystem programmieren. |
Re: OOP und RPG
muss das unbedingt C sein? :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz