home *** CD-ROM | disk | FTP | other *** search
- REM Zahlenwurm Version 1 Turbo BASIC
- REM Spiel zum Kennenlernen des Zahlenraumes 1 - 9
- REM Copyright 1988 by B. Freier & PASCAL Int.
-
-
- start:
-
- SCREEN 1 'Setzen des Bildschirmmodus
- COLOR 15,0 'Farbzuordnung
- CLS
- DIM schirm%(1:40,1:22) 'Array für das Spielfeld
- FOR x%=1 TO 40 'wird gleich auf 0 gesetzt
- FOR y%=1 TO 22
- schirm%(x%,y%)=0
- NEXT y%
- NEXT x%
- RANDOMIZE TIMER 'Starten des Zufallsgenerators
-
-
-
- REM Initialisierungen und Voreinstellungen
-
- level!=0.3 'Verweildauer,eventuell anpassen
- untergrenze%=49 'Untergrenze für Ziffern
- obergrenze%=57 'Obergrenze für Ziffern
- waag%=18 'Waagrechte Koordinate
- senk%=2 'Senkrechte Koordinate
- randzeichen%=15 'ASCII-Zeichen für Umrandung
- kopfzeichen%=2 'ASCII-Zeichen für Figur
- geschafft%=0 'Schalter, wenn Stufe fertig
- kollision%=0 'Schalter, falls angestoßen
-
-
-
- REM Spielfeldaufbau 'Setzen des Randes
-
- FOR i%=1 TO 40
- FOR j%=1 TO 22
- IF (i%=1) OR (j%=1) OR (i%=40) OR (j%=22) THEN_
- schirm%(i%,j%)= randzeichen%:LOCATE j%,i%:_
- PRINT CHR$(randzeichen%);
- NEXT j%
- NEXT i%
-
-
-
- REM Grundstellung 'Ausgangsposition des Kopfes
-
- schirm%(waag%,senk%)=kopfzeichen%
- LOCATE senk%,waag%:PRINT CHR$(kopfzeichen%);
-
-
-
- REM Speiseaufbau 'Verteilen der Zahlen
-
- speisezahl%=0
- x%=untergrenze%
- DO UNTIL x%>obergrenze%
- i%=INT(RND*36+3):j%=INT(RND*18+3)
- 'nicht an den Rand
- IF schirm%(i%,j%)=0 THEN speisezahl%=_
- speisezahl%+1:schirm%(i%,j%)=x%:LOCATE j%,i%:_
- PRINT CHR$(x%);:x%=x%+1
- LOOP 'Schleifenende
-
-
-
- abfrage:
-
- WHILE INSTAT 'Tastaturpuffer leeren
- nix$=INKEY$
- WEND
-
-
-
- steuercodes: 'Einlesen der Eingaben
-
- eingabe$=INKEY$
- IF LEN(eingabe$)=1 THEN GOTO falschetaste
- IF LEN(eingabe$)<>2 THEN GOTO steuercodes
- 'Cursortaste
- eingabe$=RIGHT$(eingabe$,1)
- IF eingabe$=CHR$(72) THEN 'Aufwärtspfeil
- GOSUB auf
- ELSEIF eingabe$=CHR$(80) THEN 'Abwärtspfeil
- GOSUB ab
- ELSEIF eingabe$=CHR$(75) THEN 'Linkspfeil
- GOSUB links
- ELSEIF eingabe$=CHR$(77) THEN 'Rechtspfeil
- GOSUB rechts
- ELSE 'andere Taste
- PRINT CHR$(7);:GOTO falschetaste
- END IF
- IF kollision%=-1 THEN GOTO kollisionsbehandlung
- 'ist angestoßen
- IF geschafft%=-1 THEN GOTO schlussanzeige
- 'alles geschafft
- GOTO steuercodes
-
-
-
- kollisionsbehandlung: 'Leider angestoßen
-
- CLS
- LOCATE 5,5
- PRINT "Schade, Du bist angestossen !";
- SOUND 1700,4
-
-
-
- wiederholung: 'Wiederholungsfrage
-
- LOCATE 11,7:PRINT "Noch ein Spiel (J/N)";
- eingabe$=INKEY$
- IF eingabe$="" THEN GOTO wiederholung
- IF UCASE$(eingabe$)="N" THEN GOTO beendigung
- IF UCASE$(eingabe$)="J" THEN GOTO start
- GOTO wiederholung
-
-
-
- schlussanzeige: 'Alles geschafft
-
- CLS
- LOCATE 5,5
- PRINT "Prima, Du hast es geschafft !"
- SOUND 900,8
- GOTO wiederholung
-
-
-
- falschetaste: 'Falsche Taste gedrückt
-
- CLS
- LOCATE 5,5
- PRINT "Das war eine falsche Taste!"
- LOCATE 7,3
- PRINT "Benutze nur die Pfeiltasten !"
- 'Hinweis für Besserung
- GOTO wiederholung
-
-
-
- beendigung: 'Reguläres Programmende
-
- SCREEN 0
- CLS
- END 'Ende des Hauptprogrammes
-
- links: 'Unterprogramm Linkspfeil
- DO WHILE NOT INSTAT
- waag%=waag%-1
- IF schirm%(waag%,senk%)=untergrenze% THEN_
- untergrenze%=untergrenze%+1:speisezahl%=_
- speisezahl%-1:SOUND 500,1:schirm%(waag%,senk%)=0_
- ELSE SOUND 300,1
- IF schirm%(waag%,senk%)=0 THEN _
- LOCATE senk%,waag%+1:PRINT CHR$(32);:_
- LOCATE senk%,waag%:PRINT CHR$(kopfzeichen%);_
- ELSE kollision%=-1:EXIT LOOP
- DELAY level!
- IF speisezahl%=0 THEN geschafft%=-1:EXIT LOOP
- LOOP
- RETURN
-
-
-
- rechts: 'Unterprogramm Rechtspfeil
-
- DO WHILE NOT INSTAT
- waag%=waag%+1
- IF schirm%(waag%,senk%)=untergrenze% THEN_
- untergrenze%=untergrenze%+1:speisezahl%=_
- speisezahl%-1:SOUND 500,1:schirm%(waag%,senk%)=0_
- ELSE SOUND 300,1
- IF schirm%(waag%,senk%)=0 THEN _
- LOCATE senk%,waag%-1:PRINT CHR$(32);:_
- LOCATE senk%,waag%:PRINT CHR$(kopfzeichen%);_
- ELSE kollision%=-1:EXIT LOOP
- DELAY level!
- IF speisezahl%=0 THEN geschafft%=-1:EXIT LOOP
- LOOP
- RETURN
-
-
-
- ab: 'Unterprogramm Abwärtspfeil
-
- DO WHILE NOT INSTAT
- senk%=senk%+1
- IF schirm%(waag%,senk%)=untergrenze% THEN_
- untergrenze%=untergrenze%+1:speisezahl%=_
- speisezahl%-1:SOUND 500,1:schirm%(waag%,senk%)=0_
- ELSE SOUND 300,1
- IF schirm%(waag%,senk%)=0 THEN _
- LOCATE senk%-1,waag%:PRINT CHR$(32);:_
- LOCATE senk%,waag%:PRINT CHR$(kopfzeichen%);_
- ELSE kollision%=-1:EXIT LOOP
- DELAY level!
- IF speisezahl%=0 THEN geschafft%=-1:EXIT LOOP
- LOOP
- RETURN
-
-
-
- auf: 'Unterprogramm Aufwärtspfeil
-
- DO WHILE NOT INSTAT
- senk%=senk%-1
- IF schirm%(waag%,senk%)=untergrenze% THEN_
- untergrenze%=untergrenze%+1:speisezahl%=_
- speisezahl%-1:SOUND 500,1:schirm%(waag%,senk%)=0_
- ELSE SOUND 300,1
- IF schirm%(waag%,senk%)=0 THEN _
- LOCATE senk%+1,waag%:PRINT CHR$(32);:_
- LOCATE senk%,waag%:PRINT CHR$(kopfzeichen%);_
- ELSE kollision%=-1:EXIT LOOP
- DELAY level!
- IF speisezahl%=0 THEN geschafft%=-1:EXIT LOOP
- LOOP
- RETURN