|
|
Die Methode Init()richtet zunächst
zwei Fensterbereiche ein. In dem einen werden das Höhlensystem und
seine Bewohner, Gegenstände und Hindernisse angezeigt werden. Hierzu
dienen die Feldvariablen dungeon und nebel. Die Feldvariablen
nebel
werden auf 0 gesetzt, wenn der Bereich des Höhlensystems
unsichtbar ist, sonst auf 1.
Der zweite Fensterbereich dient dem textorientierten Dialog. Beide Fensterbereiche sind Objekte einer gemeinsamen Klasse Konsole, um die Portabilität auf andere Sprachen und Systeme zu erleichtern. Anschließend werden der Held, die Monster und die Gegenstände initialisiert sowie die Wände rings um das Labyrinth gesetzt. Monster und Gegenstände werden zufällig im dungeon verteilt. Jedes dungeon-Feld enthält entweder einen Gegenstand, ein Monster oder eine Wand. Die Parameter zur Initialisierung dieser Objekte werden später erläutert. Es wäre zwar denkbar, gemeinsame Eigenschaften von Held, Monster und Gegenständen von einer Klasse abzuleiten, dies erscheint jedoch weder natürlich, noch vom Aufwand her angemessen. Der Ausgang wird durch das Symbol '>' gekennzeichnet. In dieser Prototyp-Version werden alle Objekte im Dungeon sichtbar geschaltet (Die entsprechende Routine sollte im Hinblick auf zukünftige Versionen natürlich leicht abänderbar sein). |
|
Die Methode Init(..) erzeugt ein neues Objekt
der Klasse, wobei die Parameter folgende Bedeutung haben:
w: finanzieller Wert eines Gegenstandes (in dieser Version irrelevant) a: Attackewert, bestimmt die Schädigung des Gegners r: Rüstungswert, schützt vor den gegnerischen Attacken h: Heilungswert (in dieser Version irrelevant) g: Gewicht (in dieser Version irrelevant) s: Stabilität (<=0, dann ist der Gegenstand defekt) ms: maximale Stabilität Diese Parameter müssten nach der "objektorientierten Lehre" eigentlich gekapselt werden, aber der Aufwand für die dann erforderlichen Zugriffs-Methoden ist zu hoch und nicht notwendig. !! Hier hat sich eine Verwirrung eingeschlichen. Items entspricht Gegenstand. |
|
Mit der Methode Init() werden Parameter
mit der folgenden Bedeutung übergeben:
bez: der Name des Helden l: die Anzahl der aktuellen Leben ml: die Anzahl der maximalen Leben a: Attackewert r: Rüstungswert xx,yy: die Startposition des Helden Die in (* .. *) gehaltenen Attribute/Methoden sind in dieser Version noch nicht implementiert, deuten aber die gewünschten Erweiterungen an. Die Position des Helden wird in den öffentlichen Attributen x und y festgehalten. Zur Anzeige des aktuellen Status des Helden dient die Methode Zeigen(), die einen vorformatierte String zurückgibt. Die Methode Kurz_Zeigen() liefert in dieser Version nur den Namen des Helden. Die Methode Schaden(s) berechnet eine Schädigung (hier: Rückgang der Lebenspunkte) des Helden aus dem Prozentwert s und dem Rüstungswert des Helden. In dieser Prototyp-Version berechnen sich Attacke und Rüstungswert bei einem Schaden aus den Lebenspunkten mittels der gekapselten Methode Werte_neu_berechnen(). Der Rüstungswert() ergibt sich als real-Zahl und berücksichtigt mögliche Gegenstände im Rucksack. |
|
Die Klasse monster ist ähnlich aufgebaut,
wie die Klasse held. Allerdings haben Monster derzeit keinen Rucksack,
in den sie beispielsweise Gegenstände aufnehmen könnten, wenn
sie frei durch das Labyrinth laufen würden.
Die Position eines Monsters kann ebenso wie bei der Klasse held in den x und y Attributen abgelegt werden. Diese Attribute haben in dieser Programmversion jedoch keine Relevanz, da sie nicht benötigt werden (siehe Klasse dungeon). Anmerkung: Anhand der Klassen monster und held kann
später das Prinzip der Vererbung verdeutlicht werden, z.B. von einer
Klasse lebewesen.
|
|
In dieser Programmversion kann der Inventar maximal 20 Gegenstände
umfassen, die in dem gekapselten Array Item durch Aufruf der Methode
Aufnehmen() abgelegt werden.
Die Methode Ablegen(n) ermöglicht das Herausnehmen eines Gegenstandes n aus dem Inventar. Die Methode Heilen() hat noch keine Auswirkungen, soll aber demnächst die Reparatur des Inventars ermöglichen, wenn beispielsweise ein Schaden() entstanden ist. Die Methoden sum_w(), sum_a(), sum_r() und sum_g() liefern jeweils die Summe der Werte, Attackewerte, Rüstungswerte bzw. Gewichte aller im Inventar vorhandenen Gegenstände als real-Zahl. Die Methode Zeigen() liefert eine formatierten String, der mit einem Zeilenumbruch-Kode endet. Diese Vorgehensweise ist sicherlich verbesserbar, wenn die Klasse konsole geschickter implementiert wird. Für unseren Prototyp unter MS-DOS soll diese Variante zunächst genügen. |
|
Die Methode Init() erzeugt ein Fensterobjekt der Breite
b
und Höhe h (in Zellen) beginnend mit den Koordinaten
x,y.
Diese Parameter werden in den gekapselten Attributen abgelegt, welche an
die jeweilige physische Konsole anpassbar sind.
Als einfache Ausgabe-Methode stehen Meldung(msg) und Meldungxy(x,y,msg) zur Verfügung. Beide Methoden geben einen String in das Fenster aus, der alle Formatierungen (inkl. Zeilenumbrüche) enthalten muss. Meldung(msg) schreibt den String in die aktuelle Fensterzeile und Meldungxy(..) in die entsprechende Fensterzelle (der String sollte die Länge 1 haben). Die Methode Loeschen() löscht den Inhalt des Fensters. Mit der Methode Tastatur_Abfrage() wird eine Tastatureingabe innerhalb dieses Fensters abgefragt (ohne Ausgabe) und als char zurückgegeben. |
|