Chomper


This is an interesting variation of a game we caught sight of in an arcade a while back. It's got a maze, power pills, a ghost and things that go chomp in the night. The first program defines the graphics, and then CHAINs the main program, which must of course be the next program on the tape.

    1  REM**CHOMPER**  **BBC VERSION** GRAPHI
CS AND INSTRUCTIONS SECTION** MAIN PROGRAM TO
 BE LOADED AUTOMATICALLY FROM THIS SECTION**
   10 REM CONVERTED TO 32K BBC MICRO BY C.R.T
ANNER
   30 MODE7:VDU 23;8202;0;0;0;:HIMEM=&2500:AD
DRESS=&2500:DIM A$(2)
   40 VDU 23,224,0,-1,0,0,0,0,-1,0
   50 VDU 23,225,66,66,66,66,66,66,66,66
   60 VDU 23,226,0,24,36,66,66,66,66,66
   70 VDU 23,227,66,66,66,66,66,36,24,0
   80 VDU 23,228,0,248,4,2,2,4,248,0
   90 VDU 23,229,0,31,32,32,64,32,31,0
  100 VDU 23,230,66,65,64,32,32,24,7,0
  110 VDU 23,231,0,7,24,32,32,64,65,66
  120 VDU 23,232,66,130,2,4,4,24,224,0
  130 VDU 23,233,0,224,24,4,4,2,130,66
  140 VDU 23,234,66,129,0,0,0,0,-1,0
  150 VDU 23,235,0,-1,0,0,0,0,129,66
  160 VDU 23,236,60,126,-1,-1,-1,-1,126,60
  170 VDU 23,237,60,126,240,224,224,240,126,6
0
  180 VDU 23,238,60,126,15,7,7,15,126,60
  190 VDU 23,239,60,126,-1,231,195,195,66,0
  200 VDU 23,240,0,66,195,195,231,-1,126,60
  210 VDU 23,241,60,126,219,201,-1,-1,-1,170
  220 VDU 23,242,0,242,133,229,21,149,98,0
  230 VDU 23,243,0,0,0,24,24,0,0,0
  240 FOR A=0 TO 2:A$(A)="":FOR B=1 TO 30:REA
D C:A$(A)=A$(A)+CHR$(C):NEXT:NEXT
  250 PRINT'':FOR A=0 TO 2:PRINT TAB(4);A$(A)
'TAB(4);A$(A):NEXT
  260 PRINT "       @   P a u l   S t a n l e
 y"
  270 PRINT''"A standard";CHR$(129);"pacman-t
ype";CHR$(135);"game, complete   with";CHR$(1
29);"power-pills";CHR$(135);"which when eaten
 give  you the chance to eat the ghost."
  280 PRINT'CHR$(133);"  Your controls are:-"
  290 PRINT'CHR$(134);"Z";CHR$(132)"....Left"
;TAB(20);CHR$(134);"X";CHR$(132)"....Right"'C
HR$(134);"*";CHR$(132)"....Up";TAB(20);CHR$(1
34);"?";CHR$(132)"....Down"
  300 PRINT'"Please wait 30 seconds..."
  310 GOSUB 380
  320 FOR a=1 TO 150 STEP 5:SOUND 1,-15,a*50,
1:NEXT
  330 MODE 1:VDU 23;8202;0;0;0;28,4,27,35,4:H
IMEM=&2500:ADDRESS=&2500
  340 *FX 9,2
  350 *FX 10,2
  360 PRINT "NOW LOADING MAIN GAME"
  370 CHAIN ""
  380 A$(0)="haaaaaaaaaaaaaaaaaaaaaaaj       
b                       b       b falae c fal
ae c falae b       b   b   b   d   b   b   b 
      b c b c b c   c b c b c b       b b b b
 b b c b b b b b b       b b d d b d b d b d 
d b b       b "
  390 A$(1)="b     b   b   b     b b       b 
gaaaaai fakae gaaaaai b    faai              
         gaae      faaaaaaaaaaaaaaaaaaae     
 faaj                       haae    b faaalaa
ae c faaalaaae b       b     b     b     b   
  b       b fa"
  400 A$(2)="e b c c d c c b fae b       b   
  b b b   b b b     b       b c fai d gaaai d
 gae c b       b b                   b b     
  b gaaaaaaaaaaaaaaaaaaai b       b          
             b       gaaaaaaaaaaaaaaaaaaaaaaa
i"
  410 PROCconvert
  420 A$(0)="haaaaaaaaaaaaaaaaaaaaaaaj       
b                       b       b haaaj c c c
 c c haaaj b       b b   b b b d b b b   b b 
      b d c b b b   b b b c d b       b   b b
 b b c b b b b   b       b fai d b d b d b d 
gae b       "
  430 A$(1)="b       b   b   b       b       
b faaaaai fakae gaaaaae b    faai            
           gaae      fae faaae c faaae fae   
   faaj           b           haae    b faaaa
aj c d c haaaaae b       b       b b   b b   
    b       "
  440 A$(2)="b fe fj b gaaai b he fe b       
b     b b       b b     b       b fae b d haa
aj d b fae b       b     b   b   b   b     b 
      b faaai fai c gae gaaae b       b      
     b           b       gaaaaaaaaaaakaaaaaaa
aaaai"
  450 PROCconvert
  460 A$(0)="aaaaaaaaaaaaaaaaaaaaaaaaj       
b                       b       b haae faaae 
faaae faaj b       b b                   b b 
      b b he faaae faaae fj b b       b d b  
             b d b       b   d  fe fe fe fe  
d   b       "
  470 A$(1)="b c                   c b       
b gaae faaae faaae faai b    faai            
           gaae      faae faaae faaae faae   
   faaj                       haae    b haae 
faaae faaae faaj b       b d                 
  d b    "
  480 A$(2)="   b   c  fe fe fe fe  c   b    
   b c b               b c b       b b ge faa
ae faaae fi b b       b b                   b
 b       b gaae faaae faaae faai b       b   
                    b       gaaaaaaaaaaaaaaaa
aaaaaaai"
  490 PROCconvert
  500 A$(0)="haaaaaaaaaaaaaaaaaaaaaaaj       
b                       b       b c fj    haa
aj    haae b       b b  b    b   b    b    b 
      b b  b    d   d    b    b       b b fi 
            b    b       b b       haaaj    b
    b       "
  510 A$(1)="b b       b   b     b   b       
b d       d   d    gaae b     faai           
           gaae      faae fe faaae fe faae   
   faaj                       haae    b c c c
 c haaaj he    c b       b b b b b b   b b   
  b b       "
  520 A$(2)="b b d d b d   d b c   b b       
b b     b       b d c b b       b b     b haa
aj b   d b b       b b     b b   b b     b b 
      b d     d d   d d    fi b       b      
                 b       gaaaaaaaaaaaaaaaaaaa
aaaai"
  530 PROCconvert
  540 RETURN
  550 DEFPROCconvert
  560 FOR B%=0 TO 2:D%=LEN(A$(B%)):FOR A%=1 T
O D%:E%=ASC(MID$(A$(B%),A%,1)):IF E%>32 THEN 
?ADDRESS=E%+127 ELSE ?ADDRESS=32
  570 ADDRESS=ADDRESS+1:NEXT:NEXT:ENDPROC
  580 DATA 141,145,154,54,163,164,32,53,32,53
,32,54,163,52,32,61,184,53,32,55,163,180,32,5
5,163,33,32,55,163,52,141,147,154,53,32,48,32
,55,163,53,32,53,32,53,32,53,32,53,32,55,163,
32,32,55,163,32,32,55,231,32,141,147,154,162,
163,32,32,33,32
  590 DATA 33,32,34,163,32,32,33,32,33,32,33,
32,32,32,163,163,33,32,33,32,33

    1  REM**CHOMPER BBC VERSION** **MAIN PROG
RAM**
   10 hs=0:CLS
   20 m=1:sc=0:li=3
   30 COLOUR 1:PRINT TAB(4,1);:FOR x=&2500+(6
65*m) TO &2798+(665*m):PRINTCHR$(?x);:NEXT
   40 COLOUR 2:PRINT TAB(5,2);"*";TAB(27,2);"
*";TAB(5,20);"*";TAB(27,20);"*"
   50 c1=0:c=5:FOR Y%=2 TO 20:FOR X%=5 TO 27
   60     IF FNscreen(X%,Y%)=32 THEN PRINT TA
B(X%,Y%);CHR$243:c=c+1
   70 NEXT:NEXT
   80 PRINT TAB(1,11);" ";CHR$(243);CHR$(243)
;CHR$(243);TAB(28,11);CHR$(243);CHR$(243);CHR
$(243);" "
   90 x=16:y=5:y1=y:x1=x:r=0:p$=CHR$(239):f=1
6:g=x:g1=g:f1=f:dg=-1:df=0
  100 PROCover(g,f,241)
  110 PRINT TAB(0,0);"Score:";TAB(17,0);"High
-score:";hs
  120 IF li>1 THEN A$=CHR$(237) ELSE A$="    
 "
  130 IF li>2 THEN A$=A$+" "+CHR$(237)
  140 PRINT TAB(11,0);"   ";TAB(11,0);A$
  150 IF INKEY(-67) THEN A=FNscreen(x+1,y):IF
 A<65 OR A=241 OR A=145 OR A=243 OR A=147 THE
N x=x+1:p$=CHR$237:GOTO 190
  160 IF INKEY(-98) THEN A=FNscreen(x-1,y):IF
 A<65 OR A=241 OR A=145 OR A=243 OR A=147 THE
N x=x-1:p$=CHR$238:GOTO 190
  170 IF INKEY(-105) THEN A=FNscreen(x,y+1):I
F A<65 OR A=241 OR A=145 OR A=243 OR A=147 TH
EN y=y+1:p$=CHR$239:GOTO 190
  180 IF INKEY(-73) THEN A=FNscreen(x,y-1):IF
 A<65 OR A=241 OR A=145 OR A=243 OR A=147 THE
N y=y-1:p$=CHR$240:GOTO 190
  190 IF FNscreen(x,y)=42 THEN SOUND 1,-15,80
,1:r=1:df=-df:dg=-dg
  200 A=FNscreen(x,y):IF A=243 OR A=147 THEN 
PRINT TAB(x1,y1);CHR$236:FOR A=1 TO 20:NEXT:s
c=sc+1:c1=c1+1:PRINT TAB(6,0);sc:SOUND 1,-8,1
40,1:IF c1=c THEN GOTO 630
  210 IF y<>11 THEN 230
  220 IF x=0 THEN x=x+30 ELSE IF x=31 THEN x=
x-30
  230 p=x:q=y:IF r<>0 THEN p=31-x:q=21-y:r=r+
1:IF r=50 THEN SOUND 1,-15,80,1:r=0
  240 PRINT TAB(x1,y1);" ";TAB(x,y);p$
  250 y1=y:x1=x
  260 IF y<>f OR x<>g THEN 280
  270 IF r<>0 THEN GOTO 580 ELSE GOTO 460
  280 f1=f:g1=g:g=g+dg:f=f+df
  290 A=FNscreen(g,f):IF (A<=235 AND A>=224) 
O (A<=139 AND A>=128) THEN GOTO 390
  300 IF f1<>q AND df=0 THEN ELSE 320
  310 A=FNscreen(g1,f1-(f1<=q)+(f>q)):IF (A<=
235 AND A>=224) OR (A<=139 AND A>=128) THEN E
LSE 400
  320 IF g1<>p AND dg=0 THEN ELSE 340
  330 A=FNscreen(g1-(g1<=p)+(g1>p),f1):IF (A<
=235 AND A>=224) OR (A<=139 AND A>=128) THEN 
ELSE 430
  340 IF f<>11 THEN GOTO 360
  350 IF g=1 THEN g=g+30 ELSE IF g=31 THEN g=
g-30
  360 PROCover(g1,f1,241):PROCover(g,f,241)
  370 IF y<>f OR x<>g THEN 150
  380 IF r<>0 THEN GOTO 580 ELSE GOTO 460
  390 IF dg=0 THEN GOTO 430
  400 IF df=0 THEN df=-(f1<=q)+(f1>q):dg=0:g=
g1:f=f1+df
  410 A=FNscreen(g,f):IF (A<=235 AND A>=224) 
O (A<=139 AND A>=128) THEN df=-df:f=f1+df
  420 GOTO 340
  430 dg=-(g1<=p)+(g1>p):df=0:f=f1:g=g1+dg
  440 A=FNscreen(g,f):IF (A<=235 AND A>=224) 
OR (A<=139 AND A>=128) THEN dg=-dg:g=g1+dg
  450 GOTO 340
  460 FOR f=1 TO 15
  470   PRINT TAB(x,y);CHR$237:SOUND 1,-15,50
+f,1:FOR A%=1 TO 300:NEXT
  480   PRINT TAB(x,y);CHR$239:SOUND 1,-15,52
+f,1:FOR A%=1 TO 300:NEXT
  490   PRINT TAB(x,y);CHR$238:SOUND 1,-15,54
+f,1:FOR A%=1 TO 300:NEXT
  500   PRINT TAB(x,y);CHR$240:SOUND 1,-15,56
+f,1:FOR A%=1 TO 300:NEXT
  510 NEXT f
  520 PRINT TAB(x,y);" ":li=li-1:IF li>0 GOTO
 90
  530 CLS:PRINT TAB(0,7);"You scored ";sc;" p
oints."
  540 IF sc>hs THEN hs=sc:PRINT TAB(0,10);"We
ll done that's the new best   score!!!":GOTO 
560
  550 PRINT TAB(0,10);"The high-score is ";hs
;"."
  560 PRINT TAB(0,23);"Press any key to play 
again.";:*FX 15,1
  570  IF INKEY$(1000)="" THEN 570 ELSE CLS:G
OTO 20
  580 FOR f=1 TO 5:FOR g=2 TO 7:PRINT TAB(x,y
);CHR$242:SOUND 1,-15,50+g+(f*5),1:NEXT g:NEX
T f
  590 r=0
  600 sc=sc+50:PRINT TAB(6,0);sc
  610 f=16:g=16:g1=g:f1=f:dg=-1:df=0:PROCover
(g,f,241)
  620 GOTO 150
  630 VDU 19,1,9,0,0,0:PRINT TAB(x1,y1);" "
  640 FOR f=0 TO 255 STEP 4:SOUND 1,-15,f,1:N
EXT f
  650 FOR f=1 TO 3000:NEXT f
  660 VDU 19,1,1,0,0,0
  670 CLS:m=m+1:IF m=4 THEN m=0
  680 GOTO 30
  690 DEFFNscreen(X%,Y%)
  700 VDU 31,X%,Y%:A%=135:C%=USR(&FFF4)
  710 C%=(C% AND &FFFF) DIV &100
  720 =C%
  730 DEFPROCover(X%,Y%,C%)
  740 VDU 5:GCOL3,1
  750 MOVE 128+(X%*32),1023-(128+(Y%*32))
  760 PRINT CHR$(C%);
  770 VDU4:ENDPROC