home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spiele / dos / bolo.doc < prev    next >
Encoding:
Text File  |  1991-01-02  |  8.4 KB  |  191 lines

  1.           ╒╤═════════════════════════════════════════════════════╤╕
  2.           ││                                                     ││
  3.           ││                 M E G A - B O L O                   ││
  4.           ││                ===================                  ││
  5.           ││                                                     ││
  6.           ││                                                     ││
  7.           ││     (C) Copyright 1991  Peter Messmer & toolbox     ││
  8.           ││                                                     ││
  9.           ││       Special thanks to ANKE for her coloration     ││
  10.           ││                                                     ││
  11.           ╘╧═════════════════════════════════════════════════════╧╛
  12.  
  13.  
  14.  
  15. " Make it as simple as possible but not simpler "
  16.                                              A.Einstein
  17.  
  18. Das Spiel
  19. ---------
  20.  
  21. Falls Du  über einen IBM-kompatiblen Computer mit EGA, Hercules oder AT&T-
  22. Grafikkarte verfügst, dann kannst Du Dich direkt ins Vergnügen stürzen.
  23. Falls nicht, dann mußt Du Dir erst einmal den Source-Code anschauen und
  24. die Umbauten vornehmen, die Dir nötig erscheinen, um das Ganze auf CGA lauf-
  25. fähig zu machen.
  26.  
  27. Gestartet wird das Spiel von der Betriebssystemebene aus mit
  28.  
  29.                  BOLO
  30.  
  31. Danach läuft alles automatisch ab. Sollten die Sound-Effekte schon von Anfang
  32. an ausgeschaltet werden, dann kann beim Startvorgang irgendeine Taste gedrückt
  33. werden, womit kein auch noch so leiser Pipser über den Lautsprecher gelangt.
  34. (Dies ist nicht nur zum Schutz von gestressten Eltern, Ehefrauen,... , sondern
  35. zum reinen Selbstschutz!)
  36.  
  37. Nach dem Logo (mit irgendeiner Taste quittieren) wird nun endlich gespielt.
  38.  
  39. Das Ziel des Spieles ist, mit dem Ball alle Blöcke von Spielfeld zu räumen.
  40. Dabei kannst Du mit Deinem Schläger am unteren Rand des Spielfeldes den Ball
  41. jeweils wieder nach oben katapultieren.
  42. Es stehen Dir folgende Manipulationen zur Verfügung:
  43.  
  44.    - linke  SHIFT-Taste --> Schläger bewegt sich nach links
  45.    - rechte SHIFT-Taste --> Schläger bewegt sich nach rechts
  46.    - SPACE-Taste        --> Schläger stoppt
  47.  
  48. Der Ball übernimmt jeweils einen Teil der Energie des Schlägers, so daß es
  49. sich lohnt, den Ball mit stehendem Schläger zurückzuschlagen.
  50.  
  51. Mit der Zeit kommen dann einige Steine vor, die Spezialfunktionen auslösen,
  52. wie:
  53.    - Multiball
  54.    - Extraball
  55.    - Gravitation und deren Auflösung (Der Ball fliegt nicht mehr linear)
  56.    - Magnet, was den sofortigen Tod bedeutet
  57.    - Vertauschen der Steuertasten
  58.  
  59. Du kannst mit folgenden Tasten noch weitere Funktionen auslösen:
  60.  
  61.    - 'M'  Sound-Effekte ein-/ausschalten
  62.    - 'G'  Falls der Ball nicht mehr herunterkommt, kann eine kurze Gravitation
  63.           simmuliert werden
  64.    - ESC  Verläßt das Spiel sofort
  65.    - alle anderen Tasten
  66.           Anzeige des Hilfebildschirms
  67.  
  68. So, das wärs eigentlich schon, was zum Spielen von Römms-Plöp zu sagen ist.
  69.  
  70. Wenn es Dich interessiert, dann kannst Du noch weiterlesen, denn auf den
  71. nächsten paar Seiten versuche ich, den Aufbau des Spieles im Groben zu be-
  72. schreiben.
  73.  
  74. Natürlich stehe ich auch für irgendwelche Fragen, Kritiken oder Verbesserungs-
  75. vorschläge gernen zur Verfügung.
  76.  
  77.                                       Nun aber viel Spaß beim Spielen
  78.  
  79.                                                 Peter Messmer
  80.  
  81.  
  82. Das Programm
  83. ------------
  84.  
  85. Das Programm stellte ich unter das selbe Motiv wie das ganze Spiel:
  86.  
  87.   Es soll so einfach wie möglich aufgebaut sein, aber nicht einfacher!
  88.  
  89. Ob mir das gelungen ist, kann ich nicht beurteilen; ich kann nur versuchen, den
  90. Ablauf etwas zu erläutern:
  91.  
  92. Zuerst wird festgestellt, ob die nötige Grafikkarte vorhanden ist. Ist dies
  93. nicht der Fall, dann wird das Programm abgebrochen. Sonst werden die bool'schen
  94. Vriablen Mono und ATT dem Adapter entsprechend gesetzt. Somit kann jederzeit
  95. wieder festgestellt werden, ob ein Farb- oder Monochromadapter vorliegt.
  96.  
  97. Handelt es sich um ein System mit EGA-Karte, dann wird die Palette mit den
  98. nötigen Farben besetzt.
  99.  
  100. Nun werden die einzelnen Pictures gezeichnet und auf dem Heap gespeichert. Bei
  101. EGA und Hercules-Systemen wird auch noch der Help-Text auf der nächsten Bild-
  102. schirmseite aufgebaut, damit dieser dann später möglichst schnell zur Verfügung
  103. steht.
  104.  
  105. Anschließend wird das Logo gezeigt, wobei die jeweiligen Schattierungen durch
  106. verschobenes Schreiben erreicht werden. Als Abschluß des Logos wird die Musik
  107. ausgegeben, wobei jedesmal gecheckt wird, ob die Töne zu Lautsprecher gelangen
  108. dürfen oder nicht.
  109.  
  110. Danach gelangt das Programm in eine Schleife, die den gesamten Spielablauf
  111. wiederholt, bis auf die Frage 'Nochmal ? (J/N)' mit 'N' geantwortet wird.
  112.  
  113. Bei jedem Level wird zuerst das Rahmenfeld aufgebaut und dann die Pictures, die
  114. ja auf dem Heap vorhanden sind, auf das Feld gesetzt. Das Setzen erfolgt nach
  115. den Werten im Konstantenarray, wobei die einzelnen Zahlen den Arten der Steine
  116. entsprechen:
  117.  
  118.    - 0  Kein Stein
  119.    - 1  normaler Stein
  120.    - 2  fester Stein
  121.    - 3  Extraball
  122.    - 4  Multiball, maximal 4 pro Level
  123.    - 5  Gravitation
  124.    - 6  Auflösung der Gravitation
  125.    - 7  Magnet
  126.    - 8  Umtausch der Steuertasten
  127.  
  128. Da alle Steine gleich groß sind und der Hintergrund völlig einheitlich ist,
  129. muß nur ein einziges Hintergrund-Bild gerettet werden.
  130.  
  131. Nun beginnt die Simulation des Balles. Zuerst wird der Ball an seiner Ausgangs-
  132. position hingesetzt, wobei natürlich vorher noch der Hintergrund gerettet wird.
  133. In der Schleife wird nun jedesmal zuerst der Hintergrund restauriert und dann
  134. geprüft, ob noch weitere Bälle zu zeichnen sind. Ist dies nich der Fall, so
  135. kann die neue Position des Balles berechnet werden. Liegt diese Position inner-
  136. halb des Gebietes, das eventuell mit Steinen besetzt ist, dann wird überprüft,
  137. ob die neue Position einen Stein berührt.
  138.  
  139. Ist dies der Fall, dann wird mit den beiden Geschwindigkeits-Vektoren die
  140. Richtung, in der der Ball auf den Stein trifft, bestimmt. Nun kann auch die
  141. Position berechnet werden, auf die dann der Ball gesetzt werden muß. Diese
  142. Operation muß erfolgen, denn im Falle eines Steines mit Attribut 2 darf der
  143. Ball nicht in den Stein hineingestzt werden, da sonst der Ball im Stein gefan-
  144. gen wäre (ständige Umkehr der Vektoren).
  145.  
  146. Ist die neue Position errechnet, wird die dem Stein-Attribut entsprechende
  147. Aktion ausgelöst. Meistens wird dann der Stein-Hintergrund auf das Feld
  148. kopiert, um dem Stein verschwinden zu lassen. (Ausnahme: Attribut 2)
  149.  
  150. Als Abschluß wird dann der Ball an die neue Position gesetzt, womit der ganze
  151. Ablauf von neuem beginnt. Bei jedem Durchlauf wird jedoch das Tastatur-Status-
  152. Byte getestet, um festzustellen, ob eine der <SHIFT>-Tasten gedrückt wurde.
  153. Dementsprechend wird dann der Schläger bewegt, wobei gleich wie mit den Bällen
  154. verfahren wird.
  155.  
  156. Bei den Bällen wurde der rekursive Aufruf verwendet, um einen sauberen Stack
  157. für die Hintergründe zu schaffen. Würde man nämlich die Hintergründe in einer
  158. normalen FOR-Schleife retten und sie mit der selben Schleife wieder auf das
  159. Feld bringen, dann hätte man am Schluß den Hintergrund des letzten Balles
  160. auf dem Feld. Dieser Hintergrund könnte jedoch wieder einen Ball beinhalten,
  161. womit am Schluß irgendwelche Ball-Leichen auf dem Spielfeld zurückblieben.
  162.  
  163. Die Ballsimulation wird solange wiederholt, bis entweder alle Steine mit
  164. Attribut 1 vom Feld verschwunden sind, oder bis kein Ball mehr übrig ist.
  165. Im ersten Fall wird das nächste Level aufgebaut und der ganze Vorgang wird
  166. wiederholt.
  167. Falls jedoch alle Bälle verloren gegangen sind, dann wird die Meldung 'Game
  168. over' ausgegeben und man muß wieder von vorne beginnen.
  169.  
  170. Das wäre so in groben Zügen die Arbeitsweise des Programmes Mega-Bolo. Mir
  171. ist klar, daß es einige Stellen gibt, die man noch besser strukturieren kann.
  172. Man muß jedoch bedenken, daß jede Prozedur wiederum einen relativ langsamen
  173. Subroutinen-Aufruf zur Folge hat, sodaß es manchmal schneller ist, einige
  174. Zeilen mehr zu tippen, als diese Befehle zu einer Prozedur zusammenzufassen.
  175.  
  176. Auch bevorzugte ich manchmal eine globale Variable einer lokalen, denn globale
  177. sind nun einmal, wenn auch nur ein klein bißchen, schneller als lokale!
  178.  
  179. Etwas ähnliches ist zum <Ctrl>-<Break> zu sagen. Natürlich wäre es gut, wenn das
  180. Spiel auch über diesen Weg abgebrochen werden könnte, doch scheint mir der
  181. Aufwand, der dazu getrieben werden müßte (Einbinden der Unit DOS einzig des-
  182. wegen oder Byteweise den Code eingeben mit Inline) im Verhältnis zum Ertrag
  183. zu hoch.
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.