Autor Thema: Listings abtippen und sammeln  (Gelesen 5037 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline CPCCoder

  • Moderator
  • Schreibgeschützter
  • *****
  • Beiträge: 39
  • Liked: 26
  • Karma: +7/-0
Listings abtippen und sammeln
« am: 22. August 2019, 09:20:57 »
Hallo an alle CPCler,

dieser Bereich soll den vielen Listings gewidmet werden, die es damals zu Hauf in verschiedenen Magazinen
und Büchern gab.

Es soll ja noch verrückte geben, die Heute noch Listings abschreiben und sammeln.
Wie in den alten Tagen. Retro pur.

Damals waren Spiele schlicht zu teuer und das Angebot an Listings in den Magazinen oftmals
sehr billig. Man setzte sich vor dem Heimcomputer seiner Wahl und schrieb die ellenlangen
Basiczeilen ab. Die, oftmals sehr viele Fehler hatten. Schreibfehler nisteten sich schnell ein.
Diese mussten dann gesucht und wieder richtig eingegeben werden.
Ich erinnere mich da an die schrecklichen Data-Zeilen mit Kollonnen von Zahlen.

Heute völlig undenkbar.

Nun, wer Basic-Listings oder auch Assembler-Listings hat, kann diese gerne hier veröffentlichen.
Am besten mit Angaben wie z.B.: Basic 1.0, CPC 464, Heft:Schneider Magazin 08'1985, Genre: Spiel, Anwendung ... ect.

Na dann viel Spass beim abtippen. Mal schauen was alles an Programmen hier zusammen kommt.

CPCCoder



« Letzte Änderung: 24. August 2019, 15:13:24 von CPCCoder »

Offline CPCCoder

  • Moderator
  • Schreibgeschützter
  • *****
  • Beiträge: 39
  • Liked: 26
  • Karma: +7/-0
Re: Listings abtippen uns sammeln
« Antwort #1 am: 23. August 2019, 17:12:52 »
Als Einstand das erstes Listing  (The Amstrad Program Book, 1984 Peter Goode)

Titel: Clear Path

Entering the Screen at top left you must "fly" across the city
and demolish the skycrapers by pressing the space bar to
release your boms.


 10 REM Clear Path
20 GOSUB 440
30 ENT 1,200,2,1
40 BY=-1
50 GOSUB 620
60 LOCATE 1,1:PAPER 5:PEN 10
70 PRINT"     SCORE :        ";
80 X=1:Y=3
90 LOCATE 1,1
100 PAPER 5:PEN 10: PRINT SCORE;
110 PAPER 0
120 TX=X+1:TY=Y
130 IF TX=20 Then TX=1:TY=Y+1
140 IF TY=25 AND TX=10 then LOCATE 5,4:PEN 13:Print"LANDED SAVELY":SC=SC+200:for w=1 to 1300:NEXT W:MODE 0:GOTO 50
150 XX=TX+1:YY=TY:IF XX=21 THEN XX=1:YY=YY+1
160 GOSUB 580
170 IF DD=32 then GOTO 250
180 PEN 8: LOCATE 5,4:PRINT"YOU CRASHED"
190 IF INKEY$=" " THEN GOTO 190
200 IF INKEY$<>" " THEN GOTO 200
210 RUN
220 SOUND 129,0:SOUND 130,0
230 FOR L=15 to STEP -1
240 SOUND &129,0,3,5,0,0,:L:NEXT L
250 LOCATE X,Y:PRINT"   ";
260 LOCATE TX,TY:PRINT CHR$(197);CHR$(202);
270 X=TX:Y=TY
280 IF INKEY(47)<>0 or BY<>-1 THEn GOTO 330
290 SOUND 1,10,280,4,0,1,0
300 BX=X+1
310 BY=Y+1
320 IF BY=26 THEN BY=-1
330 IF BY=-1 THEN GOTO 430
340 IF BY=25 THEN LOCATE BX,BY:PRINT" ";:BY=-1:SOUND 130,0:SOUND 129,0:GOTO 430
350 XX=BX:YY=BY+1
360 GOSUB 580
370 IF DD=32 THEN LOCATE BX,BY:PRINT" ";:LOCATE BX,BY+1:PEN 9:PRINT CHR$(252);:BY=BY+1:GOTO 430
380 SOUND 129,0
390 SOUND 139,0,100,3,0,0,RND(1)*4+10
400 SCORE=SCORE+10
410 LOCATE BX,BY:PRINT" ";
420 BY=BY+1:LOCATE BX,BY:PEN 8: PRINT CHR$(252)
430 Goto 90
440 REm PUT MACHINE VCODE JUST ABOVE RE-AGJUSTED HIMEM
450 MEMORY FRE(0)-&80
460 MC=HIMEM+1
470 TA=HIMEM+&7F
480 TH=INT(TA/256)
490 TL=TA-256*TH
500 POKE MC,&CD
510 POKE MC+1,&60
520 POKE MC+2,&BB
530 POKE MC+3,&32
540 POKE MC+4,TL
550 POKE MC+5,TH
560 POKE MC+6,&C9
570 RETURN
580 LOCATE XX,YY
590 CALL MC
600 DD=PEEK(TA)
610 RETURN
620 REm DRAW THE CITY SCAPE
630 MODE 0
640 BORDER 7
650 PEN 3
660 PAPER 1
670 FOR L=1 TO 20
680 FOR Q=25 to 24-RND(1)*4 STEP -1
690 LOCATE L,Q
700 PRINT CHR$(207);
710 NEXT Q
720 NEXT L
730 RETURN

« Letzte Änderung: 26. August 2019, 16:46:33 von Devilmarkus »

Offline oobdoo

  • CPC 6128
  • ****
  • Beiträge: 468
  • Liked: 122
  • Karma: +17/-0
  • Geschlecht: Männlich
  • :P
Re: Listings abtippen und sammeln
« Antwort #2 am: 25. August 2019, 14:20:55 »
dieser Bereich soll den vielen Listings gewidmet werden, die es damals zu Hauf in verschiedenen Magazinen
und Büchern gab.
Listing in eine digitale Form zu bringen gehört zur Digitalarchälogie.


Na dann viel Spass beim abtippen. Mal schauen was alles an Programmen hier zusammen kommt.
Ich muss unbedingt meinen Scanner mal testen ob damit ein Abtippen überflüssig werden kann.
Im Gegensatz zum 64er sollten da keine/kaum Sonderzeichen auftauchen.
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

Offline CPCCoder

  • Moderator
  • Schreibgeschützter
  • *****
  • Beiträge: 39
  • Liked: 26
  • Karma: +7/-0
Re: Listings abtippen und sammeln
« Antwort #3 am: 25. August 2019, 15:23:17 »
@oobdoo

mit dem Scanner ist natürlich auch eine gute Idee von dir.
Aber ab und an, tippe ich ja gerne ein Listing ab. Halt so wie es früher
üblich war :)

P.S.
Natürlich kann man auch seine eigene Listing/Programme hier posten.
Egal aus welchen Bereich auch immer

Online Devilmarkus

  • Administrator
  • CPC 464+
  • *****
  • Beiträge: 1064
  • Liked: 344
  • Karma: +35/-0
Re: Listings abtippen und sammeln
« Antwort #4 am: 26. August 2019, 16:47:35 »
Coole Sache!

Würdest du bitte bei Listings das nächste mal den [code]-Tag verwenden? Wäre super!
Hab deinen ersten Beitrag mal eben fix so editiert...

Hoffe, hier kommen noch viel mehr Listings rein :)
http://cpcwiki.de
Dein Deutsches CPCWiki!

Offline mv

  • Schreibgeschützter
  • *
  • Beiträge: 7
  • Liked: 13
  • Karma: +3/-0
Re: Listings abtippen uns sammeln
« Antwort #5 am: 16. Februar 2020, 00:49:33 »
Als Einstand das erstes Listing  (The Amstrad Program Book, 1984 Peter Goode)
Titel: Clear Path
...

Eigentlich wollte ich nur mal schnell das Progrämmchen "clearpath" mit CPCBasic ausprobieren.
Erst musste ich für CPCBasic ein paar Tippfehler oder Einscan-Unschärfen in den Zeilen 230 und 240 korrigiert (auch wenn das "Dead Code" ist). Und dann den MC-Code mit CALL &BB60 durch COPYCHR$ ersetzen.
Es gab aber merkwürdige Effekte. So war die Score-Anzeige an der falschen Stelle und der Flieger rechts wurde nicht gelöscht.
Für den Flieger rechts war ein Leerzeichen zuviel in Zeile 250 verantwortlich.

Ich dachte erst, vielleicht war etwas beim Kopieren vom Listing ins Forum schief gelaufen, also habe ich JavaCPC (ist ja super authentisch! ;) installiert und cpath.cdt angeschaut. Die Version darin war aber identisch.

Auf cpc-power habe ich noch eine andere Version gefunden, die nicht die Einscan-Unschärfen aufwies.
Die lief zwar auf CPC 464 aber nicht auf CPC 6128. Dort konnte der Flieger ohne Crash die Stadt wegradieren.
Und ich lernte, dass es eine Unterschied bei TXT RD CHAR (oder COPYCHR$) bei den Systemen gibt. Auf dem CPC 6128 muss man vorher z.B. den richtigen PEN setzen. Danach klappte es. Hier das Ergebnis mit leichten Anpassungen:

10 REM CLEAR PATH
20 GOSUB 440
30 ENT 1,200,2,1
40 BY=-1
50 GOSUB 620
60 LOCATE 1,1:PAPER 5:PEN 10
70 PRINT "     SCORE :        ";
80 X=1:Y=3
90 t!=time+((inkey(53)>=0)+2)*25:while time<t!:call &bd19:wend:LOCATE 11,1
100 PAPER 5:PEN 10:PRINT SCORE;
110 PAPER 0
120 TX=X+1:TY=Y
130 IF TX=20 THEN TX=1:TY=Y+1
140 IF TY=25 AND TX=10 THEN LOCATE 5,4:PEN 13:PRINT "LANDED SAFELY":SC=SC+200:FOR W=1 TO 1300/10:call &bd19:NEXT W:MODE 0:GOTO 50
150 XX=TX+1:YY=TY:IF XX=21 THEN XX=1:YY=YY+1
160 pen 3:GOSUB 580:pen 10
170 IF DD=32 THEN GOTO 250
180 PEN 8:LOCATE 5,4:PRINT "YOU CRASHED"
190 IF INKEY$=" " or inkey(47)>=0 THEN GOTO 190
200 IF INKEY$<>" " THEN GOTO 200
210 RUN
220 SOUND 129,0:SOUND 130,0
230 FOR L=15 TO 0 STEP -1
240 SOUND &129,0,3,5,0,0,L:NEXT L
250 LOCATE X,Y:PRINT "  ";
260 LOCATE TX,TY:PRINT CHR$(197);CHR$(202);
270 X=TX:Y=TY
280 IF INKEY(47)<>0 OR BY<>-1 THEN GOTO 330
290 SOUND 1,10,280,4,0,1,0
300 BX=X+1
310 BY=Y+1
320 IF BY=26 THEN BY=-1
330 IF BY=-1 THEN GOTO 430
340 IF BY=25 THEN LOCATE BX,BY:PRINT " ";:BY=-1:SOUND 130,0:SOUND 129,0:GOTO 430
350 XX=BX:YY=BY+1
360 pen 3:GOSUB 580:pen 10:'TTT
370 IF DD=32 THEN LOCATE BX,BY:PRINT " ";:LOCATE BX,BY+1:PEN 9:PRINT CHR$(252);:BY=BY+1:GOTO 430
380 SOUND 129,0
390 SOUND 130,0,100,3,0,0,RND(1)*4+10
400 SCORE=SCORE+10
410 LOCATE BX,BY:PRINT " ";
420 BY=BY+1:LOCATE BX,BY:PEN 9:PRINT CHR$(252);
430 GOTO 90
440 REM PUT MACHINE CODE JUST ABOVE RE-ADJUSTED HIMEM
450 MEMORY FRE(0)-&80
460 MC=HIMEM+1
470 TA=HIMEM+&7F
480 TH=INT(TA/256)
490 TL=TA-256*TH
500 POKE MC,&CD
510 POKE MC+1,&60
520 POKE MC+2,&BB
530 POKE MC+3,&32
540 POKE MC+4,TL
550 POKE MC+5,TH
560 POKE MC+6,&C9
570 RETURN
580 LOCATE XX,YY
590 if PEEK(&BB60)<>&CF THEN DD=asc(copychr$(#0)):goto 610 else CALL MC
600 DD=PEEK(TA)
610 RETURN
620 REM DRAW THE CITY-SCAPE
630 MODE 0
640 BORDER 7
650 PEN 3
660 PAPER 1
670 FOR L=1 TO 20
680 FOR Q=25 TO 24-RND(1)*4 STEP -1
690 LOCATE L,Q
700 PRINT CHR$(207);
710 NEXT Q
720 NEXT L
730 RETURN

Verfügbar auch auf: https://benchmarko.github.io/CPCBasic/cpcbasic.html?database=apps&example=games/clearpa&sound=true

In dem Buch gibt es ja noch einige andere Programme, die CALL &BB60 benutzen...

Offline TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3089
  • Liked: 743
  • Karma: +36/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Listings abtippen und sammeln
« Antwort #6 am: 16. Februar 2020, 16:03:57 »
Ja, stimmt. Da gibt's ein paar wenige Unterschiede. Jedesmal wenn man sie fast vergessen hat stolpert man wieder drüber  ;)
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 7.8.2019)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 28.08.2019)

Offline Im Wald

  • Schreibgeschützter
  • *
  • Beiträge: 3
  • Liked: 5
  • Karma: +1/-0
Re: Listings abtippen und sammeln
« Antwort #7 am: 19. Februar 2020, 04:09:37 »
TXT RD CHAR ist schrecklich und arg.

10 REM Clear Path
30 ENT 1,200,2,1
40 BY=-1
50 GOSUB 620
60 LOCATE 1,1:PAPER 5:PEN 10
70 PRINT"SCORE :             ";
80 X=1:Y=3:GX=32:GY=366
90 LOCATE 10,1
100 PAPER 5:PEN 10: PRINT SC;
110 PAPER 0
120 TX=X+1:TY=Y:GX=GX+32
130 IF TX=20 THEN TX=1:TY=Y+1:GX=0:GY=GY-16:LOCATE x,y:PRINT"  ";
140 IF TY=25 AND TX=10 THEN LOCATE 5,4:PEN 13:PRINT"LANDED SAFELY":SC=SC+200:FOR w=1 TO 1300:NEXT W:MODE 0:GOTO 50
150 XX=GX+32:YY=GY:IF XX=640 THEN XX=0:YY=YY-16
170 IF TEST(XX,YY)=0 THEN GOTO 250
180 PEN 8: LOCATE 5,4:PRINT"YOU CRASHED"
190 IF INKEY$=" " THEN GOTO 190
200 IF INKEY$<>" " THEN GOTO 200
210 RUN
250 LOCATE X,Y:PRINT"  ";
260 LOCATE TX,TY:PRINT CHR$(197);CHR$(202);
270 X=TX:Y=TY
280 IF INKEY(47)<>0 OR BY<>-1 THEN GOTO 330
290 SOUND 1,10,280,4,0,1,0
300 BX=GX+32
310 BY=GY-16
320 IF BY<0 THEN BY=-1
330 IF BY=-1 THEN GOTO 430
340 IF BY=14 THEN MOVE BX,BY:TAG:PRINT" ";:TAGOFF:BY=-1:SOUND 130,0:SOUND 129,0:GOTO 430
350 XX=BX:YY=BY-16
370 IF TEST(XX,YY)=0 THEN MOVE BX,BY:TAG:PRINT" ";:PLOT -2,-2,9:MOVE BX,BY-16:PRINT CHR$(252);:TAGOFF:BY=BY-16:GOTO 430
380 SOUND 129,0
390 SOUND 139,0,100,3,0,0,RND(1)*4+10
400 SC=SC+10
410 MOVE BX,BY:TAG:PRINT" ";:TAGOFF
420 BY=BY-16:PLOT -2,-2,8:MOVE BX,BY:TAG:PRINT CHR$(252);:TAGOFF
430 GOTO 90
620 REM DRAW THE CITY SCAPE
630 MODE 0
640 BORDER 7
650 PEN 3
660 PAPER 1
670 FOR L=2 TO 20
680 FOR Q=25 TO 24-RND(1)*4 STEP -1
690 LOCATE L,Q
700 PRINT CHR$(207);
710 NEXT Q
720 NEXT L
730 RETURN

Offline TFM

  • Administrator
  • CPC 6128+
  • *****
  • Beiträge: 3089
  • Liked: 743
  • Karma: +36/-0
  • Geschlecht: Männlich
  • FutureSoft und CPC - Ein starkes Team!
    • FutureOS
Re: Listings abtippen und sammeln
« Antwort #8 am: 19. Februar 2020, 21:46:04 »
Herzlich Willkommen 'Im Wald'.  :)
TFM of FutureSoft
http://www.FutureOS.de --> Das Betriebssystem FutureOS (Update: 7.8.2019)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 28.08.2019)

Offline Im Wald

  • Schreibgeschützter
  • *
  • Beiträge: 3
  • Liked: 5
  • Karma: +1/-0
Re: Listings abtippen und sammeln
« Antwort #9 am: 12. Juli 2020, 02:04:16 »
Mehr TXT RD CHAR blödsinn:

10 REM*****MOUSE BY G.REDMAN*****
20 REM(c)Computing with the Amstrad
30 REM*****INITIAL SETTING UP*****
40 ON BREAK GOSUB 1350:KEY 139,"SPEED KEY 10,5:INK 1,25:PEN 1"+CHR$(13)
50 RANDOMIZE TIME:SPEED KEY 1,1
60 ad2=34999:GOSUB 1080:ad3=35020:GOSUB 1240
70 REM**MOUSE & MARKER CHARACTERS**
80 SYMBOL AFTER 200:SYMBOL 201,0,8,60,126,34,12,0,0
90 SYMBOL 202,0,16,60,126,68,48,0,0
100 SYMBOL 203,0,0,60,60,60,60,0,0
110 REM*COLOUR AND WINDOW SETTINGS*
120 BORDER 4:INK 0,0:INK 1,0:INK 2,0:INK 3,0:PAPER 0:CLS
130 WINDOW#2,2,39,25,25:WINDOW#4,2,39,2,23:PAPER#4,0:PAPER #2,2:PEN#2,0
140 t%=10000
150 GOSUB 750:REM**TITLE & INSTR***
160 REM***DRAW BORDER***
170 CLS:INK 3,0:PEN 3:PRINT STRING$(40,143)
180 FOR n=2  TO 25:LOCATE 40,n:PRINT CHR$(143);:NEXT
190 LOCATE 1,24:PRINT STRING$(40,143)
200 LOCATE 1,1:FOR n=1 TO 25:LOCATE 1,n:PRINT CHR$(143);:NEXT:INK 3,6
210 REM***SCORE WINDOW***
220 CLS#2:LOCATE#2,3,1:PRINT#2,"Your Score":s%=0:LOCATE#2,20,1:PRINT#2,"Best Score":LOCATE#2,30,1:IF t%<>10000 THEN PRINT#2,t%
230 REM*SOUND VARIABLES & START**
240 ENT 1,1,12,6,1,-12,6:ENV 1,6,-1,1
250 x%=INT(RND(1)*30)+4:y%=INT(RND(1)*20)+3:g%=INT(RND(1)*30)+4:h%=INT(RND(1)*20)+3:dir=INT(RND(1)*4)+1:PEN 2
260 REM***MAIN PROGRAM LOOP***
270 IF dir=1 OR dir=2 THEN mou=202 ELSE mou=201
280 LOCATE g%,h%:PRINT CHR$(mou)
290 PEN 0:LOCATE#2,13,1:PRINT#2,s%:s%=s%+1
300 GOSUB 950:REM**MOVE MAN**
310 LOCATE g%,h%:PRINT CHR$(143):PEN 2
320 GOSUB 400:REM**MOVE MOUSE**
330 LOCATE (g%+i%),h%:GOSUB 1190:REM**LOOK FOR WALL**
340 IF k%=1 THEN m%=1:GOSUB 460:REM**CHANGE MOUSE DIRECTION**
350 m%=0:k%=0:LOCATE g%,(h%+j%):GOSUB 1190
360 IF k%=1 THEN m%=2:GOSUB 460
370 k%=0:m%=0:GOTO 270
380 REM***END OF MAIN LOOP***
390 REM***MOVEMENT ROUTINE***
400 IF dir=1 THEN g%=g%+1:h%=h%+1:i%=1:j%=1
410 IF dir=2 THEN g%=g%+1:h%=h%-1:i%=1:j%=-1
420 IF dir=3 THEN g%=g%-1:h%=h%-1:i%=-1:j%=-1
430 IF dir=4 THEN g%=g%-1:h%=h%+1:i%=-1:j%=1
440 RETURN
450 REM**DIRECTION CHANGE ROUTINE**
460 IF x%=g% AND y%=h% THEN GOTO 570
470 SOUND 1,160,6,15,1,1,0
480 IF dir=1 AND m%=1 THEN dir=4:RETURN
490 IF dir=1 AND m%=2 THEN dir=2:RETURN
500 IF dir=2 AND m%=1 THEN dir=3:RETURN
510 IF dir=2 AND m%=2 THEN dir=1:RETURN
520 IF dir=3 AND m%=1 THEN dir=2:RETURN
530 IF dir=3 AND m%=2 THEN dir=4:RETURN
540 IF dir=4 AND m%=1 THEN dir=1:RETURN
550 IF dir=4 AND m%=2 THEN dir=3:RETURN
560 REM***MOUSE CAPTURED ROUTINE***
570 IF x%>36 THEN x%=36
580 IF y%>20 THEN y%=20
590 IF x%<3 THEN x%=3
600 IF y%<3 THEN y%=3
610 WINDOW#3,(x%-2),(x%+2),(y%-2),(y%+2):PAPER#3,3:CLS#3:PEN#3,2:LOCATE#3,2,2:PRINT#3,"GOT":LOCATE#3,2,4:PRINT#3,"HIM"
620 ENT 1,15,7,2,15,-7,2
630 FOR n=100 TO 250 STEP 2:SOUND 1,n,3,6,0,1,0:NEXT
640 SOUND 1,210,50,6,0,0,9
650 IF s%<t% THEN t%=s%-1
660 LOCATE #2,30,1:PRINT #2,t%
670 LOCATE 5,24:PEN 1:PRINT"  PRESS SPACE BAR WHEN READY   "
680 WHILE INKEY$<>" ":WEND
690 REM****REPEAT GAME****
700 CLS#4:LOCATE 5,24:PEN 3:PRINT STRING$(31,143):PEN 2:LOCATE 12,13:PRINT "Another game ? (Y/N)"
710 x$=UPPER$(INKEY$):IF x$="Y"THEN CLS #4:GOTO 220
720 IF x$="N" THEN GOTO 1350
730 GOTO 710
740 REM****TITLE & INSTRUCTIONS****
750 WINDOW#1,8,33,2,9:PEN#1,1
760 RESTORE 900
770 FOR n=1 TO 104
780 READ tit:PRINT#1,CHR$(tit);
790 NEXT
800 PEN#1,2:PRINT#1:FOR n=1 TO 13:PRINT#1,CHR$(202);CHR$(201);:NEXT n
810 PEN#4,3:LOCATE#4,1,8:PRINT#4,"   Using the joystick or the cursor   keys you  must  chase  the  mouse ";:PEN#4,2:PRINT#4,CHR$(202);;:PEN#4,3:PRINT#4,"and capture him."
820 PRINT #4:PRINT#4,"   To  do  this  you  must  move  yourman   to  the same position  as  the  mouse. The  trail   you  leave  behindwill act like a wall and  confine  themouse so you can capture him."
830 PRINT#4:PRINT#4,"   Do this as  fast  as  you can. The LOWEST score is the best."
840 PEN 2:LOCATE 5,23:PRINT "BEWARE, THIS MOUSE CAN GNAW !!!!"
850 LOCATE 10,25:PRINT "PRESS THE SPACE BAR.";
860 INK 1,14:INK 2,24:INK 3,15
870 WHILE INKEY$<>" ":WEND
880 CLS#4:RETURN
890 REM**DATA FOR TITLE******
900 DATA 214,32,32,32,32,215,32,32,214,143,215,32,32,214,32,215,32,32,214,143,215,32,32,214,143,215
910 DATA 143,215,32,32,214,143,32,32,143,32,143,32,32,143,32,143,32,32,213,210,32,32,32,143,210,32
920 DATA 143,213,215,214,212,143,32,32,143,32,143,32,32,143,32,143,32,32,32,208,215,32,32,143,208,32
930 DATA 213,32,213,212,32,212,32,32,213,143,212,32,32,213,143,212,32,32,213,143,212,32,32,213,143,212
940 REM***INKEYS/JOY m/c ROUTINE***
950 CALL ad2+1:in=PEEK(ad2):man=248
960 PEN 1:LOCATE x%,y%:PRINT CHR$(203)
970 IF in=8 OR in=242 THEN x%=x%-1:man=250
980 IF in=9 OR in=243 THEN x%=x%+1:man=251
990 IF in=11 OR in=240 THEN y%=y%-1:man=249
1000 IF in=10 OR in=241 THEN y%=y%+1:man=249
1010 IF x%>39 THEN x%=39
1020 IF x%<2  THEN x%=2
1030 IF y%>23 THEN y%=23
1040 IF y%<2 THEN y%=2
1050 PEN 2:LOCATE x%,y%:PRINT CHR$(man):PEN 0:SOUND 1,200,1,2,0,0,0
1060 RETURN
1070 REM***POKE INKEYS m/c***
1080 c=INT(ad2/256):b=ad2-256*c
1090 RESTORE 1160
1100 FOR n=ad2 TO ad2+13
1110 READ d:IF d=999 THEN d=b
1120 IF d=998 THEN d=c
1130 POKE n,d
1140 NEXT n
1150 RETURN
1160 DATA 0,62,0,50,999,998,205,27
1170 DATA 187,208,50,999,998,201
1180 REM**CHECK CHAR POSITION**
1190 CALL ad3+1
1200 ch=PEEK(ad3)
1210 IF ch=143 OR ch=203 THEN k%=1
1220 RETURN
1230 REM**POKE CHAR CHECK m/c***
1240 c=INT(ad3/256):b=ad3-256*c
1250 RESTORE 1320
1260 FOR n=ad3 TO ad3+13
1270 READ d:IF d=999 THEN d=b
1280 IF d=998 THEN d=c
1290 POKE n,d
1300 NEXT n
1310 RETURN
1320 DATA 0,62,244,50,999,998,205,96
1330 DATA 187,208,50,999,998,201
1340 REM*****END ROUTINE*******
1350 CLS:INK 1,25:PEN 1:LOCATE 1,13:PRINT "Type R to RUN again or E to END program.":SPEED KEY 10,5
1360 x$=UPPER$(INKEY$):IF x$="E" THEN END
1370 IF x$="R" THEN RUN
1380 GOTO 1360

können werden:

10 REM*****MOUSE BY G.REDMAN*****
20 REM(c)Computing with the Amstrad
30 REM*****INITIAL SETTING UP*****
40 ON BREAK GOSUB 1350:KEY 139,"SPEED KEY 10,5:INK 1,25:PEN 1"+CHR$(13)
50 RANDOMIZE TIME:SPEED KEY 1,1
60 ad2=34999:GOSUB 1080
70 REM**MOUSE & MARKER CHARACTERS**
80 SYMBOL AFTER 200:SYMBOL 201,0,8,60,126,34,12,0,0
90 SYMBOL 202,0,16,60,126,68,48,0,0
100 SYMBOL 203,0,0,60,60,60,60,0,0
110 REM*COLOUR AND WINDOW SETTINGS*
120 MODE 1:BORDER 4:INK 0,0:INK 1,0:INK 2,0:INK 3,0:PAPER 0:CLS
130 WINDOW#2,2,39,25,25:WINDOW#4,2,39,2,23:PAPER#4,0:PAPER #2,2:PEN#2,0
140 t%=10000
150 GOSUB 750:REM**TITLE & INSTR***
160 REM***DRAW BORDER***
170 CLS:INK 3,0:PEN 3:PRINT STRING$(40,143)
180 FOR n=2  TO 25:LOCATE 40,n:PRINT CHR$(143);:NEXT
190 LOCATE 1,24:PRINT STRING$(40,143)
200 LOCATE 1,1:FOR n=1 TO 25:LOCATE 1,n:PRINT CHR$(143);:NEXT:INK 3,6
210 REM***SCORE WINDOW***
220 CLS#2:LOCATE#2,3,1:PRINT#2,"Your Score":s%=0:LOCATE#2,20,1:PRINT#2,"Best Score":LOCATE#2,30,1:IF t%<>10000 THEN PRINT#2,t%
230 REM*SOUND VARIABLES & START**
240 ENT 1,1,12,6,1,-12,6:ENV 1,6,-1,1
250 x%=INT(RND(1)*30)+4:y%=INT(RND(1)*20)+3:g%=INT(RND(1)*30)+4:h%=INT(RND(1)*20)+3:dir=INT(RND(1)*4)+1:PEN 2
251 gg%=(g%-1)*16+4:gh%=398-((h%-1)*16)-4
260 REM***MAIN PROGRAM LOOP***
270 IF dir=1 OR dir=2 THEN mou=202 ELSE mou=201
280 LOCATE g%,h%:PRINT CHR$(mou)
290 PEN 0:LOCATE#2,13,1:PRINT#2,s%:s%=s%+1
300 GOSUB 950:REM**MOVE MAN**
310 LOCATE g%,h%:PRINT CHR$(143):PEN 2
320 GOSUB 400:REM**MOVE MOUSE**
330 REM**LOOK FOR WALL**
340 IF TEST(gg%+i%,gh%)<>0 THEN m%=1:GOSUB 460
350 m%=0
360 IF TEST(gg%,gh%+j%)<>0 THEN m%=2:GOSUB 460
370 m%=0:GOTO 270
380 REM***END OF MAIN LOOP***
390 REM***MOVEMENT ROUTINE***
400 IF dir=1 THEN g%=g%+1:h%=h%+1:gg%=gg%+16:gh%=gh%-16:i%=16:j%=-16
410 IF dir=2 THEN g%=g%+1:h%=h%-1:gg%=gg%+16:gh%=gh%+16:i%=16:j%=16
420 IF dir=3 THEN g%=g%-1:h%=h%-1:gg%=gg%-16:gh%=gh%+16:i%=-16:j%=16
430 IF dir=4 THEN g%=g%-1:h%=h%+1:gg%=gg%-16:gh%=gh%-16:i%=-16:j%=-16
440 RETURN
450 REM**DIRECTION CHANGE ROUTINE**
460 IF x%=g% AND y%=h% THEN GOTO 570
470 SOUND 1,160,6,15,1,1,0
480 IF dir=1 AND m%=1 THEN dir=4:RETURN
490 IF dir=1 AND m%=2 THEN dir=2:RETURN
500 IF dir=2 AND m%=1 THEN dir=3:RETURN
510 IF dir=2 AND m%=2 THEN dir=1:RETURN
520 IF dir=3 AND m%=1 THEN dir=2:RETURN
530 IF dir=3 AND m%=2 THEN dir=4:RETURN
540 IF dir=4 AND m%=1 THEN dir=1:RETURN
550 IF dir=4 AND m%=2 THEN dir=3:RETURN
560 REM***MOUSE CAPTURED ROUTINE***
570 IF x%>36 THEN x%=36
580 IF y%>20 THEN y%=20
590 IF x%<3 THEN x%=3
600 IF y%<3 THEN y%=3
610 WINDOW#3,(x%-2),(x%+2),(y%-2),(y%+2):PAPER#3,3:CLS#3:PEN#3,2:LOCATE#3,2,2:PRINT#3,"GOT":LOCATE#3,2,4:PRINT#3,"HIM"
620 ENT 1,15,7,2,15,-7,2
630 FOR n=100 TO 250 STEP 2:SOUND 1,n,3,6,0,1,0:NEXT
640 SOUND 1,210,50,6,0,0,9
650 IF s%<t% THEN t%=s%-1
660 LOCATE #2,30,1:PRINT #2,t%
670 LOCATE 5,24:PEN 1:PRINT"  PRESS SPACE BAR WHEN READY   "
680 WHILE INKEY$<>" ":WEND
690 REM****REPEAT GAME****
700 CLS#4:LOCATE 5,24:PEN 3:PRINT STRING$(31,143):PEN 2:LOCATE 12,13:PRINT "Another game ? (Y/N)"
710 x$=UPPER$(INKEY$):IF x$="Y"THEN CLS #4:GOTO 220
720 IF x$="N" THEN GOTO 1350
730 GOTO 710
740 REM****TITLE & INSTRUCTIONS****
750 WINDOW#1,8,33,2,9:PEN#1,1
760 RESTORE 900
770 FOR n=1 TO 104
780 READ tit:PRINT#1,CHR$(tit);
790 NEXT
800 PEN#1,2:PRINT#1:FOR n=1 TO 13:PRINT#1,CHR$(202);CHR$(201);:NEXT n
810 PEN#4,3:LOCATE#4,1,8:PRINT#4,"   Using the joystick or the cursor   keys you  must  chase  the  mouse ";:PEN#4,2:PRINT#4,CHR$(202);;:PEN#4,3:PRINT#4,"and capture him."
820 PRINT #4:PRINT#4,"   To  do  this  you  must  move  yourman   to  the same position  as  the  mouse. The  trail   you  leave  behindwill act like a wall and  confine  themouse so you can capture him."
830 PRINT#4:PRINT#4,"   Do this as  fast  as  you can. The LOWEST score is the best."
840 PEN 2:LOCATE 5,23:PRINT "BEWARE, THIS MOUSE CAN GNAW !!!!"
850 LOCATE 10,25:PRINT "PRESS THE SPACE BAR.";
860 INK 1,14:INK 2,24:INK 3,15
870 WHILE INKEY$<>" ":WEND
880 CLS#4:RETURN
890 REM**DATA FOR TITLE******
900 DATA 214,32,32,32,32,215,32,32,214,143,215,32,32,214,32,215,32,32,214,143,215,32,32,214,143,215
910 DATA 143,215,32,32,214,143,32,32,143,32,143,32,32,143,32,143,32,32,213,210,32,32,32,143,210,32
920 DATA 143,213,215,214,212,143,32,32,143,32,143,32,32,143,32,143,32,32,32,208,215,32,32,143,208,32
930 DATA 213,32,213,212,32,212,32,32,213,143,212,32,32,213,143,212,32,32,213,143,212,32,32,213,143,212
940 REM***INKEYS/JOY m/c ROUTINE***
950 CALL ad2+1:in=PEEK(ad2):man=248
960 PEN 1:LOCATE x%,y%:PRINT CHR$(203)
970 IF in=8 OR in=242 THEN x%=x%-1:man=250
980 IF in=9 OR in=243 THEN x%=x%+1:man=251
990 IF in=11 OR in=240 THEN y%=y%-1:man=249
1000 IF in=10 OR in=241 THEN y%=y%+1:man=249
1010 IF x%>39 THEN x%=39
1020 IF x%<2  THEN x%=2
1030 IF y%>23 THEN y%=23
1040 IF y%<2 THEN y%=2
1050 PEN 2:LOCATE x%,y%:PRINT CHR$(man):PEN 0:SOUND 1,200,1,2,0,0,0
1060 RETURN
1070 REM***POKE INKEYS m/c***
1080 c=INT(ad2/256):b=ad2-256*c
1090 RESTORE 1160
1100 FOR n=ad2 TO ad2+13
1110 READ d:IF d=999 THEN d=b
1120 IF d=998 THEN d=c
1130 POKE n,d
1140 NEXT n
1150 RETURN
1160 DATA 0,62,0,50,999,998,205,27
1170 DATA 187,208,50,999,998,201
1340 REM*****END ROUTINE*******
1350 CLS:INK 1,25:PEN 1:LOCATE 1,13:PRINT "Type R to RUN again or E to END program.":SPEED KEY 10,5
1360 x$=UPPER$(INKEY$):IF x$="E" THEN END
1370 IF x$="R" THEN RUN
1380 GOTO 1360