Home

und Programmierhandbuch (Acrobat-PDF-Format, 458

image

Contents

1. 30 Im Folgenden werden andere Dateien mit Bilderlisten im Editor getestet Testfall Erwartetes Ergebnis Erzieltes Ergebnis Versuch eine schreibgesch tzte Bilderliste Oldschool dat im Editor zu ffnen Es sollte gefragt werden ob der Dateischutz entfernt werden soll Nur dann kann der Editor die Bilder Laden Andernfalls sollten leere Standardbilder erstellt wer den Fehlermeldung Soll der Schreibschutz der Datei C test Oldschool dat entfernt werden Klick auf Ja entfernt Schreib schutz Editor zeigt die Bilder an Klick auf Nein ergibt die Feh lermeldung Fehler beim Laden der Spiel Grafiken aus Datei C test Oldschool dat Lege vier leere Standard Bilder als Grafi ken an Es werden vier Standardbilder erzeugt und angezeigt Versuch eine fehlerhafte Bilder liste Defekt dat im Editor zu Laden Es sollte eine Fehlermeldung ausgegeben werden Anschlie Bend soll das Bearbeiten mit vier Standardbildern m glich sein Fehlermeldung Fehler beim Laden der Spiel Grafiken aus Datei C test defekt dat Lege vier leere Standard Bilder als Grafiken an Es werden vier Standardbilder erzeugt und angezeigt Versuch eine Bilderliste im Edi tor zu Speichern dabei soll eine schreibgesch tzte Datei ber schrieben werden Zun chst soll darauf hingewiesen werden dass bereits eine Datei unter dem gew hlten Namen e xistiert M chte d
2. Fehlermeldung Fehlerursache Behebungsma nahme Ihre Eingaben sind fehlerhaft bitte keine gleichen Steuerungs tasten verwenden Bei den Benutzereinstellungen sind in der Rubrik Steuerung f r mindestens zwei unterschied liche Funktionen die gleiche Tas te definiert worden Definieren Sie f r jede Steuer funktion eine von den anderen verschiedene eindeutige Taste Fehler beim Speichern der Be nutzereinstellungen in Datei lt Dateiname gt V O Fehler beim Speichern Die ser Fehler kann nach dem ndern der Benutzereinstellungen auftre ten wenn z B die Datei von einer anderen Anwendung blockiert oder das Dateisystem fehlerhaft ist Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift Kontrollieren Sie ob gen gend Platz auf dem Datentr ger vor handen ist und Fighter Schreib rechte auf dem Datentr ger be sitzt berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem Fehler beim Laden der Benut zereinstellungen aus Datei lt Da teiname gt VO Fehler beim Laden Dieser Fehler kann beim Laden der Be nutzereinstellungen Aufruf von Einstellungen oder Neues Spiel auftreten M glicherweise ist die Datei von einer anderen Anwendung ge ffnet oder das Dateisystem ist besch digt Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift berpr fen Sie Ihre Festplatte auf
3. LstDebug mit jedem New um Eins erh ht und mit jedem Dispose ums Eins erniedrigt Beim Beenden des Programms muss LstDebug also in jedem Fall Null sein wenn alle reser vierten Speicherbereiche ordent lich wieder freigegeben wur den In alle getesteten Konstellationen LstDebug 0 Test ob Zeiger der Bilderlisten auch beim fehlerhaften Laden wieder freigegeben werden Dieser Test ist hnlich wie der vorige Auch hier wird erwartet dass LstDebug am Ende immer Null ist In alle getesteten Konstellationen LstDebug 0 Anmerkung Die beiden Z hlvariablen LstDebug und PtrDebug sind in den Units UType UMain UFighterObject und UExtImgLst auskommentiert 32 5 Anhang 5 1 Original Aufgabenstellung Delphi Vordiplomsaufgabe f r Ilis und WIs 33
4. das Spielfeld die Spiel UObjFire UObjText UOptions Infos und das Hauptme UExtImglst n darstellt UObjEnemy UType UObjFighter UFile Dient zur Anzeige und UObjFire UExtImgLst Bewegung der Gegner Raumschiffe UObjFighter UType Basis Klasse Stellt Rou tinen zur Listen Bearbeitung etc UObjFire UType UObjFighter Dient zur Anzeige von Explosionen UObjPlayer UType UObjFighter UFile Dient zur Anzeige und UObjEnemy UObjText Bewegung des Spieler UObjFire UExtImgLst raumschiffs UObjStar UType UObjFighter Dient zur Anzeige und Bewegung der Sterne UObjText UType UObjFighter Dient zur Anzeige von Texten UOptions UType UGame UFile Formular Unit des Opti onen Dialogs UType Enth lt alle Datentypen und Konstanten UEditor UType UExtImgLst UFile Stellt den Editor der Spiel Grafiken UExtImgLst UType Stellt Routinen f r Bil derlisten UFile UType UExtImgLst Stellt Routinen zur Da teibearbeitung UGame UType UFile Stellt einige Routinen f r den Spielverlauf UHighscore UType UFile Anzeige der Highscore Liste Ulnput Bietet Formular wo der Spieler seinen Namen eingeben kann 27 4 4 2 Grafische bersicht der Abh ngigkeiten Formular Units gt UType m Bi y mn 4 4 3 Klassendiagramm der eigenen Klassen UFile a UExtImgLst UGame Objekte Alle Spiel Objekt Klassen sind von einer Basis Kl
5. den HitEnemy bzw HitEnemyShoot die diese Kollision kontrollieren arbeiten nach folgendem Prin zip Durchlaufe jeden Gegner Gegnerschuss der Liste Ermittle seine Eigenschaften Position Gr e Geschwindigkeit etc Berechne seine maximalen Ausma e auf dem Spielfeld sein Rechteck berlappt sich sein Rechteck mit dem des zu pr fenden Objekts ja nein Entferne Gegner Gegnerschuss aus der Liste Zeige ggfs eine Explosion an 4 2 2 5 Das Anzeigen von Explosionen Die Klasse TFire dient zur Anzeige von Explosionen auf dem Spielfeld Auch sie enth lt und verwaltet eine Liste In dieser Liste sind die zurzeit auf dem Spielfeld sichtbaren Explosionen gespeichert Das An zeigen der Explosionen funktioniert hnlich wie bei den anderen Objekten Es wurden zwei verschiedene Methoden implementiert Die eine Methode arbeitet mit einer Image Liste FirelmageList in der acht Einzelbilder nacheinander gezeigt werden Da die Einzelbilder sich im Spielverlauf an die jeweilige Gr Be des getroffenen Gegners oder Spielers anpassen m ssen und die von Windows bereitgestellte Funktion zum Stretchen eines Bildes relativ langsam ist ist f r langsamere Computer die zweite Methode eher empfehlenswert In diesem Fall wird einfach ein gelbes Rechteck mit schwarzem Rand in der Gr e des getroffenen Objekts gezeichnet Nach kurzer Zeit wird der schwarze Rand immer gr er und gr er bis die Explosion
6. ge ndert dann wird das Grid neuge zeichnet Die nderung wird also automatisch sichtbar da der Buffer zum Zeichnen ausgelesen wird 4 2 4 Die Funktionen zum Speichern und Laden 4 2 4 1 Speichern und Laden der Benutzereinstellungen Die Benutzereinstellungen werden in der Datei config ini abge General speichert Diese typische Ini Datei ist eine Textdatei die aus LevelTime 45 mehreren Abschnitten besteht in denen wiederum mehrere Ina Schl sselvariablen stehen die alle jeweils einen Wert besitzen Stars Ein Abschnitt ist immer durch einen Bezeichner in eckigen Count 50 Klammern gekennzeichnet In den n chsten Zeilen folgen MaxSpeed 6 dann die Schl sselvariablen die jeweils nach einem einen Wert festhalten Das Laden und Speichern der Benutzereinstel on gt lungen geschieht mit Hilfe der fertigen Funktionen der Delphi Right 39 Klasse T niFile denen man nur entsprechende Abschnitte und Fire 32 Schl sselvariablen bergibt ohne sich um die eigene Dateiverar Pause 80 beitung zu k mmern Sollte es beim Laden der Einstellungen zu Fehlern kommen z B weil Datei nicht vorhanden oder Abschnit on 00 te in der Datei fehlen so werden alle Eintr ge mit Standard InePoints 106 Werten belegt Count 3 IncCount 2 Speed 15 Abschnitt General AL i a Schl sselvariable LevelTime TneFire Wert 45 20 4 2 4 2 Speichern und Laden der Highscoreliste hnlich wie die Benu
7. in der Anzahl der gegnerischen Spielfiguren und in der Geschwindigkeit der Bewegungen der gegnerischen Spielfiguren und in der Schussfrequenz der gegnerischen Spielfiguren Sowohl die Anzahl der gegnerischen Spielfiguren ihre Geschwindigkeit als auch ihre Schussfrequenz wird mit jeder neuen Spielstufe um jeweils einen bestimmten Anteil erh ht Um eine Spielstufe zu been den steht dem Spieler jeweils nur eine begrenzte Zeitspanne zur Verf gung die vom Benutzer einstellbar ist F r jede Spielstufe steht dem Spieler dieselbe Zeitspanne zur Verf gung der Countdown beginnt also mit jeder Spielstufe von neuem Schafft der Spieler es nicht alle Gegner einer Spielstufe in der vor gegebenen Zeit zu zerst ren dann verliert der Spieler eines seiner Leben und wenn er dann noch mindes tens ein Leben brig hat beginnt die gleiche Spielstufe von neuem lt der Countdown startet von neuem und es sind wieder alle Gegner dieser Spielstufe vorhanden Dies steht im Gegensatz zur Zerst rung einer Spielfigur durch einen Schuss eines Gegners oder durch eine Kollision mit einem Gegner w hrend einer Spielstufe In so einem Fall wird wenn der Spieler noch mindestens ein Leben hat die Spielstufe ohne Verz gerung fortgesetzt d h mit der Anzahl der Gegner die direkt vor der Zerst rung des Spielers brig waren und mit dem Countdownstand der unmittelbar vor der Zerst rung des Spielers aktuell war W hrend der kurzen Phase der Zerst rung des Spieler Raum
8. Impact 5 zum Ent 1280x1024 und 32 Bit Farbtiefe True wurf eigener Spielgrafiken Color e UltraEdit 32 Version 9 0 zum Bearbeiten der e Stereo Soundkarte Quellcodes e CD ROM und Diskettenlaufwerk 4 2 Problemanalyse und Realisation Das Realisieren des Spiels Fighter stellt mehrere Anforderungen an den Programmierer Die wichtigs ten Bestandteile des Programms sind Das Konzept zur Spielsteuerung Game Loop Die Realisierung des Bewegungsablaufs der verschiedenen Objekte Spieler und Gegnerraum schiffe Sterne Sch sse Das Bereitstellen eines Editors f r den Anwender zum Entwurf eigener Spielgrafiken Die Funktionen zum Speichern und Laden von Benutzereinstellungen der Highscoreliste und Spielgrafiken 4 2 1 Das Konzept zur Spielsteuerung Game Loop 4 2 1 1 Beschreibung des Spielfelds durch das Hauptformular Bei der Programmierung von Fighter spielt das Hauptformular eine sehr wesentliche Rolle Das Formu lar enth lt sowohl das Spielfeld Zmage und Spielstatus Anzeigen Labels die Image Liste f r die Exp losionen als auch die drei notwendigen Timer Die Behandlung der gedr ckten Spieltasten und das n dern der Spielfeldgr e sind au erdem Ereignisse die ebenfalls ber das Formular abgewickelt werden m ssen Aus diesen Gr nden findet man auch in der zum Hauptformular geh renden Unit UMain einige kleine Routinen die f r Spielsteuerung notwendig sind die eigentliche Spiellogik ist jedoch a
9. Spiels wird folgender Ablauf alle 10 ms wiederholt Der Ablauf ist der eigentliche Spielverlauf etwas vereinfacht und entspricht sozusagen der Game Loop Das gesamte Spielfeld wird gel scht alles schwarz gef llt und ein d nner Rahmen wird zur Abgren zung um das Spielfeld gezeichnet Die Sterne werden je nach Geschwindigkeit ein kleines St ck weiter nach unten bewegt und anschlie Bend gezeichnet Die Gegner werden ein kleines St ck bewegt Soll ein Gegner gerade schie en Ja nein Ein neuer Gegnerschuss wird abgesetzt Zeichne die Gegner Die gegnerischen Sch sse werden ein kleines St ck nach unten bewegt und anschlie end gezeichnet Die Spieler Sch sse werden ein kleines St ck nach oben bewegt und anschlie end gezeichnet Wurde ein Gegner durch ein Spieler Schuss getroffen ja nein Entferne den Gegner l se Explosion aus und schreibe dem Spieler Punkte gut Jetzt wird der Spieler evtl bewegt anschlie end gezeichnet Wurde der Spieler von einem Gegner Gegner Schuss getroffen ja nein Ziehe dem Spieler ein Leben ab Hat der Spieler noch mehr als ein Leben ja nein Das Spiel wird beendet evtl neue Highscore Jetzt werden die Explosionen vorbereitet das richtige Bild wird ermittelt und angezeigt Nun werden vorhandene Text Meldungen angezeigt und anschlie end evtl abgedimmt bzw entfernt Jetzt wird der Spielstatus berpr ft bzw
10. fehlerhafte Strukturen im Da teisystem Fehler beim Laden der Highsco re aus Datei lt Dateiname gt VO Fehler beim Laden Dieser Fehler kann beim Laden der Highscoreliste Durch Aufruf aus dem Men oder nach Ende eines Spiels auftreten M glicherweise ist die Datei von einer anderen Anwendung ge ffnet oder das Dateisystem ist besch digt Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem Fehler beim Speichern der Highscore in Datei lt Dateina me gt V O Fehler beim Speichern Die ser Fehler kann auftreten wenn am Ende eines Spiels die neue Highscore nicht gespeichert wer den kann weil z B die Datei von einer anderen Anwendung blo ckiert oder das Dateisystem feh lerhaft ist Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift Kontrollieren Sie ob gen gend Platz auf dem Datentr ger vor handen ist und Fighter Schreib rechte auf dem Datentr ger be sitzt berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem 10 lt Dateiname gt nicht gefunden Verwende Standard Werte VO Fehler beim Laden Der Feh ler kann auftreten wenn die Be nutzereinstellungen oder die Highscoreliste nicht geladen wer den konnte weil die Datei evtl gel scht wurde und nicht mehr existiert Stellen
11. gesetzt Levelzeit abgelaufen Level fertig Als letztes wird der Buffer sichtbar gezeichnet und die Spieler Punktzahl aktualisiert Fighter verwendet neben dem eigentlichen Timer zum Zeichnen des Spiels noch zwei weitere Timer LevelTimer Dieser Timer wird jede Sekunde aufgerufen und z hlt somit die aktuelle Rundenzeit EnemyTimer Dieser Timer wird zweimal die Sekunde aufgerufen und ist f r das Verhalten der gegnerischen Sch sse relevant Siehe Kap 4 2 2 4 Das Schussverhalten der Gegner 14 4 2 2 Die Realisierung des Bewegungsablaufs der Objekte 4 2 2 1 Der Objektorientierte Ansatz Da in dem Spiel Fighter die verschiedensten Objekte Sterne Spieler und Gegnerraumschiffe Sch sse Explosionen und Texte auf dem Spielfeld erscheinen kann es auch bei der Programmierung sinnvoll sein diese Spielobjekte zu bernehmen und sie nach objektorientertem Ansatz entsprechend zu Kapseln Diese Vorgehensweise hat bei der Programmierung den Vorteil dass das Programm bersichtlicher wird da die zusammenh ngenden Spielobjekte auch w hrend der Programmierung zusammen in einer Struktur erhalten bleiben Der zweite gro e Vorteil der Objektorienterten Programmierung ist die Vererbung Da die verschiedenen Spiel Objekte sehr hnliche Eigenschaften besitzen z B Position auf dem Spielfeld Geschwindigkeit Gr e kann man mit Hilfe einer Basis Klasse gleiche Eigenschaften f r die daraus resultierenden Kl
12. in Level 1 10 Das Formular unterteilt sich in vier verschiedene tereimHnegund ee E Rubriken Anzahl 50 y Geschwindigkeit E 3 T Verwende bessere Explosionen LANGSAMERIIN In der Rubrik Allgemeine Einstellungen kann nderungen Speichem TE die Rundenzeit f r jeweils einen Level eingestellt werden Schafft der Spieler es nicht innerhalb dieser Zeit alle Gegner zu zerst ren verliert er selbst ein Leben und muss es noch einmal versuchen Die Anzahl wie oft der Spieler von Gegnern getroffen werden darf bis das Spiel GameOver ist kann hier ebenfalls unter Anzahl Leben des Spielers gesetzt werden Die Rubrik Steuerung enth lt die zu verwendenden Tasten f r das Bewegen des Raumschiffes Links Rechts das Abfeuern eines Schusses und die Pause Taste Um eine Funktion neu zu belegen klicken Sie mit der Maus einfach auf das entsprechende wei e Editfeld und dr cken die gew nschte neue Taste Nach dem Loslassen der Taste erscheint dann automatisch im Editfeld die entsprechende Beschrei bung In der Rubrik Sterne im Hintergrund k nnen Sie die Anzahl der im Hintergrund des Spielfelds flie genden Sterne bestimmen Bitte Beachten Sie dass zu viele Sterne das Spielen evtl erschweren k nnen Ebenso kann die Rechenleistung Ihres PCs stark darunter leiden Der Wert Geschwindigkeit gibt an wie schnell die Sterne sich maximal nach unten bewegen k nnen Auf der rechten Seite des Formulars finden Si
13. jedem Zeitpunkt die M g lichkeit also auch w hrend einer Bewegung einen Schuss von seiner aktuellen Position senkrecht nach oben abzufeuern um eines der gegneri schen Raumschiffe zu treffen Dies geschieht mit der Leertaste Jeder getroffene Gegner bringt dem Spieler 100 Punkte Der Spieler hat ein Level geschafft wenn kein Gegner mehr auf dem Spielfeld ist was durch den Text Level erfolgreich best tigt wird Der Spieler hat wieder einen kurzen Moment Ruhe bis es im n chsten Level mit neuen Gegner weitergeht solange bis er alle seine Leben verloren hat und das Spiel GameOver ist Soll ein laufendes Spiel pausiert werden so kann dies durch einen Druck auf die Taste P geschehen ein erneutes Dr cken setzt das Spiel fort 3 4 3 Einstellungen COC Fighter bietet Ihnen die ziel Spiel Editor Highscore ee M glichkei t bes timm te Ein Allgemeine Einstellungen egner N 5 Std Min Sek z _ Bause stellungen des Spielverhaltens teveifundenzet jo e ap een FREE zu ver ndern und an Ihre eige yyueten ses spees amcan FE Beenden nen Vorstellungen und W n Erh hung pro Levelum 2 E sche anzupassen Durch Klick sts ai 2 Tempo in Level 1 15 auf das Men Spiel gt Einstellungen wird ein Links Links EP gt es k m Erhoh ro Level um 2 z neues Formular ge ffnet mit dessen Hilfe Sie diese p u ee Anderungen vornehmen k nnen Schussfrequenz
14. u erste Reihe die Option H he funktioniert entsprechend mit dem Unterschied dass die i Prozent dos Spieweides Bildpunkte am unteren Ende der Grafik eingef gt bzw entfernt werden Mit Hilfe des wichtigen Schalters Gr e in m ssen Sie festlegen wie gro die aktuelle Grafik sp ter als Spielobjekt auf dem Spielfeld erscheinen soll Geben Sie beispielsweise f r das Bild vom Spieler einen Wert von 10 ein so belegt das Spielerraumschiff im Spiel alleine schon 10 des gesamten Spiel feldes 3 4 5 Highscore oix Durch Klick auf den Men ar Fiohter UT ee oe i iel Editor Hi punkt Highscore wird ein seai Formular ge ffnet das die Highscore anzeigt Hier sind die zehn besten Spie ler mit Namen und erreichter Punktzahl aufgelistet wie links im Beispielbild zu erkennen Der Spieler Bender auf Platz 1 und Slurm Mc Kenzie an 10 Stelle auf dem untersten Platz Bitte Namen eingeben Um sich selbst in dieser Liste verewigen zu K nnen muss man ein neues Spiel starten und mehr Punkte erzielen als der unterste Spieler aus der Highscore in diesem Beispiel also mehr als Slurm Mc Kenzie 1000 Punkte Nach Ende des Spiels wird man dann aufgefordert seinen Namen einzugeben der Spieler mit der geringsten Punktzahl wird dann automatisch entfernt und die Highscore wird neu sortiert 3 5 Fehlermeldungen In Fighter k nnen folgende Fehlersituationen auftreten
15. 21 4 3 Beschreibung grundlegender Datenstrukturen enseessesnnesnnesnnesnnennensnensnnnnnnnnnnnnnnnennesnnennnennnesnnnnnonsnensnensnnnsnnnsennnnnnn 21 4 3 1 Verwendete Konst nten ze 202 reset E E E EEE O LOREEN ATi 21 4 3 2 BANS TE BA S n EESE AAS ESES ES E S EESTE ES E E AE ES S 22 4 3 2 1 Auflistung und Beschreibung aller eigenen Typen u0220022002200nneennnsnnesnnennnennnesnennnonsnennnensnnnnnnnnennnnnnn 22 4 3 2 2 Die Zeigerstruktur der Bilderlisten TExtImgLst und Fighter Objekt Listen TFighterPtr 25 4 3 3 Aufbau der verwendeten D teien 2 u 4ssss000 een nm Ren bs nenn 26 4 3 3 1 Die Datei config ini f r Highscore und Benutzereinstellungen 24u224022402200nseennensnenseennnnnennnnnnnn 26 4 3 3 2 Die Dateien f r Spielgrafiken 2002004202420nesnnennnnnnensnonnnensnnnnnnnnnnnnnnnnsnnennnesnnesnnnsnensnensnensnensennnennnnnnennn 26 4 4 Programmorganisationsplan uursssusssssessnnnsnnnssnnnennnensnnennnnssnnnensnnnsnnnnnnnnnsnnnnsnnssnnnnsnessnnensnessnnnnsnnssnnnnsnesssnnnsnnssnnnn 27 4 4 1 bersicht der Zugriffe der eigenen Units untereinander uuneeseensenenensenensennnnennnnnnennnnnnnnensnennennnneeneenennne 27 4 4 2 Grafische bersicht der Abh ngigkeiten euieserasebhisbenckhnik ebenen 28 4 4 3 Klassendiagramm der eigenen Klassen ursuurs00ssuesenseensonnnennesnnesnnensnonsnensnnnnnnnnnn
16. 3 3 Aufbau der verwendeten Dateien 4 3 3 1 Die Datei config ini f r Highscore und Benutzereinstellungen Die Datei config ini ist wie schon in Kap 4 2 4 1 beschrieben eine Textdatei die nach dem Schema von Windows Konfigurationsdateien Ini Dateien aufgebaut ist Sie besteht aus mehreren Abschnitten in denen wiederum mehrere Schl sselvariablen stehen die alle jeweils einen Wert besitzen Der Aufbau der Datei sieht folgenderma en aus Die Abschnitte der Benutzereinstellungen Der Abschnitt f r die Highscore General LevelTime 45 Lives 3 Stars Count 50 MaxSpeed 6 Control Left 37 Right 39 Fire 32 Pause 80 Enemy Points 100 IncPoints 100 Count 3 IncCount 2 Speed 15 IncSpeed 2 Fire 10 IncFire 2 Highscore PlayerNamel Bender PlayerPoints1 10000 PlayerName2 Fry PlayerPoints2 9000 PlayerName3 Nibbler PlayerPoints3 8000 PlayerName4 Amy Wong PlayerPoints4 7000 PlayerName5 Hermes Conrad PlayerPoints5 6000 PlayerName6 Leela PlayerPoints6 5000 PlayerName7 Dr Zoidberg PlayerPoints7 4000 PlayerName8 Zapp Brannigan PlayerPoints8 3000 PlayerName9 Prof Farnsworth PlayerPoints9 2000 PlayerName10 Slurm Mc Kenzie PlayerPoints10 1000 4 3 3 2 Die Dateien f r Spielgrafiken Der Aufbau der Dateien f r Spielgrafiken ist typi siert und kann nicht mit einem Editor ge ffnet wer den Jede g ltige Datei die Spielgrafiken enth lt besteht mindestens aus vier Bitmap Bl
17. Delphi Vordiplomsprogramm Thema Space Invaders Fighter Name Andreas Schibilla E Mail Andreas Schibilla de Fachrichtung Technische Informatik Matrikelnummer 114900 Fachsemester 3 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 2 2 0 2320 0s2 52820e ase a ECE S Teo UE ko eV EES eb o a EEES En Di insb 2 2 Allgemeine Problemstellung 22224422402200n20ensonnnnnnnnsnnesnnesnnesnnennnnnnonsnensnensonnnnnnennnnsnnesnnesnnesnnnsnesnnessnensnnnsnnnsennnnrnnsnn 3 3 Benutzerhandbuch u 2 3 5 2 0 220 85808820 242 220 BE 55 HERE IRRE E VAE ESK OEE benennen 4 3 1 Ablaufbedingungen 2220 22 2 8 22222 5202 0 pas iR Reisen 4 3 2 Programminstallation 0 8 2 2 200 2882 RS anne Rn Ebenen 5 3 3 Programmst lt 2 222 000 en Ru Run RURBELRAIRDR IS EME aV VEK pE SEEE aS 5 3 4 Bedienungsanleitung 2 220 228 teei ovek oet eE iKa E EOE Ian RR ESEE ES IK lssonlehbehuheisineien 5 34A Das Spielfeld niens i bauen A E S E en S E EE 5 34 2 Spielsteuerungund Ablauf 8 042 ea are ESE NN SE TANE 6 34 3 Einstellungen une a E a N S N E E E S R E S E S R N EEE 6 3 44 FEdItOT S iren en e r E E E A E TREE R E E EREE N S EOE 7 344 1 Aufbauider Bilderlisten seiis aeina a e E E HR BR He SS 7 3 4 4 2 T aden und Speichern von Bilderlisten sisirin ii a E E Es ee 8 34 43 Bearbeiten eines Bildes iss iss nen Ron a 8 3 49 Highsc re nissan ei
18. E E EE E RE E EEN E EEAS 9 3 3 Fehlermeld ngen iers E BREI en E E E EE e E preisen 10 3 0 Wiederanlautbedin g ng einiino a E E e E ern E ENEE E E E 12 4 Programimierhandb chi tinna eier Is E EAE N sin R E E S EE 13 4 1 Entwickl ngskonfig ra oN isg aenn e a a R Eae SEEE E lien 13 4 2 Probleman lyse und Realis tioiicirice esen 2 ea E TEE E T EEE EEEE EE ETER 13 4 2 1 Das Konzept zur Spielsteuerung Game Loop 224220422022nunnnennnenseennnnnnnnnnnnnnnnnennntsnnennnesnnnsnonsnensnensnnnsennnnnnennn 13 4 2 1 1 Beschreibung des Spielfelds durch das Hauptformular uuesseesseessessnesnnesnnesnnesnnesnensnensnensnensnnnnonnnnnnnennnn 13 4 2 1 2 Aufbau der Game Loop durch Timer Ereignisse uuesseessessnesnnesnnesnensnensnensnnnnonnnnnnnsnnennnennnennnnsnonsnensnensnenen 14 4 2 2 Die Realisierung des Bewegungsablaufs der Objekte u2240220nssnsuennennnesnnesnnesnnennnennnnsnennennnensennnnnnnnnnennn 15 4 2 2 1 Der Objektorientierte Ansatz oiiire Bass eiienakiiiitnen nennen 15 4 2 2 2 Die Bewegung der Sterne im Hintergrund 2s40snessnensnensennnnnnnnnnnennnnssnnennonnnonsnonsnennensnensnensonnsennennnennn 15 4 2 2 3 Die Bewegunge d s Spielers oei ereen 82er in EIR eb E REEE E TE 15 4 2 2 4 Die Bewegung der Gesner iie reire E Bikes E E E erreeneeerre 16 42 23 Das Anzeigen Von Explosionen i o seron reten rrean ei ia IIE Eee 18 4 2 2 6 Das Anzeigen von Informationen f r den Spie
19. Figh ter exe default dat config ini von der Installations CD auf die Festplatte kopiert werden Dort kann dann das Spiel durch Aufruf von Fighter exe gestartet werden Durch L schen des kopierten Verzeichnisses inkl aller Unterdateien kann das Spiel einfach wieder deinstalliert werden 3 3 Programmstart Das Spiel wird nach der Installation durch Aufruf der Datei Fighter exe aus dem Spielverzeichnis von der Festplatte gestartet Dies erreichen Sie indem Sie mit der linken Maustaste im Windows Explorer doppelt auf den Dateinamen Fighter exe klicken Der Programmstart direkt von CD ist nicht m glich da auf diesem Medium kein Schreibzugriff gestattet ist Sobald das Spielfenster erscheint kann durch Klick auf das Men Spiel gt Neues spiel Edtor Highscore Spiel ein neues Spiel gestartet werden woraufhin der Spieler in Level 1 beginnt Wenn das Programm fragt ob der Schreibschutz einer Datei entfernt werden soll sO _gistelungen ist dies unbedingt mit Ja zu beantworten Beenden Pause 3 4 Bedienungsanleitung Fighter ist ein Geschicklichkeitsspiel bei dem der Spieler ein Raumschiff steuert und versucht Gegner raumschiffe abzuschie en oder deren feindlichen Geschossen auszuweichen 3 4 1 Das Spielfeld Durch Klick auf das Men Spiel gt Neues Spiel wird ein neues Spiel gestartet wor Spiel Editor Highscore aufhin der Spieler in Level 1 beginnt Das quadratische Spielfel
20. MY_SHOOT_SPEED 2 C_FIRE_SPEED 10 C_SND_ C_ERR_ C_MSG_ Kurze Beschreibung Definiert ein Array mit f nf konstanten Farbwerten Die Sterne im Hintergrund werden in einer dieser Farben gezeichnet Gibt die Standard Spielfeldgr e an an der sich die Gr en nderungen orientieren Da das Spielfeld von einem T mage dargestellt wird muss auch die Gr e auf dieser Komponente beachtet werden Mit Hilfe dieses Faktors kann die Gegner Geschwindigkeit auf dem Spielfeld beeinflusst werden Gibt an wie schnell sich das Spielerraumschiff hin und her bewegen kann Gibt an wie schnell ein Schuss nach oben l uft Gibt an wie viele Sch sse der Spieler abfeuern kann Ist diese Konstante z B Eins darf der Spieler immer nur einen Schuss zurzeit abfeuern auch sehr interessan ter Spielmodi Gibt an wie schnell ein Gegnerschuss sich nach unten bewegt Gibt an wie lange die einzelnen Phasen Bilder einer Explosion sichtbar sind Alle Konstanten mit diesem Anfang weisen auf Datei namen der abzuspielenden Sounds Alle Konstanten mit diesem Anfang enthalten die unter schiedlichen Fehlermeldungen des Programms Alle Konstanten mit diesem Anfang enthalten unter schiedliche Nachrichten an den Benutzer 4 3 2 Eigene Typen 4 3 2 1 Auflistung und Beschreibung aller eigenen Typen Hier finden Sie eine Auflistung aller Typen die im Programm verwendet werden Typdeklaration TTimeRang
21. Sie sicher dass die Datei im angegebenen Verzeichnis e xistiert Ist sie nicht aufzufinden kopieren Sie die Datei erneut von der Installations CD in das Spiel verzeichnis Fehler beim Speichern der Spiel Grafiken in Datei lt Datei name gt V O Fehler beim Speichern Die ser Fehler kann auftreten wenn im Editor eine Bilderliste gespei chert werden soll aber z B die Festplatte voll ist oder ein ung l tiger Dateiname Pfad angegeben wurde Versuchen Sie es noch einmal mit einem anderen Dateinamen Kontrollieren Sie ob gen gend Platz auf dem Datentr ger vor handen ist und Fighter Schreib rechte auf dem Datentr ger be sitzt berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift Fehler beim Importieren der Bitmap aus Datei lt Dateiname gt 3 Dieser Fehler kann auftreten wenn im Editor eine Spielgrafik aus einer Bitmap Datei geladen werden soll Vermutlich ist das Bitmap Format nicht kompatibel oder es trat ein O Fehler auf Versuchen Sie eine andere Bit map Datei zu laden und berpr fen Sie ob es sich dabei um eine Standard Bitmap Datei ohne Komprimierung handelt Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem Fehler beim Laden der S
22. Sterne in Hintergrund StMaxSpeed Maximale Geschwindigkeit der Sterne CrtrLeft Steuertaste Links CrtrRight Steuertaste Rechts CtrFire Steuertaste Schie en CtrPause Steuertaste Pause EnPoints Punktzahl f r ein getroffenen Gegner in Level 1 EnCount Anzahl der Gegner im ersten Level EnIncCount Wie viele Gegner pro Level mehr EnSpeed Geschw der Gegner in Level 1 EnIncSpeed Erh hung der Geschwindigkeit pro Level EnFire Schussfrequenz der Gegner im ersten Level EnIncFire Erh hung der Schussfrequenz pro Level 4 3 2 2 Die Zeigerstruktur der Bilderlisten TExtImgLst und Fighter Objekt Listen TFighterPtr Bei den hier eingesetzten Listen handelt es sich in beiden F llen um doppelt verkettete lineare Listen Beide Listen sind ber einen Zeiger ListPtr der auf das erste Element zeigt zu erreichen Im Gegensatz zur Fighter Objekt Liste besitzt die Bilderliste jedoch zus tzlich einen Zeiger auf das letzte Element LastPtr da dies das Einf gen eines Elements am Ende der Liste vereinfacht Die folgende Grafik zeigt den Aufbau der doppelt verketteten linearen Liste mit zwei Elementen a N ListPtr 2 TFighter TFighter Nil Prev Data Next Prev Data Next Nil Bei dieser Liste stellt Data die Info Kom
23. asse TFighterObject abgeleitet Au erdem gibt es die Klasse TExtImgLst die als Erg nzung zu Borlands T mageList gedacht ist die auch mit Bitmaps un terschiedlicher Gr e umgehen kann Basis Klasse TFighterObject y TStars TPlayer TText TFire TEnemy 28 Abgeleitete Klassen TExtImgLst 4 5 Programmtests Zun chst werden alle kritischen Dateioperationen mit der Datei config ini getestet Testfall Erwartetes Ergebnis Erzieltes Ergebnis Config ini ist schreibgesch tzt Versuch sie zu durch Start eines Neuen Spiels zu Laden Keine Fehlermeldung Spiel soll te starten Keine Fehlermeldung Spiel star tet Config ini ist schreibgesch tzt Versuch sie zu durch Aufruf der Benutzereinstellungen zu Laden Keine Fehlermeldung Dialog sollte mit den Werten angezeigt werden Keine Fehlermeldung Dialog wird angezeigt Config ini ist schreibgesch tzt Versuch sie zu in den Benutzer einstellungen zu Andern Es sollte gefragt werden ob der Dateischutz entfernt werden soll Nur dann kann fehlerfrei gespei chert werden Fehlermeldung Soll der Schreibschutz der Datei C test config ini entfernt wer den Klick auf Ja entfernt Schreib schutz speichert die nderungen Klick auf Nein gibt Fehlermel dung Fehler beim Speichern der Benutzereinstellungen
24. assen geschickt zusammenfassen In diesem Fall ist die Basis Klasse TFighterObject in der Unit UObjFighter vorhanden Sie stellt allen von ihr abgeleiteten Klassen bestimmte Grundfunk tionen zur Verf gung Dazu geh rt z B das Aufbauen und Bearbeiten von Listen mit den von allen Ob jekten genutzten Grundelementen wie Position auf dem Spielfeld Breite und H he etc sowie Positio nierungsberechnungen auf dem Spielfeld oder Bildgr enanpassungen der Objekte Der f r die Listenfunktionen ben tigte Datentyp TFighterRec der alle hnlichen Eigenschaften der un terschiedlichen Spielobjekte zusammenfasst enth lt folgende Elemente X Y Position Geschwindigkeit Breite und H he Farbe G ltigkeit Leben Gr e Text Infos und er weiterte Bewegungsinfos eines Objekts 4 2 2 2 Die Bewegung der Sterne im Hintergrund Die Funktionen zur Darstellung der w hrend eines Spiels im Hintergrund fliegenden Sterne sind in der Klasse TStars verankert Diese Klasse verwaltet eine eigene Liste in der jeder Stern mit aktueller Posi tion und seinen Eigenschaften z B Farbe Geschwindigkeit Gr e vermerkt ist Die Zeichenfunktion der Klasse Draw kann dann zu jedem Zeitpunkt alle Sterne mit ihren individuellen Eigenschaften auf das Spielfeld zeichnen und dabei jeden Stern f r sich entsprechend weiterbewegen Die Zeichenfunktion arbeitet nach folgendem Prinzip Durchlaufe jeden Stern der Liste Ermittle seine Eigensc
25. atei default dat erneut von der Installations CD in das Spielver zeichnis kopiert werden Soll der Schreibschutz der Da tei lt Dateiname gt entfernt wer den Diese Fehlermeldung tritt beim Laden bzw Speichern der Datei auf wenn sie schreibgesch tzt ist Um erfolgreich aus der Datei zu lesen bzw nderungen abzuspei chern muss der Schreibschutz entfernt werden Dies kann durch bejahen der Frage geschehen andernfalls bleibt die Datei un ver ndert und die Anweisung wird abgebrochen Fehler Datei lt Dateiname gt exis tiert nicht Dieser Fehler tritt auf wenn ver sucht wird eine Datei zu Laden die nicht existiert Stellen Sie sicher dass die Datei vorhanden ist und der Dateina me Pfad korrekt ist erscheitn die Fehlermeldung weiterhin dann berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem Fehler beim Entfernen des Da tei Schreibschutzes von Datei lt Dateiname gt Dieser Fehler kann auftreten wenn versucht wird eine schreib gesch tzte Datei zu laden bzw speichern aber z B eine andere Anwendung den Zugriff blockiert oder das Medium keinen Schreibzugriff bietet z B bei CD ROM Medien Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift Kontrollieren Sie ob Fighter Schreibrechte auf dem Datentr ger besitzt von CD kann nur ge lesen werden berpr fen Sie Ihre Festpl
26. atte auf fehlerhafte Strukturen im Da teisystem 3 6 Wiederanlaufbedingungen Beim Spielen von Fighter Kann es zur Laufzeit evtl passieren dass das Programm z B aufgrund eines Stromausfalls oder Hardware bzw Systemfehlers pl tzlich ungewollt abgebrochen wird In diesem Fall ist das aktuelle Spiel vorbei und kann leider nicht weiter fortgesetzt werden Wurden gerade nderungen an Einstellungen oder Grafiken im Editor gemacht so sind auch diese unwiderruflich verloren gegangen Im Normalfall kann Fighter aber trotzdem weiterhin verwendet werden allerdings ohne die gerade ge machten nderungen In seltenen F llen kann es passieren dass die Einstellungen oder Bilderlisten derart zerst rt sind dass sie erneut von der Installations CD kopiert werden m ssen In diesem Fall m ssen Sie die beiden Dateien default dat und config ini aus dem Verzeichnis Fighter der Installations CD in das Spielverzeichnis auf Ihrer Festplatte kopieren und die besch digten Dateien berschreiben 12 4 Programmierhandbuch 4 1 Entwicklungskonfiguration Die Entwicklung von Fighter wurde mit Hilfe folgender Konfiguration durchgef hrt Hardware Software e AMD Athlon XP 1600 1 4 GHz e Betriebssystem Windows XP e 512 MB Arbeitsspeicher e Programmierumgebung Delphi 6 0 Perso e Ati Radeon 8500 Grafikkarte 64 MB nal und Professional Edition e 19 Monitor mit einer Aufl sung von e Grafikprogramm Photo
27. cken die unbedingt in der Reihenfolge Spieler Spieler Schuss Geg ner Schuss Gegner vorliegen m ssen Nach den vier Bl cken k nnen wie rechts angedeutet weite re beliebig viele Bl cke mit Gegner Grafiken fol gen Block 1 Grafik des Spielers Block 2 Grafik des Spieler Schusses Block 3 Grafik des Gegner Schusses Block 4 Grafik des 1 Gegner Block 5 Grafik des 2 Gegner Block 6 Grafik des 3 Gegner Block n Grafik des n Gegner Jeder einzelne dieser Bitmap Bl cke besitzt folgenden Aufbau Bytes Datentyp Inhaltliche Bedeutung Byte 0 Byte Das erste Byte enth lt die Prozent Information wie viel das Bild auf dem Spielfeld einnehmen soll Byte 1 8 Int64 StreamSize Die n chsten acht Bytes enthalten die Gr e des darauf folgenden Bitmap Streams Diese Angabe muss mitgespeichert werden da ein Laden ohne Gr en informationen des Bitmap Streams sonst unm glich w re Byte 9 StreamSize 8 TMemoryStream Hier ist die eigentliche Grafik als Stream gespeichert 26 4 4 Programmorganisationsplan 4 4 1 bersicht der Zugriffe der eigenen Units untereinander Unit Aufgerufen Units im Aufgerufene Units im Beschreibung Interface Teil Implementation Teil UMain UType UObjPlayer UEditor Ulnput UHigh Hauptformular Unit die UObjEnemy UObjStar score UFile UGame
28. d zeigt am unteren EEE Pause Rand das Spieler Gegnerraumschiff Spieler Schuss raumschiff das Einstellungen Statusanzeige des Spiels mit Hilfe der Tas zeigt aktuel les Level die tatur nach links Beenden restlichen und rechts bewegt werden kann Dar Leben und erreichte ber fliegen auf zuf lligen Bahnen Punktzahl Gegnerraumschiffe die versuchen je des Spielers nach Level unterschiedlich gut den Spieler abzuschie en Ebenso kann auch der Spieler Sch sse nach oben abfeuern um die feindlichen Raum schiffe vom Spielfeld zu verbannen und Punkte zu ergattern Den aktuel len Punktestand des Spielers sowie die verbleibende Rundenzeit und die Anzahl der restlichen Leben des Spie En lers sind zur besseren Orientierung Rundenzeit des immer links neben dem Spielfeld zu aktuellen Levels Gegner Schuss Spielerraumschiff sehen 3 4 2 Spielsteuerung und Ablauf Sobald ein neues Spiel gestartet wurde erscheint die Meldung Achtung das Spiel geht los auf dem Spielfeld und der Spieler hat noch kurz Zeit sich darauf einzustellen bis kurz darauf die ersten Gegner erscheinen Ab diesem Zeitpunkt k nnen sowohl der Spieler als auch die Gegner begin nen sich zu bewegen oder Sch sse abzufeuern Der Spieler kann sein Raumschiff mit den Cursor Tasten und seitlich hin und herbe wegen jeweils bis zum linken oder rechten Rand des quadratischen Spiel felds weiter geht es nicht Au erdem hat er zu
29. der Spiel Grafiken aus Datei C test default dat Lege vier leere Standard Bilder als Grafiken an Es werden vier Standardbilder erzeugt und angezeigt Default dat ist nicht vorhanden Versuch ein neues Spiel zu star ten Es sollte eine Fehlermeldung kommen die darauf hinweist dass die Datei nicht vorhanden ist und das Spiel darum nicht starten kann Fehlermeldung Fehler Datei C test default dat existiert nicht Fehler beim Laden der Spiel Grafiken das Spiel kann ohne Bilder nicht starten Default dat ist nicht vorhanden Versuch im Editor neue Stan dard Bilder zu erzeugen Es sollte eine Fehlermeldung kommen die darauf hinweist dass die Datei nicht vorhanden ist Anschlie end sollte das Bear beiten mit 4 leeren Standardbil dern m glich sein Fehlermeldung Fehler Datei C test default dat existiert nicht Fehler beim Laden der Spiel Grafiken aus Datei C test default dat Lege vier leere Standard Bilder als Grafiken an Es werden vier Standardbilder erzeugt und angezeigt das bear beiten ist m glich Default dat ist fehlerhaft Ver such ein neues Spiel zu starten Es sollte eine Fehlermeldung er scheinen die dem Anwender mit teilt dass die Bilder nicht geladen werden konnten und das neue Spiel somit nicht gestartet werden kann Fehlermeldung Fehler beim Laden der Spiel Grafiken das Spiel kann ohne Bilder nicht star ten
30. die Highscore zu Laden Das Laden sollte mit den Stan dard Werten geschehen Fehlermeldung C test config ini nicht gefun den Verwende Standard Werte Danach wird die Highs core mit Standard Werten ange zeigt 29 Im Folgenden werden alle kritischen Dateioperationen mit der Datei default dat getestet Testfall Erwartetes Ergebnis Erzieltes Ergebnis Default dat ist schreibge sch tzt Versuch sie zu durch Start eines Neuen Spiels zu La den Es sollte gefragt werden ob der Dateischutz entfernt werden soll Nur dann kann das Spiel fehler frei starten Fehlermeldung Soll der Schreibschutz der Datei C test default dat entfernt wer den Klick auf Ja entfernt Schreib schutz Spiel startet Klick auf Nein gibt Fehlermel dung Fehler beim Laden der Spiel Grafiken das Spiel kann ohne Bilder nicht starten Default dat ist schreibge sch tzt Versuch sie im Editor zu Laden die Bilder zu ndern und die Datei abzuspeichern Es sollte gefragt werden ob der Dateischutz entfernt werden soll Nur dann kann der Editor die Bilder Laden Andernfalls sollten leere Standardbilder erstellt wer den Fehlermeldung Soll der Schreibschutz der Datei C test default dat entfernt wer den Klick auf Ja entfernt Schreib schutz Editor zeigt die Bilder an Klick auf Nein ergibt die Feh lermeldung Fehler beim Laden
31. e 0 59 TEnemyShoot 1 C_MAX_ENEMY_SHOOT 22 Beschreibung Gibt den Bereich einer Minute in Sekunden an und wird zur Berechnung Anzeige der Levelzeit ben tigt Dieser Typ definiert den m glichen Bereich Anzahl f r Gegnersch sse in einer Minute TEnemyShootSet set of TEnemyShoot TGameStatus St_Playing St_TimeOver St_FinishedLevel St_PlayerDead St_PlayerComeBack St_Pause St_NoGame TPlayTime record Hours TTimeRange Minutes TTimeRange Seconds TTimeRange end TBmpLstPtr TBmpLst TBmpLst record Size Byte Bmp TBitmap Prev TBmplstPtr Next TBmpLstPtr end TRealPoint record X Y Real end TMoveRec record Pos TRealPoint NewPos TRealPoint Shoot TEnemyShootsSet end TFighterRec record x y Integer Speed Integer Width Height Integer Color TColor Lives Integer Size Integer Str string Move TMoveRec end TFighterPtr TFighter Jeder Gegner besitzt eine Menge dieses Typen damit er wei wann er schei en soll Dieser Typ definiert die verschiedenen Spiel Status Informationen die im Spiel auftreten k nnen Dieser Typ wird verwendet um die aktuelle brige Le velzeit zu speichern bzw anzuzeigen Zeiger auf eine Bildliste f r T ExtImgLst Dieser Typ stellt ein Element der Bilderliste dar Die beiden Zeiger Prev und Next zeigen dabei auf den Vorg nger bzw Nachfolger der Li
32. e die Rubrik Gegner Dort k nnen Sie das Verhalten der Gegner in gro em Umfang kontrollieren Der oberste Wert Punkte pro Gegner Kill besagt wie viele Punkte dem Spieler f r jeden getroffenen Gegner gutgeschrieben werden Um die Highscore nicht zu ver f lschen sollten Sie hier keine gro en nderungen vornehmen Die darunter liegenden Werte sind immer in Zweier Paaren aufgeteilt Der jeweils obere Wert gibt an wie viele Gegner im ersten Level vorhanden sind und wie schnell und mit welcher Schussfrequenz sie zu Beginn starten Darunter steht jeweils die Erh hung pro Level wie viele Gegner pro Level dazukommen wie viel schneller sie werden und wie viel fter sie schie en Der Wert der Schussfrequenz besagt wie viele Sch sse ein Gegner in einer Minute abfeuert Die Auswahlbox Verwende bessere Explosionen LANGSAMER bietet dem Spieler die Option realistischere Explosionen einzuschalten so dass getroffene Raumschiffe grafisch ansprechender zerfal len Aber Vorsicht diese Option verlangt deutlich mehr Rechenleistung und sollte nur auf schnellen Computern aktiviert werden 3 4 4 Editor Durch Klick auf den Men punkt Editor wird das Editor Formular geladen und angezeigt Mit Hilfe des Editors ist es f r Sie m glich das Aussehen der Spielfigu Se Edtgr Hahscore ren Spielerraumschiff Gegnerraumschiffe und Sch sse individuell an Ihre Vor nr stellungen und W nsche anzupassen Bild Nr Spi
33. eler Raumschiff Gegner l schen Gegner hinzuf gen Bitmap importieren Breite o a H he e a G sen P in Prozent des Spielfeldes Bilder aus Datei laden Bilder in Datei speichern 3 4 4 1 Aufbau der Bilderlisten Die in Fighter verwendeten Bilder der einzelnen Spielobjekte werden in einer Bilderliste verwaltet Diese Liste besteht aus mindestens vier Bildern 1 Bild Bild des Spielerraumschiffs 2 Bild Bild f r die vom Spieler abgefeuerten Sch sse 3 Bild Bild f r die von Gegnern abgefeuerten Sch sse 4 5 6 7 Bild Bild 4 und falls vorhanden alle nachfolgenden Bilder stellt einen Gegner dar Wenn man den Editor aufruft werden automatisch die Bilder der Bilderliste aus Datei default dat aus dem Spielverzeichnis in dem auch das Programm Fighter exe enthalten ist geladen Schl gt dies fehl wird eine neue Bilderliste mit vier leeren Standard Bildern zum Bearbeiten erzeugt Es kann immer nur ein Bild zurzeit angezeigt und bearbeitet werden Nach dem Aufruf des Editors wird standardm ig im mer das erste Bild das Spielerraumschiff geladen Welches Bild gerade im Editor zur Bearbeitung bereitsteht wird oben rechts in der Ecke Bild Nr 6 unter Bild Nr angezeigt Durch klicken auf die Pfeile f neben der Bild Nr k n seaerN 3 nen Sie zu anderen Bildern der Liste wechseln Das neue Bild wird dann geladen und steht sofort zur Bearbeitung berei
34. en Er sollte vorher korrigiert werden Alle SpinEdit Komponenten ha ben einen bestimmten Werte Bereich Minimum Maximum Sobald sie den Focus verlieren wird ein fehlerhafter Wert korri giert Im Editor wird von Hand ein un g ltiger Wert z B im Feld Brei te eingetragen Der fehlerhafte Wert sollte nicht mit abgespeichert werden Er sollte vorher korrigiert werden Alle SpinEdit Komponenten ha ben einen bestimmten Werte Bereich Minimum Maximum Sobald sie den Focus verlieren wird ein fehlerhafter Wert korri giert Nun werden die Zeigerroutinen der Listen getestet Testfall Erwartetes Ergebnis Erzieltes Ergebnis Test ob alle Zeiger der Fighter Listen nach dem Beenden des Programms wieder freigegeben werden Dies wird mehrfach ge testet Mit Starten eines neuen Spiels Pausieren erneutes Star ten etc um berpr fen zu k n nen ob in allen F llen der Spei cher wieder freigegeben wird Zum Test wird eine Variable PtrDebug mit jedem New um Eins erh ht und mit jedem Dispose ums Eins erniedrigt Beim Beenden des Programms muss PtrDebug also in jedem Fall Null sein wenn alle reser vierten Speicherbereiche ordent lich wieder freigegeben wur den In alle getesteten Konstellationen PtrDebug 0 Test ob alle Zeiger der Bilderlis ten nach Beenden des Programms wieder freigegeben werden Zum Test wird eine Variable
35. en soll dieser in einer Datei abgespeichert wer den Welcher Art diese Datei ist oder wie die Informationen in der Datei gespeichert werden ist euch berlassen W hrend eines Spiels soll der Spieler die M glichkeit haben dieses zu pausieren als auch ganz zu beenden gt Weite Information zur genauen Aufgabenstellung sind in der Original Aufgabenstellung die im Anhang zu finden ist 3 Benutzerhandbuch 3 1 Ablaufbedingungen F r den Ablauf des Programms werden folgende Hard und Softwarekomponenten vorausgesetzt Hardware e IBM kompatibler PC e schneller Prozessor wird vorausgesetzt je nach verwendeten Bildern mind 500 MHz empfohlen e mindestens 2 Mega Byte freier Festplattenspeicher e mind 64 MB RAM e VGA Grafikkarte minimale Aufl sung von 800x600 mind 256 Farben auf langsamen Syste men unbedingt Windows Beschleuniger Karten e Soundkarte empfohlen e CD ROM Laufwerk zur Installation Software e Betriebssystem Windows 2000 oder Windows XP Windows Win 9x Me evtl mit reduzierter Spielgeschwindigkeit Linux mit entspr Wine Konfiguration nur f r Experten e Grafikbearbeitungsprogramm zum Entwurf eigener Spielgrafiken empfohlen aber nicht zwingend notwendig 3 2 Programminstallation Um Fighter Spielen zu k nnen muss das Spiel zuerst installiert werden Zur Installation des Pro gramms muss das Verzeichnis Fighter inklusive der darin enthaltenden Dateien mindestens
36. er Anwender die Datei ersetzen so sollte an schlie end gefragt werden ob der Schreibschutz entfernt werden soll Nur dann kann der Editor die Bilderliste speichern Fehlermeldung Citest Schreibschutz dat besteht bereits M chten Sie sie erset zen Nach Klick auf Ja Fehlermeldung Soll der Schreibschutz der Da tei C test Schreibschutz dat ent fernt werden Speichern funkti oniert Versuch eine Bilderliste im Edi tor auf einem ung ltigen nur Lesezugriff Medium zu spei chern Es sollte eine Fehlermeldung ausgegeben werden dass das Speichern nicht m glich war Fehlermeldung Fehler beim Speichern der Spiel Grafiken in Datei Z test dat Im Folgenden werden fehlerhafte Benutzereingaben getestet Testfall Erwartetes Ergebnis Erzieltes Ergebnis In den Benutzereinstellungen wird f r alle Steuerfunktionen die gleiche Taste definiert Der Anwender sollte darauf hin gewiesen werden dass seine ge w hlten Tasten unzul ssig sind Danach soll er dies korrigieren k nnen Fehlermeldung Ihre Eingaben sind fehlerhaft bitte keine glei chen Steuerungstasten verwen den Der Dialog wird nicht geschlos sen der Anwender kann seinen Fehler korrigieren 31 In den Benutzereinstellungen wird von Hand in der Levelzeit ein zu hoher Wert eingegeben z B 80 Sek Der fehlerhafte Wert sollte nicht mit abgespeichert werd
37. feld aufgrund der Fairness zum Spieler immer ber ihm Es wird eine neue zuf llige Position zuf llige X Y Werte ermittelt zu dieser fliegt das Gegnerraumschiff auf linearem Wege Ist der Gegner an der neuen Position angekommen wird eine neue Zufallsposition als Ziel generiert und dasselbe Verfahren wird erneut angewendet Um den linearen Weg fliegen zu k nnen muss jeweils berechnet werden wie weit sich der Gegner in X und Y Richtung bewegen muss damit er auf geradem Wege am Ziel ankommt Aus diesem Grunde wer den die Positions Koordinaten und Zielkoordinaten jedes Gegners durch Kommazahlen angegeben ob wohl das Objekt beim Zeichnen auf dem Spielfeld nat rlich nur mit ganzen Zahlen beschrieben werden kann es gibt keine halben Pixel vor dem Zeichnen wird die Positionsangabe also gerundet Der daf r geeignete Typ wurde TRealPoint genannt Die Informationen der aktuellen und Zielposition stehen im Typen TMoveRec welches als Element der Eigenschaften jedes Gegners vorhanden ist Position wen Quadratisches Spielfeld Wie die Berechnung wie weit der Gegner in X bzw Y Richtung be zu wegt werden muss arbeitet wird anhand der linken Zeichnung er kl rt Der rote Vektor Speed gibt die Geschwindigkeit an um die das Raumschiff bei jedem Schritt zum Ziel hin bewegt wird Je l nger er E ist umso schneller ist das Raum schiff am Ziel Die ben tigten Wer te DX und DY k
38. haften Position Farbe Geschwindigkeit etc Ver ndere seine Position nach seiner Geschwindigkeit bewege ihn Zeichne ihn mit seinen Eigenschaften auf das Spielfeld Diese Vorgehensweise hat den Vorteil dass nicht alle Sterne identisch aussehen Au erdem k nnen sie sich mit unterschiedlicher Geschwindigkeit bewegen was eine realistischere Umgebung erzeugt 4 2 2 3 Die Bewegung des Spielers Das Spieler Objekt T Player steuert die Bewegungen die Anzeige und das Verhalten des Spielerraum schiffs und der vom Spieler abgefeuerten Sch sse Die Klasse enth lt alle dazu notwendigen Eigenschaf ten Listen und Funktionen 15 gt Die Anzeige des Spielers Die Zeichenroutine des Spielers Draw wird mit jedem Timer Ereignis alle 10ms aufgerufen In Abh n gigkeit des aktuellen Spielstatus wird zun chst das Spielerraumschiff bewegt und anschlie end gezeich net Das Spielerraumschiff wird dabei zweimal als Bitmap Grafik im Objekt gespeichert Das Original Bild dient als Ausgangsbild aus dem das aktuelle Spielerraumschiff abgeleitet werden kann Dies ist notwendig damit nach Gr en nderungen keine Bildinformationen verloren gehen siehe Kap 4 2 2 8 Nach dem Zeichnen wird gepr ft ob das Spielerraumschiff mit einem Gegner oder einem gegnerischen Schuss kollidiert gt Die Bewegung des Spielers Um die Steuerung des Spielerraumschiffs f r den Spieler m glichst komfortabel zu gestalten wird hier ein be
39. in Datei C test config ini Config ini ist nicht vorhanden Versuch sie durch Start eines Neuen Spiels zu starten Es soll ein Fehlermeldung kom men die darauf hinweist dass die Datei nicht existiert Das Spiel sollte trotzdem starten k nnen Fehlermeldung C test config ini nicht gefun den Verwende Standard Werte Spiel startet mit Stan dard Werten Config ini ist nicht vorhanden Versuche sie ber die Benutzer einstellungen zu Laden und zu ndern Das Laden sollte mit den Stan dard Werten geschehen Beim Speichern sollte anschlie end kein Fehler passieren Fehlermeldung Ci test config ini nicht gefun den Verwende Standard Werte Danach wird das For mular geladen Beim Speichern tritt kein Fehler auf Config ini enth lt fehlerhaften Inhalt Versuch sie ber die Be nutzereinstellungen zu Laden und zu Speichern Beim Laden sollten die fehlerhaf ten Abschnitte einfach durch Standardwerte erg nzt werden Beim Speichern wird die Datei dann mit korrektem Inhalt abge legt Die Einstellungen konnten fehler frei geladen werden die fehler haften Abschnitte wurden durch Standard Werte ersetzt Das Speichern ist fehlerfrei Config ini ist schreibgesch tzt Versuch die Highscore zu Laden Dies sollte ohne Fehler funktio nieren Keine Fehlermeldung Die Highscore wird angezeigt Config ini ist nicht vorhanden Versuch
40. komplett schwarz ist und schlie lich ganz verschwindet 4 2 2 6 Das Anzeigen von Informationen f r den Spieler Im Spielverlauf von Fighter m ssen des fteren Nachrichten und Spielstatusinformationen an den Spieler gegeben werden Da es besser aussieht wenn diese Text Meldungen direkt auf dem Spielfeld er scheinen stellt die Klasse TText genau diese Funktionalit t zur Verf gung Sie verwaltet eine Liste mit beliebig vielen Texten die auf dem Spielfeld erscheinen blinken oder durch Dimmen langsam ver schwinden k nnen Die Zeichenfunktion Draw arbeitet sehr hnlich wie die der anderen Objekte besitzt aber zus tzlich die Option Texte zu dimmen schwarz werden lassen Um dies zu erreichen wird die aktuelle Farbe zun chst in ihre Rot Gr n und Blauanteile zerlegt Diese Werte geben an wie intensiv hell der jeweilige Farbanteil ist Zum Dimmen wird nun je nach gew nschter Dimm Geschwindigkeit von jedem Farbanteil ein konstanter Wert abgezogen Die resultierende Farbe wird also immer dunkler und schlie lich schwarz wenn alle Farbanteile Null erreicht haben 18 4 2 2 7 Die Klasse TExtImgLst zur Verwaltung von Bilderlisten Diese Klasse ist nicht wie die anderen Klassen von der Basis Klasse TFighterObject abgeleitet sonder ist eine eigene Klasse die als Erweiterung der Delphi Klasse T mageList angesehen werden kann Sie verwaltet hnlich wie das Delphi Pendant unterschiedliche Bitmap Grafike
41. ler uursursesseensesnnesnnesnnesnnesnnennnesnensnensnensnensnnnnennnnnnennn 18 4 2 2 7 Die Klasse TExtImgLst zur Verwaltung von Bilderlisten 02020002000nsennnesnnesnnesnnesnnennnnnnen nenn 19 4 2 2 8 Anpassungen an Spielfeldgr en nderung 24u22402200n20snnonnnnnnnennnnsnnesnnesnnennnnsnennnonsnensnensnnnnennnnnnnnnn 19 4 2 3 Das Bereitstellen eines Editors f r den Anwender uuussessessessnesnnnsnnesnnesnnennnensnnnnnnnnnnnennnnsnnesnnesnnesnonsnonsnensnnnnen 20 4 2 3 1 Bildverwaltung durch Bilderlisten 224 2042204240022B020nensennnnnnnnnnnnnnnnnnnsnnesnnesnnesnnesnonsnensnensnensnnnsnnnnnnnnnnn 20 4 2 3 2 Die Zeichenfunktionalit t des Grid Felds 200224022402200200nnnnnnneennnsnnesnnennennnnsnonsnensennnensnnnnennnnnnnnnn 20 4 2 4 Die Funktionen zum Speichern und Laden 2 2242204220420B0nnnonnnennnennonnnnnnnnnnnnsnnennnesnnennnesnnnnnensnonsnensonnsnnnennnnnnn 20 4 2 4 1 Speichern und Laden der Benutzereinstellungen 24 22442042 2042 0n0nnnennnnnnonnnnnnnnnnnnnnesnnennnennnesnonsnensnensnennen 20 4 2 4 2 Speichern und Laden der Highscoreliste 22220422442200nsnensonnnnnnnnnnnennnsnnesnnesnnennnnsnonnnensnennnensnnnnennennnnnnn 21 4 2 4 3 Speichern und Laden der Spielgrafiken 224u22402240220ennnnnnonnnnnnesnnnsnnesnnesnnennnnsnnnnnonsnensnensnnnsnnnnnnnnnnn
42. n in einer Liste kann aber auch mit Bildern unterschiedlicher Gr en umgehen 4 2 2 8 Anpassungen an Spielfeldgr en nderung Da der Anwender bei diesem Spiel in der Lage sein soll das Fenster und somit das Spielfeld jederzeit nach seinen W nschen in der Gr e zu ver ndern m ssen alle Objekte auf dem Spielfeld in der Lage sein sich an die neue Gr e anzupassen Aus diesem Grund besitzen die Klassen 7Stars TPlayer und TEnemy allesamt die jeweils hnliche Methode Resize Die beiden Klassen T7Text und TFire haben diese Funktionalit t nicht da deren Elemente jeweils nur kurz auf dem Spielfeld zu sehen sind so dass sich eine Anpassung nicht lohnt Die Resize Methode k mmert sich jeweils um folgende Aufga ben gt Anpassen der Gr en der Spiel Grafiken Bitmaps Da die Spiel Objekte intern durch Bitmaps repr sentiert werden muss jedes Bild Bitmap zweimal vor liegen Die eine Version enth lt das Bild in Originalgr e das andere Bild die zum aktuellen Spielfeld passenden Gr e ndert sich nun das Spielfeld so kann ein Kopie des Originalbildes in die neue richtige Gr e gestretcht werden und anschlie end als aktuelles Bitmap benutzt werden Dadurch vermeidet man die durch mehrmaliges ndern des gleichen Bildes entstehende schlechte Bildqualit t Die neuen Abmessungen eines aktuellen Bildes berechnet man mit Hilfe des Verh ltnissatzes jede Grafik soll ja einen bestimm
43. nnen mit Hilfe des Strahlensatzes ermittelt werden Er DX _LenX _DY _LenY ORIORI PEE A NewPos XY v Speed LenG Speed LenG Gegner LenX nasenun r Der Gesamtweg LenG kann mit Hilfe des Satzes von Pythagoras berechnet werden LenG LenX LenY 17 gt Das Schussverhalten der Gegner Da die Gegner eine bestimmte vom Benutzer festgelegte Anzahl an Sch ssen pro Minute abfeuern sollen dient ein Enemy Timer dazu 120 Ereignisse pro Minute auszul sen Das ist die maximal h chstm gli che Schussfrequenz Um nun zu wissen wann ein Gegner einen Schuss abfeuern soll wird eine Schuss Menge mit je nach festgelegter Anzahl vielen zuf lligen Werten zwischen 1 und 120 f r jeden Gegner generiert Wird ein Gegner gezeichnet so wird anschlie end berpr ft auf welchem Wert der Enemy Timer gerade steht Ist der Wert in der Schuss Menge des Gegners enthalten so wird ein neuer Schuss von seiner aktuellen Position abgesetzt Und der Wert aus der Schuss Menge entfernt Ist der Enemy Timer bei 120 angekommen so wird er wieder auf 1 gesetzt alle Gegner bekommen neue zuf llige Schuss Mengen und dasselbe Verfahren beginnt erneut gt Die Kollisionsabfragen Ber hrung mit Gegner oder Gegnerschuss Die berpr fung ob ein anderes Objekt z B das Spielerraumschiff oder Spielerschuss einen Gegner oder einen Gegnerschuss ber hrt trifft wird ebenfalls von der Gegner Klasse bernommen Die Metho
44. nnnnnonnnnnnnsnntsnntsnnesnnn san 28 4 5 Progtammmtests ens scene ssnnsu es el oE ESEE E EE EEEE EEEE E E E E E EoiN 29 S Anhang e re So e EOK EE E eE EEEE E EEE E E EEEE EESE EE TE EROE E EEE EEE E E E EEEE S EE E EN 33 5 1 Original Aufgabenstellung Delphi Vordiplomsaufgabe f r IIs und WIs u u0rsunseessnesnnesnnennesnnesnnennnennennnennnenn 33 2 Allgemeine Problemstellung Das zu erstellende Spiel besteht aus einem quadratischen Spielfeld auf dessen unteren Kante auf einer horizontalen Achse die Spielfigur des Spielers ein Raumschiff nach links und rechts bewegt werden kann Dar ber bewegen sich die gegnerischen Spielfiguren Alien Raumschiffe in quasi zuf lligen dazu sp ter mehr Flugbahnen Die gegnerischen Spielfiguren geben in quasi zuf lligen Zeitabst nden Sch sse vertikal nach unten ab w hrend der Spieler die M glichkeit hat Sch sse vertikal nach oben abzuschie en Trifft ein Schuss einer gegnerischen Spielfigur die Spielfigur des Spielers dann wird dessen Spielfigur zerst rt er verliert eines von n dazu sp ter mehr Leben Wenn der Spieler noch mindestens ein Leben brig hat erscheint die Spielfigur wieder und das Spiel geht weiter Wenn der Spieler kein Leben mehr brig hat dann ist das Spiel beendet Trifft ein Schuss des Spielers eine gegnerische Spielfigur dann wird diese zerst rt und der Spieler erh lt eine bestimmte Anzahl von Punkten Wenn ein gegnerisches Raum schiff auf seiner Flugbahn mi
45. piel Grafiken aus Datei lt Dateina me gt Lege vier leere Standard Bilder als Grafiken an Dieser Fehler tritt auf wenn das Laden einer Bilderliste im Editor fehlschl gt M glicherweise ist die Datei in einem ung ltigen Format besch digt existiert nicht oder ist von einer anderen An wendung blockiert Im Editor werden daher vier leere Bilder zur Bearbeitung erzeugt Stellen Sie sicher dass die Datei im angegebenen Verzeichnis e xistiert Stellen Sie sicher dass keine andere Anwendung auf diese Da tei zugreift berpr fen Sie Ihre Festplatte auf fehlerhafte Strukturen im Da teisystem Wenn Sie eine andere Datei mit den selben Bildern zur Sicherheit angelegt haben versuchen Sie diese zu ffnen andernfalls kann diese Bilderliste nicht mehr gela den werden und sie m ssen eine andere verwenden evtl die Ori ginal Bilderliste von der Installa tions CD erneut kopieren und ffnen oder selbst eine neue Bil derliste erstellen 11 Fehler beim Laden der Spiel Grafiken das Spiel kann ohne Bilder nicht starten Dieser Fehler tritt auf wenn ein neues Spiel gestartet wird aber keine g ltige Bilderliste aus der Datei default dat geladen wer den konnte Stellen Sie sicher dass die Datei default dat im Spielverzeichnis existiert und g ltige Spiel Grafiken enth lt Mit dem Editor kann dies berpr ft werden Gelingt dies nicht so kann die D
46. ponente dar Prev und Next sind jeweils Zeiger auf den Vorg nger bzw Nachfolger Data ist ein Record vom Typ TFighterRec das die Informationen eines Objekts wie z B Position Geschwindigkeit Farbe Gr e etc speichert gt Beispiel zum Einf gen eines neuen Elements am Anfang der Liste ListPrr Dies ist die Ausgangslis x te Hier soll am Anfang yv Prev Data Nex IPrev Data Next Prev Data Next ein neues Element einge Pi i Pi i Z f gt werden nil Be Zuerst wird ein neues Element erstellt dessen nil Zeiger beide zun chst auf nil zeigen Prev Data Next ClisPr Als n chster Schritt zeigt N das neue Element auf nil v Prev Data Next ea Prev Data Next Prev Data Next jPrev Data Next das alte erste Element nil nil Lis ptr Jetzt muss das alte erste Element auf das neue j Data Next A Prev Data Next Prev Data Y nil Nee Prev Data Next Element zeigen Clis Als letzter Schritt muss der ListPtr auf das _w Prev Data Next pre Data Next Prev Data Next Prev Data Next neue erste Element zei A J A gen nil 25 4
47. r Bildpunkt quadratisch Farbpalette Eu HEHE HENTENN F BE 5 Gesamtes Bild Spiel Objekt Ausgew hlte Farbe wei Mit Hilfe der Zoom Einstellung die sie unten rechts im Formular in der Rub jArzeige rik Anzeige finden wird Ihnen das Bearbeiten und berschauen des Bildes er Zoom o leichtert Wird hier ein Wert von 1 eingestellt so k nnen Sie sich das Bild in Originalgr e ansehen da das Bild sp ter auf die aktuelle Spielfeldgr e angepasst wird weicht diese Gr e sp ter im Spielfeld etwas ab Gr ere Werte zeigen das Bild zum Bearbeiten um den ausgew hlten Faktor vergr ert an das gilt jedoch nur f r den Bildeditor und wirkt sich nicht auf die sp tere Gr e auf dem Spielfeld aus Mit der Option Giftterli nien anzeigen k nnen Sie au erdem festlegen ob die einzelnen Bildpunkte im Editor durch Gitterlinien getrennt angezeigt werden Die Darstellung mit Gitterlinien vereinfacht in der Regel die Bearbeitung die Darstellung ohne Gitterlinien bietet daf r eine bessere Vorschau der gemachten nderungen an der Gra fik Breite 5o 2 Als weitere Option finden sie rechts neben dem zu bearbeitenden Bild die Fel A der Breite und H he Durch Ver ndern dieser Werte k nnen Sie das Bild Here 5 i um Bildpunkte vergr ern bzw verkleinern Der Wert Breite f gt am rechten ciena Bildrand der Grafik neue Bildpunkte hinzu bzw entfernt die
48. r Datei gelesen bis das Dateiende erreicht ist Dazu wird jeweils erstmal ein neuer Speicherbereich TMemorySteam bereitgestellt Dann wird ein Byte aus der Datei gelesen welches die prozentuale Gr e auf dem Spielfeld des folgenden Bildes repr sentiert Daraufhin wird die Gr e in Bytes des folgenden Bitmap Streams gelesen Mit Hilfe dieser Gr eninformation kann nun der zuvor bereitgestellte Speicherbereich auf die richtige Gr e eingestellt werden Danach kann der folgende Bitmap Stream aus der Datei direkt in den reservierten Speicherbereich gelesen werden Jetzt wird der Bitmap Stream aus dem Speicher in ein Bitmap Objekt umgewandelt und anschlie Bend am Ende in die Bilderliste eingef gt 4 3 Beschreibung grundlegender Datenstrukturen 4 3 1 Verwendete Konstanten In dem Programm kommen viele Konstanten zum Einsatz da mit Ihnen wichtige Parameter des Spiels beschrieben werden ohne dass der Programmierer den gesamten Quelltext durchsuchen muss Alle Kon stanten befinden sich in der Unit UTypes werden komplett gro geschrieben jeder Buchstabe und be ginnen mit einem C_ f r const 21 Die wichtigsten Konstanten werden im Folgenden kurz beschrieben Name der Konstanten C_STARCOLORS array 1 5 of TColor FFFFFF FFFF00 FFCOCO COFFFF FF4040 C_DEF_PLAYFIELD 500 C_DEF_ENEMY_SPEED_POTI 0 05 C_PLAYER_MOVE_SPEED 3 C_PLAYER_SHOOT_SPEED 6 C_MAX_PLAYER_SHOOT 5 C_ENE
49. schiffes und dessen Neuerscheinen auf dem Spielfeld falls noch ein Leben brig ist schie t kein Gegner sie bewegen sich jedoch und der Count down bleibt so lange stehen Es gibt theoretisch unendlich viele Spielstufen ihr erh ht also einfach immer nur die Anzahl Geschwin digkeit und Schussfrequenz irgendwann wird das Spiel eh unspielbar und wie sich das Aussehen der Gegner ver ndert dazu sp ter mehr Um dem Spieler eine zus tzliche Orientierung ber den Spielverlauf zu geben werden au erhalb des Spielfeldes wo genau ist egal folgende Angaben angezeigt 1 Die Anzahl der dem Spieler zur Verf gung stehenden Leben 2 Die Nummer der aktuellen Spielstufe Z hlung beginnt bei eins mit der ersten Spielstufe und wird mit jeder neuen Spielstufe um eins erh ht 3 Die Anzahl der Punkte des Spielers 4 Die noch verbleibende Zeit zum Beenden der aktuellen Spielstufe Diese wird dabei in Stunden Minuten und Sekunden angezeigt und w hrend einer Spielstufe r ckw rts also von der vollen zur Verf gung stehenden Zeit runter auf null Stunden null Minuten und null Sekunden gez hlt Nach dem Ende eines Spiels wird wenn der Spieler genug Punkte gesammelt hat um in eine Highscore mit insgesamt 10 Eintr gen zu kommen dieselbe angezeigt Au erdem soll diese Highscore jederzeit aber nicht mitten im Spiel auf Benutzerwunsch angezeigt werden k nnen Um den Inhalt der Highscore ber das Ende der Programmbenutzung hinaus zu erhalt
50. sonderes Verfahren angewendet Durch Herunterdr cken der Spielertasten Links und Rechts wird nicht direkt das Raumschiff bewegt sondern zun chst ein Bewegungsmodus ein bzw durch Loslassen der Taste ausgeschaltet Wird z B die Links Bewegung eingeleitet so wird das Raumschiff mit jedem neuem Timer Ereignis weiter nach Links bewegt bis das Raumschiff am Rand angelangt ist oder der Bewegungsmodus durch Loslassen der Taste ausgeschaltet wird gt Die Bewegung und Anzeige abgefeuerter Sch sse Die Spieler Klasse verwaltet au erdem eine Liste mit allen vom Spieler abgefeuerten Sch ssen Die Funktion DrawShoot ist f r die Anzeige und Bewegung der einzelnen Sch sse dieser Liste zust ndig Sie arbeitet nach folgendem Prinzip Durchlaufe jeden Schuss der Liste Ermittle seine Eigenschaften Position Gr e Geschwindigkeit etc Ver ndere seine Position nach seiner Geschwindigkeit bewege ihn Ist Schuss noch im Spielfeld ja nein Zeichne ihn mit seinen Eigenschaften auf das Entferne Schuss aus der Liste Spielfeld Hat Schuss einen Gegner getroffen ja nein Zeige Trefferpunkte Erh he Spielerpunktzahl Entferne Schuss aus der Liste 4 2 2 4 Die Bewegung der Gegner Auch das gesamte Gegnerverhalten ist in eine Klasse gekapselt TEnemy Dieses Objekt verwaltet zwei Listen Die erste Liste enth lt alle auf dem Spielfeld vorhandenen Gegner inklusive ihren Eigenschaften Die zweite Liste beinhal
51. ste Size gibt an wie viel Prozent das Bild in Bmp auf dem Spielfeld belegen soll Dieser Typ ist ein Pendant zu TPoint nur mit Kom mazahlen Der Typ wird f r die genauen Positionen der Gegner ben tigt Dieser Typ dient zur Speicherung der Bewegungs und Schussinformationen der Gegner Pos entspricht der aktuellen Position des Gegners auf dem Spielfeld NewPos speichert den n chsten Punkt zu dem der Gegner bewegt wird Shoot enth lt die Schuss Menge des Gegners damit dieser wei wann er schie en darf Dieser Typ enth lt Infos f r ein Spiel Objekt Er ist ein wichtigster Typ da er von allen Objekten als Listen element eingesetzt wird X Y speichert die Position des Objekts Speed speichert die Geschwindigkeit des Ob jekts Width Height sind f r Breite und H he Color enth lt die Farbe des Objekts Lives speichert die Anzahl Leben oder wie lange ein Objekt zu sehen ist Size speichert die Gr e oder bei den Gegnern das Level des Objekts Str enth lt Text Infos Move speichert die Bewegungs Schuss Infos f r ein Gegner Objekt Dieser Typ wird als Zeiger auf eine Fighter Objekt Liste eingesetzt die von allen eigenen Objekten ber die Basisklasse TFighterObject benutzt wird 23 TFighter record Data Prev Next end TPlayername String C_MAX_PLAYERNAME LEN TFighterRec TFighterP
52. t Mit Hilfe des Buttons Gegner hinzuf gen k nnen Sie au erdem die Bildliste um be nl liebig viele neue Bilder f r Gegner erg nzen Nach Klick auf den Button wird automa _ Gesreinasigen_ tisch ein neues leeres schwarzes Bild erzeugt und als letzter Gegner bereitgestellt Der Button Gegner l schen ist nur aktiv wenn sie einen Gegner ausgew hlt haben und noch mindes tens ein weiterer Gegner in der Liste ist Wenn Sie den Button dr cken wird der gerade angezeigte Geg ner gel scht 3 4 4 2 Laden und Speichern von Bilderlisten m a EFF E2 SEE Nachdem Sie jede Grafik der Bilderliste nach Ihren W n schen fertig gestellt haben ist es sinnvoll diese Bilderliste in Ei antiken Bilder in Datei speichern einer Datei abzuspeichern Klicken Sie daf r auf den Button Bilder in Datei speichern Daraufhin erscheint ein neues Fenster dass Sie auffordert einen Namen f r die zu speichernde Datei einzugeben Tippen Sie einen Da teinamen ein und best tigen Sie den Speichervorgang durch Klick auf den Button Speichern Ihre Bil derliste ist nun in der Datei abgelegt Auf hnliche Weise k nnen sie auch eine fertige Bilderliste aus einer Datei laden um sie beispielsweise im Editor zu ndern oder ihre Bilder f r ein neues Spiel zu benutzen Klicken Sie diesmal auf den Button Bilder aus Datei laden und suchen Sie die gew nschte Datei aus Daraufhin wird Ihre gew hlte Datei untersucht und deren Bilderlis
53. t dem Raumschiff des Spielers kollidiert so wird das Raumschiff des Geg ners zerst rt ohne dass der Spieler daf r Punkte gut geschrieben kriegt und das Raumschiff des Spielers wird zerst rt und er verliert eines seiner n Leben und wenn der Spieler noch ein Leben brig hat geht das Spiel weiter Um im Spiel den Eindruck von zus tzlicher Bewegung zus tzlich zu den Bewegungen des Spielers und der Gegner zu verleihen be wegen sich im Hintergrund des Spielfeldes d h hinter den Spielfi guren d h von den Spielfiguren berdeckt kleine wei e ann hernd runde Objekte Sterne vom oberen Rand des Spielfeldes ver tikal nach unten Die Anordnung der in jedem Augenblick des Spie les sichtbaren Sterne ist dabei quasi zuf llig d h der Zufall random unterliegt der Einschr nkung dass die Sterne gleichm Big ber den Hintergrund gestreut sein m ssen und sich nicht nur in einem Bereich des Bildschirms konzentrieren d rfen Die Anzahl der Sterne die in jedem Augenblick sichtbar sind ist vom Benutzer ein stellbar dazu sp ter mehr Die Hintergrundfarbe des Spielfeldes ist nat rlich immer schwarz Das Spiel ist in unterschiedliche Spielstufen eingeteilt In jeder Spielstufe muss der Spieler alle sich auf dem Spielfeld befindenden gegnerischen Spielfiguren zerst ren bevor die n chste Spielstufe gestartet wird Der Unterschied zwischen den Spielstufen besteht im Aussehen der gegnerischen Spielfiguren dazu sp ter mehr
54. tImgLsr erzeugt in der alle Spielgrafiken als Bitmaps mit ihrem zugeh rigen Protzenanteil abgelegt werden Das aktuell zu bearbeitende Bild wird zun chst in einem Buffer zwischengespeichert und dann im Grid Feld angezeigt Beim Wechsel des aktiven Bildes z B durch Klicken auf das n chste Bild der Liste wird zun chst die Grafik aus dem aktuelle Buffer in die Bilderliste zur ckgesichert Dann wird das neue Bild aus der Bilderliste geladen anstelle des alten Bildes in den Buffer geschrieben und schlie lich angezeigt Somit ist immer gew hrleistet dass alle nderun gen am aktiven Bild gesichert werden 4 2 3 2 Die Zeichenfunktionalit t des Grid Felds Um dem Anwender einen funktionsf higen Grafik Editor zu pr sentieren wurde bei der Realisierung ein Grid Feld umfunktioniert Durch Abfangen und Bearbeiten des Ereignisses OnDrawCell kann jede Zelle des Grid Feldes selbst gezeichnet werden Da die Matrix des Grid Feldes immer genauso gro ist wie die des Bitmaps im Buffer kann beim Zeichnen einer Grid Zelle einfach der entsprechende Farb wert aus dem Buffer Bitmap an derselben Stelle Reihe Spalte entnommen werden so dass die Zelle mit dem richtigen Farbwert gef llt wird Klickt der Anwender nun mit der Maus auf eine Zelle so wird die aktuelle Farbe des markierten Eintrags der Farbplatte ausgelesen Diese Farbe wird nun zun chst im Buffer Bitmap an der entsprechenden Position Reihe Spalte
55. te in den Editor geladen Achtung Sobald Sie im Editor auf den Button OK dr cken wird die aktuell geladene Bilderliste in der Datei default dat gespeichert eine vorhandene Datei wird berschrieben Fighter verwendet immer die Datei default dat wenn Sie ein neues Spiel starten 3 4 4 3 Bearbeiten eines Bildes Sobald Sie ein Bild zum Bearbeiten in den Editor geladen haben erscheint es wie links im Bild in vergr erter Dar stellung als Matrixstruktur Wenn Sie einen einzelnen Bildpunkt mit der linken Maustaste anklicken nimmt die ser Bildpunkt die aktuell ausgew hlte Farbe an M chten Sie eine andere Farbe verwenden k nnen Sie durch einen Links Mausklick auf ein Quadrat der Farbplatte eine neue Farbe ausw hlen die zuk nftig als Zeichenfarbe verwen det wird Welcher Farbwert gerade aktiv ist k nnen Sie anhand der beiden Buchstaben VG auf dem entsprechen den Quadratfeld der Farbpalette erkennen links im Bild ist dies die Farbe wei Bitte beachten Sie dass sp ter der Hintergrund im Spielfeld immer schwarz ist schwarze Bildpunkte sich also nicht vom Hintergrund absetzen k n nen Darum sollten Sie m glichst keinen gr eren schwar zen Rahmen um das eigentliche Raumschiff zeichnen da dieser sp ter f r den Spieler nicht sichtbar ist aber f r das Spielverhalten mit einbezogen wird der Spieler sich dann also evtl ber f r ihn nicht erkennbare Treffer wundert Einzelne
56. ten Prozentanteil des Spielfelds belegen NeueBreite H he _ NeueSpiefeldgr e Prozent 100 Die Basis Klasse TFighterObject bietet hierf r die Methode ResizeBmp an die nach diesem Prinzip arbeitet gt Anpassen der neuen Geschwindigkeit Der Wert der Geschwindigkeit gibt an um wie viele Pixel evtl gerundet ein Spiel Objekt verschoben wird Aus diesem Grund muss auch dieser Wert an eine neue Spielfeldgr e angepasst werden damit z B bei doppelter Spielfeldgr e das Spielerraumschiff nicht pl tzlich langsamer wird Die Umrechnung ge schieht auch hier mit Hilfe des Verh ltnissatzes NeueGeschwindigkeit _ NeueSpielfeldgr e AlteGeschwindigkeit _AlteSpielfeldgr e gt Anpassen der Positionen der einzelnen Spiel Objekte Gegner Spieler Sch sse Sterne Auch die Position eines Spiel Objekts muss an eine neue Spielfeldgr e angepasst werden damit z B ein Spiel Objekt in der Mitte auch in der Mitte bleibt Auch dies geschieht mit Hilfe des Verh ltnissatzes NeuePosition ___ AltePosition NeueSpielfeldgr e _AlteSpielfeldgr e Die Basis Klasse TFighterObject bietet hierf r die Methode PosChange an die nach diesem Prinzip arbeitet 19 4 2 3 Das Bereitstellen eines Editors f r den Anwender 4 2 3 1 Bildverwaltung durch Bilderlisten Im Editor k nnen die Spielgrafiken editiert werden Durch Aufrufen des Formulars oder explizites Laden einer Datei wird eine Bilderliste TEx
57. tet jeden abgefeuerten Schuss irgendeines Gegners der sich noch auf dem Spielfeld befindet Dar ber hinaus beinhaltet die Klasse zwei Bilderlisten in denen die Grafiken der ver schiedenen Gegner sowie die Grafik des Gegner Schusses enthalten sind Die eine Liste enth lt die Bilder in Originalgr e die andere in an das Spielfeld angepasster Gr e siehe Kap 4 2 2 8 Besonders wichtig sind die verwendeten Algorithmen zur Steuerung der Sch sse die Kollisionsabfragen sowie die Bewegungen der Gegner gt Das Anzeigen und Bewegen der Gegner Die Zeichenfunktion Draw des Gegner Objekts ist f r das Zeichnen Bewegen und Schie en aller Geg ner verantwortlich Die Methode durchl uft alle Gegner der Liste Jeder Gegner wird dabei zun chst be wegt danach wird berpr ft ob ein Schuss abgesetzt werden soll und zuletzt wird der Gegner auf das Spielfeld gezeichnet 16 Durchlaufe jeden Gegner der Liste Ermittle seine Eigenschaften Position Gr e Geschwindigkeit etc Ver ndere seine Position nach seiner Geschwindigkeit bewege ihn Ist es Zeit f r den Gegner einen Schuss abzusetzen ja nein Setze einen neuen Schuss von der aktuellen Position ab neues Element in der Schuss Liste Zeichne den Gegner mit seinen Eigenschaften auf das Spielfeld Die einzelne Bewegung eines Gegners geschieht mit Hilfe des folgenden Verfahrens Ein Gegner erscheint an einer zuf lligen Position im Spiel
58. tr TFighterPtr TScoreElement record PlayerName PlayerPoints end THighscore ar ray 1 C_MAX_HIGHSCORE_ENTRIES of TScoreElement TGame record FieldSize Status LevelTime Lives NiceLook StCount StMaxSpeed CtrLeft CtrRight CtrFire CtrPause EnPoints EnCount EnIncCount EnSpeed EnIncSpeed EnFire EnIncFire end 24 TPlayerName Cardinal Integer TGameStatus Cardinal Integer Boolean Word Byte Word Word Word Word Cardinal Word Word Byte Byte Byte Byte Dieser Typ stellt ein Element der Fighter Objekt Liste dar In Data ist der gesamte Inhalt enthalten Prev und Next sind Zeiger auf Vorg nger bzw Nachfolger in der Liste Dieser Typ definiert einen begrenzten String f r den Spielername in der Highscore Dieser Typ wird f r einen Eintrag aus der Highscore mit Spieler Namen und erreichter Punktzahl verwendet Dieser Typ wird ebenfalls f r die Highscore verwendet Eine Variable dieses Typen beinhaltet die gesamte Highscoreliste Dieser Typ speichert alle wichtigen Informationen f r ein Spiel FieldSize Spielfeldgr e Status aktueller Spiel Status Pause Level geschafft LevelTime Rundenzeit des Levels Lives Anzahl Leben des Spielers NiceLook Ob Hochaufl sende Explosionen benutzt werden sollen StCount Anzahl der
59. tzereinstellungen wird auch die Highscore Highscore liste in der Ini Datei config ini im Abschnitt Highscore PlayerName1 Bender Ri et PlayerPoints1 10000 abgespeichert Die Schl sselvariablen f r die einzelnen Spieler p PlayerName2 Fry sind PlayerPoints2 9000 PlayerName3 Nibbler PlayerNamel Bender PlayerPoints1 10000 PlayerNa PlayerPoints3 8000 me2 Fry PlayerPoints2 9000 PlayerName3 Nibbler PlayerName4 Amy Wong PlayerPoints4 7000 PlayerName5 Hermes Conrad Auch hier werden beim Laden im Fehlerfall z B weil Datei PlayerPoints5 6000 nicht vorhanden oder Abschnitte in der Datei fehlen Standard PlayerName6 Leela werte f r die Highscoreliste verwendet PlayerPoints6 5000 4 2 4 3 Speichern und Laden der Spielgrafiken PlayerName7 Dr Zoidberg PlayerPoints7 4000 PlayerName8 Zapp Brannigan PlayerPoints8 3000 PlayerName9 Prof Farnsworth PlayerPoints9 2000 PlayerName10 Slurm Mc Kenzie PlayerPoints10 1000 Die Spielgrafiken sind bei Fighter in Dat Dateien abgelegt Das Laden Speichern ist analog einer Bilderliste geschieht nach folgendem Verfahren Zun chst wird berpr ft ob die zu ladende Datei berhaupt existiert Wurde die Datei gefunden so wird kontrolliert ob die Datei schreibgesch tzt ist Wenn dies der Fall ist wird der Schreib schutz entfernt Als n chstes wird eine leere Bilderliste TExtImgLst erzeugt und initialisiert Nun wird solange ein Grafik Block aus de
60. uf die Units der einzelnen Objekte verteilt Anmerkung Einige Routinen im Hauptformular wie z B CheckGamesStatus oder NextLevel lie en sich evtl in die UGame Unit auslagern weil sie unter anderem kleine Teile der Spiellogik enthalten Ich habe das je doch bewusst vermieden da die bersichtlichkeit der kurzen Funktionen dann durch sehr lange Parame terlisten bedingt durch die vielen Formular Komponenten die mit bergeben werden m ssten stark lei den w rde 13 4 2 1 2 Aufbau der Game Loop durch Timer Ereignisse Um ein fl ssiges Darstellen des Spielfelds mit allen Spiel Objekten Spieler Gegner Sch sse Sterne Explosionen Texte mit den Windows Befehlen zu realisieren ist folgender Aufwand sinnvoll Eine Ereignis Funktion die durch einen Windows Timer DrawTimer alle 1Oms aufgerufen wird ist f r das Zeichnen des gesamten Spielfelds verantwortlich Innerhalb der Zeichenroutine werden alle Grafikaufrufe zun chst auf einen Buffer im Arbeits speicher geschrieben Erst am Ende der Zeichenroutine wird dann dieser Buffer auf die echte Image Komponente bertragen so dass die nderungen sichtbar werden Dieser Ansatz reduziert das ungewollte Flackern im Spielverlauf stark auch wenn f r derartige Spiele eine direkte Nut zung der Grafikkarte z B via DirectX oder OpenGl wesentlich bessere Ergebnisse liefern w rde bei h herem Aufwand Innerhalb der Ereignis Funktion zum Zeichnen des

Download Pdf Manuals

image

Related Search

Related Contents

EN CONSEQUENCE DE QUOI, IL A ETE CONVENU CE QUI  Kramer Electronics T3F  RANDOM ORBITAL SANDER ELITE SERIES INSTRUCTION  Cables Direct Cat5e UTP 10m  Quantum DPM5500 User's Guide  02. - Honda  Kensington KP400  microSpider and microSpider Industrial USER MANUAL  

Copyright © All rights reserved.
Failed to retrieve file