AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OOP und RPG

Ein Thema von Master_RC · begonnen am 3. Nov 2005 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Benutzerbild von Master_RC
Master_RC

Registriert seit: 18. Jan 2005
459 Beiträge
 
Delphi 7 Enterprise
 
#1

OOP und RPG

  Alt 3. Nov 2005, 19:54
hi leutz!

So...
Jetzt hab ich mal wieder vor ein kleines RPG zu erstellen
Nur diesmal eben mit OOP.

Nur... wie fange ich das an?
Wie zum Beispiel sollte das bei einem Charakter oder einem Gegenstand aussehen, etc.?

Habt ihr damit schonmal Erfahrung gemacht oder eine Vorahnung?
Ein Volk ist nur soviel wert, wie es dessen Toten ehrt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: OOP und RPG

  Alt 3. Nov 2005, 20:08
Delphi-Quellcode:
type
 TCharacter=class;
 public
  Health, Mana, Strength, Skill, Defense, Intelligence, Fame: Byte;
  IsEnemy, Alive, Visible, Vulnerable: Boolean;
  X, Y, MapID, Angle: Word;
  TileSetID: Word;
  constructor Create;
  procedure Hurt(Value: Byte);
  procedure Kill;
  procedure Revive;
 end;
Das wäre ein guter Anfang.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Master_RC
Master_RC

Registriert seit: 18. Jan 2005
459 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: OOP und RPG

  Alt 3. Nov 2005, 20:12
danke

so, nun häufen sich die Fragen:
1. Byte == "Int" bis 256, oder? ja... gut ^^
2. Wie stelle ich es an, wenn mein Charakter dann beispielsweise eine Statusveränderung hat?
3. gut, das Modell von dir lässt sich natürlich auch einfach auf nen Gegenstand übertragen
4. Wie speichere ich die dann ab?

Gut, zur Zeit fällt mir grade nicht mehr ein...

[ot]Warum steht eigentlich in deiner Sig, dass Borg keine Schweden sind?![/ot]
Ein Volk ist nur soviel wert, wie es dessen Toten ehrt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: OOP und RPG

  Alt 3. Nov 2005, 20:32
[ot]StarTrek 8 First Contact: "Borg? Klingt schwedisch!" (etwas später) "Eindeutig keine Schweden!"[/ot]

1. Klar. Kannst du auch durch irgendnen anderen Integer Typ ersetzen.
2. type TStatus=stNormal, stPoisoned, stFrozen, stBurning...; oder:
Poisoned, Frozen, Burning...: Boolean;
3. Klar.
4. Da gibt es einige Möglichkeiten: INI (nicht zu empfehlen), XML, Record, SQL Datenbank (seeehr ungeeignet). Gibt bestimmt noch andere Möglichkeiten.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: OOP und RPG

  Alt 3. Nov 2005, 20:35
Hey,
OOP ist eigentlich mehr als gut geeignet für RPGs, schließlich ist die Idee dahinter, das reale Leben (was auch immer das sein soll) abzubilden.
Prinzipiell ist jedes einzelne Objekt (Avatar, NPC, Item, Gebäude, ...) ein eigenes Objekt. Du solltest diese in gemeinsame Gruppen (z.B. Avatar und NPC) stecken. Wenn etwas gemeinsame Eigenschaften hat, gehört es in eine Gruppe (und die gemeinsamen Eigenschaften in eine Basisklasse von der alle Mitglieder erben).
So kannst du auch später leicht neue Dinge deinem RPG hinzufügen.
Was Byte vs. Integer (Cardinal) angeht, solltest du gut überlegen ob es sich lohn die Wertvollen 3 Byte einzusparen. Immerhin wird deine CPU intern eh mit 32Bit arbeiten und somit sind Integers (und Cardinals) immer das Perfomateste.
Ein wichtiges Prinzip ist es, dass du dir von Anfang an auch eine Möglichkeit überlegst, wie du auf Ereignisse reagieren möchtest. Wenn sich z.B. die Stärke eines Spielers ändert, solltest du nicht direkt nur den Wert Strength (o.ä.) ändern, sondern dies über Propertys tun. Diese haben den Vorteil, dass sie mit einer Methode verknüpft werden können. Und in eben dieser kannst du auf Veränderung reagieren.
An sich solltest du auch eine Art Event-Listener-Modell einplanen. Am einfachsten (schönsten) geht dass, indem du zu allen Ereignissen ein Interface oder eine abstrakte Klasse (also immer eine für Zusammengehörige) vorsiehst. In diesen werden dann zu jedem Ereignis Methoden definiert, die als Argument das eingetretene Ereignis bekommen. Nun kannst du in zentraleren Klassen, die das Ereignis auslösen Listener registrieren, die immer benachrichtigt werden, wenn ein Ereignis auftritt. Dazu müssen die Objekte, die eine Nachricht erhalten wollen, das entsprechende Interface implementieren (oder von der abst. Klasse erben) und sich bei der zentralen Klasse als Listener registrieren.
Tritt nun ein Ereignis ein, kann die Klasse einfach jedem der Listener über die entsprechende Methode mitteilen, dass ein Ereignis eingetreten ist (und die Parameter übergeben).

Wie du etwas speicherst, kommt ganz drauf an, was du alles speichern möchtest und was nicht. Du solltest alles was Variablen eines Objekts sind in einen großen Stream schreiben (der wahrscheinlich gar nicht so groß wird). Dann gibt es auch noch gute Komponenten, die es dir erlauben Files zu packen. Gibt auch da viele Möglichkeiten.

Ich glaube das ist schon mal (ein stark vereinfachter) erster Einblick, was du alles mit OOP machen kannst. Aber (auch wenn es hier noch sehr abstrakt ist) ein RGP ist halt doch ein sehr umfangreiches Projekt! Also nicht zu groß planen, Qualität sollte immer Vorzug haben und dann ist etwas kleines auch leichter zu erweitern und macht auch viel mehr Spaß!
Den wünsch ich dir auch,

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: OOP und RPG

  Alt 3. Nov 2005, 20:43
Ich hab mal ein paar Ideen dazu gesammelt, hab das Projekt aber dann gestoppt (nach ein paar Überlegungen), da mir Kenntnisse und Grafiken fehlen.

So Kleinigkeiten hab ich mir schon überlegt, z.B. wie man aus einer Zielkoordinate und der momentanen Position des Spielers einen Winkel herauskriegt.

Noch ne Frage: 3D oder 2D?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Master_RC
Master_RC

Registriert seit: 18. Jan 2005
459 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: OOP und RPG

  Alt 3. Nov 2005, 20:55
(Für "Non-RPGler": Avatar == Charakter )

2D per DelphiX
(nein, kein openGL, ich versuchs erstmal mit DelphiX!)

Also natürlich 2D mit rumlaufen

@Unwissender:
Im Grunde kenn ich das Prinzip ja schon Immerhin mach ich den lieben langen Tag nur RPGs ^^
(Wer mein Browsergame-RPG sehen will, soll mir ne PN schicken )

Weitere Fragen:
Zitat:
type TStatus=stNormal, stPoisoned, stFrozen, stBurning
Wie genau leg ich dann diese Stati fest? Bzw. bei "Poisoned" sollte es ja X Giftschaden geben, wie kann ich den dan festlegen?

Zu 4.:
Für mich kommen derzeit 2 (3) Sachen in Frage:
XML => nur wie funktioniert das dann mit diesem OOP?
Record => Hö? Records sind doch aber nicht OOP!
Stream => weiß ich auch nicht wies funzt ^^'

Dann gibt es ja noch "Vererbung".
Also ich habs mir so gedacht:
Ich erstelle einen Grundcharakter (oder eben gegenstand).
Dann gibt es meinetwegen Charaktere, eben von diesem Grundcharakter, die aber die Eigenschaft "Ützlebrütz" haben.
So... wie mache ich da, bzw. wie finde ich heraus, ob der /es die Eigenschaft bereits hat, etc.?

[ot]Achja, stimmt ;D[/ot]
Ein Volk ist nur soviel wert, wie es dessen Toten ehrt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: OOP und RPG

  Alt 3. Nov 2005, 21:03
Also bei Records ist es ganz einfach: Du erstellst parallel zur Klasse noch einen Record mit den gleichen Variablen wie die Klasse nur ohne Methoden und speicherst den dann in ein File.

Bei Vergiftung usw. musst du das halt dann anders machen:

Poisoned, Frozen, Burning: Boolean;
PoisonDamage, PoisonTime, FrozenTime, BurnTime: Cardinal; //(in ms)

Du kannst natürlich einen Grundcharakter erstellen und dann noch THaendler usw. Aber nicht sowas in der Art, dass jeder Charakter in deiner Welt eine eigene Klasse hat, das gibt ein Chaos. Kannst ihm ja noch userdefined Variablen geben.

Eine Idee für Quests habe ich auch:

Delphi-Quellcode:
type
 TQuest = class
 public
  Status=(qsUnknown,qsAccepted,qsDenied,qsSolved,qsFailed);
  UserDefined1, UserDefined2, UserDefined3, UserDefined4...UserDefined10: Integer; //Questabhängig
 end;
Bei TCharacter kannst du noch die Variable AttackTarget: ^TCharacter; hinzufügen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#9

Re: OOP und RPG

  Alt 3. Nov 2005, 21:03
Zitat von Master_RC:
Dann gibt es ja noch "Vererbung".
Also ich habs mir so gedacht:
Ich erstelle einen Grundcharakter (oder eben gegenstand).
Dann gibt es meinetwegen Charaktere, eben von diesem Grundcharakter, die aber die Eigenschaft "Ützlebrütz" haben.
So... wie mache ich da, bzw. wie finde ich heraus, ob der /es die Eigenschaft bereits hat, etc.?
Nachlesen?

Du solltest doch wissen, ob du eine Eigenschaft bereits gesetzt hast, oder nicht. Ansonsten: Compiler-Fehler abwarten
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#10

Re: OOP und RPG

  Alt 3. Nov 2005, 21:26
Allerdings musst du bedenken das du wenn du jeden Charakter als Klasse abbildest du bei jedem Patch den Code ändern musst. Daher empfiehlt es sich .NET zu verwenden, da du dort jeden Charakter in eine Assembly packen kannst, und diese Dynamisch laden!
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz