Startseite Downloads Geschichte(n) Hardware FPGA-Board Prozessor Instruktionssatz Peripherie XBus-Referenz PS/2-Board Soundboard USB-MMC-Board PC-Software HaCom HoAsm, HLink Emulator Connectivity Embedded Software HAL Dateimanager Tetris PacMan 3D-Engine Pong PacMan 3D Kontakt |
HaDes XP - Pong |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
ÜberblickPong ist der ultimative Videospiel-Klassiker, denn schließlich war es das erste Videospiel überhaupt. Mit dem hat allerdings unsere Version nur noch wenig gemeinsam. Na gut, einen Ball quer über den Bildschirm befördern musste man auch damals schon... aber bei uns gibt es auch noch:
BedienungNach dem Start von Pong muss zunächst ein Level ausgewählt werden. Folgen Sie dazu den Anweisungen des Programms. Die Steuerung der Schläger kann mit Hilfe des Tastaturkonfigurationsprogramms (Taste "C" im Hauptmenü) verändert werden. Die Standardeinstellungen sind wie folgt:
Grundlegend gilt: Versuchen Sie, stets den Ball zu treffen. Durch geschickten Einsatz des Schlägers können Sie den Ball auch in begrenztem Umfang steuern, je weiter unten am Schläger der Ball nämlich auftrifft, desto weiter wird er nach unten abgelenkt. Zusätzlich können Sie den Ball beschleunigen, indem Sie hart zuschlagen, d.h. etwa zwei Sekunden vor dem Aufprall die Beschleunigungstaste drücken und festhalten. Im Pong-Modus müssen Sie nun nur noch Ihren Gegner austricksen, so dass er den Ball öfter verliert als Sie, nach 11 Punkten haben Sie dann das Level gewonnen. Der Arkanoid-Modus ist deutlich komplizierter. Hier
müssen alle Hindernisse ("Steine") auf dem Feld abgebaut
werden, indem Sie diese ein- oder mehrfach (je nach Art des Steins)
treffen. Für das Entfernen eines Steins gibt es Punkte.
Zusatzpunkte (Double oder Triple Bonus) gibt es, wenn Sie mehr als
einen Stein binnen einer Sekunde treffen. Verlieren Sie den Ball, dann
wird Ihnen ein Leben abgezogen. Neue Leben gibt's für Punkte
(aber immer seltener...). ImplementierungPong entstand zunächst in einer Version für die HaDes IV des Hardwarepraktikums, das wir im WS 2004/05 betreuten. Die hatte keine Hindernisse, keinen Arkanoid-Modus und natürlich auch keinen Sound, aber zum Ausgleich furchtbar hässlichen Code, damit sie in den winzigen Instruktionsspeicher (888 Befehle) der HaDes IV passte. Beim Rewrite von Pong für die HaDes XP war dann die Hauptaufgabe, Funktionen für Vektorarithmetik und 2D-Geometrie zu schreiben, die mit der Fixpunktarithmetik der HaDes XP funktionieren. Letzteres stellte sich dabei als das Hauptproblem heraus, denn die 16.16 Fixpunktzahlen haben bekanntlich nur einen Wertebereich von etwa -32000 bis +32000, was nicht einmal reicht, um die Länge eines Vektors von Bildschirmkoordinaten auf "normale Weise" zu berechnen. Dementsprechend ist auch die Funktion vlength_fp deutlich komplizierter als das übliche "sqrt(x*x + y*y)": // Given an FP vector v (may be as long as you wish) Nachdem dann die Schnitttests für Strecken mit Geraden und Strecken mit Kreisen funktionierten, war die große Frage: wo kommen jetzt die Levels her? Im Prinzip handelt es sich bei einem Pong-Level um wenig mehr als eine Ansammlung von Polygonen, und so gab es erst mal ein Perlskript, das eine textuelle Beschreibung in das Binärformat konvertiert, das Pong erwartet. So eine Levelbeschreibung sieht z.B. wie folgt aus: # Pong Level So eine textuelle Beschreibung strapazierte dann aber die Vorstellungskraft des Entwicklers (oder das HaDesProgramm PongLevelView) doch gar zu sehr, also musste etwas besseres her. Das ist eine grafische Benutzeroberfläche, mit der die Level-Skripte interaktiv bearbeitet werden können. Sie ist in Perl/Tk programmiert, und beim Erstellen merkte ich (Florian) mal wieder: Perl ist im Prinzip komfortabel und schreibt sich flott, aber im Detail steckt der Teufel... ausserdem fehlt mir einfach ein vernünftiger Debugger dafür. Wie auch immer, der Editor funktioniert und ist ausreichend bequem: Tja, und jetzt fehlt nicht mehr der Editor, sondern nur noch die Ideen für mehr Levels... :-) |
||||||||||||
|