home *** CD-ROM | disk | FTP | other *** search
- {$R+,B-,I+,V+}
-
- (* die folgenden Compiler Anweisungen werden benutzt: *)
- (* R+ = mit Index Range Check *)
- (* R- = ohne ... *)
- (* B+ = CON: device fuer IO *)
- (* B- = TRM: ... *)
- (* I+ = mit IO Error Handling *)
- (* I- = ohne ... *)
- (* V+ = mit Typ Check in VAR Parametern *)
- (* V- = ohne ... *)
-
- PROGRAM FLIEGE(Input,Output,Kbd); (* Tastatur wird direkt abgefragt ! *)
-
- (****************************************************************************)
- (* *)
- (* Deklarationen *)
- (* *)
- (****************************************************************************)
-
- CONST
- ZEILEN = 25 ; (* auf dem Bildschirm *)
- SPALTEN = 80 ; (* ... *)
-
- (* es folgen einige ASCII-Codes *)
- GRENZE = 219 ; (* Spielfeldbegrenzung *)
- SPACE = 32 ; (* freier Platz *)
- SPIELER = 1 ;
- FLIEGE = 15 ; (* noch nicht gefangene Fliege *)
- HINDERNIS= 177 ; (* gefangene Fliege *)
- MITTE = 176 ; (* ausgesparter Bereich in der Mitte *)
-
- MAXANZAHL= 10 ; (* maximale Anzahl lebender Fliegen *)
- MAXRUNDEN= 10000 ; (* maximale Anzahl Runden *)
-
- NOTE_C = 131 ; (* ungefaehre Frequenz fuer C *)
- NOTE_D = 587 ; (* fuer D, 2 Oktaven hoeher *)
- NOTE_G = 784 ; (* ... G *)
- BELL = 7; (* Klingelzeichen fuer CP/M-Rechner *)
- BACKSPACE = 8; (* Rueckwaerts loeschen *)
-
- LESE = 0 ; (* fuer Kennung, ob schreiben oder lesen *)
- SCHREIBE = 1 ; (* ... *)
-
- (* Index fuer Daten in Datenfile *)
- ANZAHL = 1 ; (* Fliegen *)
- BEWEGE = 2 ; (* Beweglichkeit *)
- WARTEN = 3 ; (* Zaehler fuer Warteschleife *)
- LAENGE = 4 ; (* des Spiels *)
- MITSOUND = 5 ; (* Spiel mit oder ohne Geraeuschen *)
- T_LI = 6 ; (* Tastencode fuer Spielersteuerung *)
- T_RE = 7 ;
- T_HO = 8 ;
- T_RU = 9 ;
-
- TYPE
- BEWEGLICH= RECORD (* bewegl. Objekte: Spieler, Fliege *)
- Pos: (* Spalte und Zeile *)
- RECORD
- S, Z : INTEGER ;
- END ;
- RICHTUNG: (LI, RE, HO, RU) ; (* die 4 Richtungen *)
- END ;
-
- VAR
- (* zuerst einfachere Variable *)
- PUNKTE, (* Anzahl gefangener Fliegen *)
- P_S, P_Z, (* wo Punktestand angezeigt wird *)
- L_RAND, (* Rand des Spielfelds, um Punkt *)
- R_RAND, (* rechts unten frei zu lassen *)
- WIEVIELE, (* wird Anzahl der Fliegen als Zahl *)
- TRAEGE, (* .. ebenso ihre Beweglichkeit *)
- WARTEZAHL, (* .. und Zaehler fuer Warteschleife *)
- WIELANGE, (* .. und Rundenzaehler *)
- INDEX : INTEGER ; (* Hilfsvariable *)
-
- (* zusammengesetzte Variable *)
- SCHIRM : ARRAY [1..SPALTEN,1..ZEILEN] OF CHAR ;
- FLY : ARRAY [1..MAXANZAHL] OF BEWEGLICH ; (* alle Fliegen *)
- YOU : BEWEGLICH ; (* Spieler *)
- DAT_FILE : ARRAY [1..9] OF CHAR ; (* Daten von file FLYCOM.DAT *)
-
- (*$I FLIEGE.INC *)
-
- (****************************************************************************)
- (* *)
- (* Hauptprogramm *)
- (* *)
- (****************************************************************************)
-
- BEGIN
- INIT_ALLES ;
- REPEAT
- START_WERTE ; (* diese beiden Prozeduren sind nicht in *)
- START_BILD ; (* Initialisieren, da sonst kein Restart *)
- FOR INDEX := WIELANGE DOWNTO 0
- DO BEGIN
- ALLE_FLIEGEN ;
- WARTE_ETWAS ;
- BEWEGE_SPIELER ;
- END ;
- ENDEBILD ;
- UNTIL JA_NEIN ('J') = 'N' ;
- ClrScr ;
- WriteLn ('Tschuess !!') ;
- Delay (2000) ;
- END.
-