100 REM ********************************
110 REM *                              *
120 REM *  PARA CP-400 COM 16 OU 64K   *
130 REM *          P A C M A N         *
140 REM *                              *
150 REM ********************************
160 REM *  ESTABELECE ALTA RESOLUCAO   *
170 CLS:PMODE4,1:PCLS:SCREEN1,1
180 CLEAR:DIM P(20,20),K$(4),B(20,20)
190 K$(1)=CHR$(9):K$(2)=CHR$(94):K$(3)=CHR$(8):K$(4)=CHR$(10)
200 X=8:Y=6:F=50
210 PCLS:IX=INT(256/(X+1)):IY=INT(182/(Y+1))
220 REM *    DESENHA A TELA DO JOGO    *
230 LINE(3,3)-(252,178),PSET,B
240 LINE(20,182)-(20,190),PSET:LINE-(F,190),PSET:LINE-(F,182),PSET:LINE-(20,182),PSET:PAINT(21,185),1
250 DZ=2+(X+Y)/10
260 N=X*Y
270 REM * POE AS CARGAS NA NOVA TELA   *
280 FOR I=1 TO X:FOR J=1 TO Y
290 CIRCLE(IX*I,IY*J),3:B(I,J)=0:IF RND(X+Y)=1 THEN P(I,J)=RND(23): PAINT(IX*I,IY*J),1:SOUND P(I,J)*10,1 ELSE P(I,J)=1:PLAY "L220;A"
300 NEXT J,I
310 DX=0:DY=0
320 X0=RND(X):Y0=RND(Y):X1=RND(X):Y1=RND(Y)
330 IF ABS(X0-X1)<4 OR ABS(Y0-Y1)<4 THEN 320
340 REM * DESENHA JOGADOR E INIMIGO    *
350 CIRCLE(X0*IX,Y0*IY),6: CIRCLE(X1*IX,Y1*IY),7: PAINT(X1*IX+4,Y1*IY),1: PAINT(X1*IX+4,Y1*IY),0
360 REM *    MANUTENCAO DAS CARGAS     *
370 IF P(X0,Y0)=0 THEN 390
380 FOR I=1 TO P(X0,Y0): PLAY "L170;" +STR$(INT(I/2+1)):F=F+1:LINE(F,182)-(F,190),PSET:NEXT I:T=T+P(X0,Y0):N=N-1:IF N=0 THEN X=X+1:Y=Y+1:GOTO 210
390 A=X0*IX:B=Y0*IY
400 IF P(X0,Y0)<>0 THEN PAINT (A,B),1:PAINT (A,B),0
410 P(X0,Y0)=0: GOSUB 420: GOTO 430
420 LINE(F,182)-(F,190),PRESET: F=F-1: PLAY"L150;C":IF F=19 THEN PRINT@168, "SEM COMBUSTIVEL":GOTO 690 ELSE RETURN
430 REM *     VERIFICA 0 TECLADO       *
440 A$=INKEY$: IF A$=" " THEN B(X0,Y0)=B(X0,Y0)+3: PLAY "V30;L200;O1;G": PSET(A+RND(5)-3,B+RND(5)-3): GOSUB 420: GOTO 440 ELSE IFA$="" THEN 490
450 IF A$=K$(1) THEN DX=1:DY=0:GOTO 490
460 IF A$=K$(2) THEN DY=-1:DX=0:GOTO 490
470 IF A$=K$(3) THEN DX=-1:DY=0:GOTO 490 
480 IF A$=K$(4) THEN DY=1:DX=0
490 X0=X0+DX: IF X0=0 THEN X0=X
500 IF X0>X THEN X0=1
510 Y0=Y0+DY: IF Y0=0 THEN Y0=Y
520 IF Y0>Y THEN Y0=1
530 REM *   DESENHA NOVAS POSICOES
540 CIRCLE(A,B),6,0: CIRCLE(X0*IX,YO*IY),6
550 A=X1*IX:B=Y1*IY: PAINT (A+4,B),0
560 IF P(X1,Y1)<>0 THEN CIRCLE (A,B),3
570 EX=SGN(X0-X1): EY=SGN(Y0-Y1)
580 IF RND(DZ)<=1 THEN 620
590 IF RND(2)=1 THEN IF X1+EX>0 AND X1+EX<=X THEN X1=X1+EX: GOTO 610
600 IF Y1+EY>0 AND Y1+EY<=Y THEN Y1=Y1+EY
610 A=X1*IX: B=Y1*IY
620 CIRCLE (A,B),7: PAINT (A+4,B),1
630 IF P(X1,Y1)>0 THEN P(X1,Y1)=1
640 REM *  VOCE FOI ATINGIDO ??      *
650 IF X1=X0 AND Y1=Y0 THEN FOR I=1 TO 1000:NEXT I:PRINT@ 266,"QUE PENA..": SOUND 1,30: GOTO 690
660 IF B(X1,Y1)<>0 THEN FOR I=1 TO B(X1,Y1)*40:PLAY "L200;A":NEXT I: DZ=DZ/B(X1,Y1): B(X1,Y1)=0
670 DZ=DZ+.1
680 GOTO 370
690 PRINT@ 325,"VOCE FEZ "T" PONTOS!!"
700 FOR ZZ=1 TO 4000:NEXT ZZ: RUN 

