NEW'GAME:
DRAG = REF'DRAG
DOTS = 0
POWER = 0
PAC = "<"
PRINT TAB(-1,11);
LOOKUP "PACMAN.DAT", I
IF I=0 THEN GOTO LOAD'SCREEN
OPEN #1, "PACMAN.DAT", INPUT
INPUT LINE #1, CHAMP
INPUT #1, HIGH'SCORE
CLOSE #1
LOAD'SCREEN:
PRINT TAB(-1,29);
RESTORE
PRINT TAB(-1,0);
PRINT TAB(-1,11);
FOR I = 1 TO 20
READ TEXT
FOR J = 1 TO 70
CHAR = MID(TEXT,J,1)
CALL DISPLAY
S(I,J) = CHAR
NEXT J
PRINT
NEXT I
PRINT TAB(-1,12);
PRINT TAB(22,1); "< < < < <";
PRINT TAB(1,33); " PAC-MAN ";
FOR I = 1 TO 4
Y(I) = 3
X(I) = 35
PRINT TAB(Y(I),X(I)); "@";
NEXT I
IF HIGH'SCORE=0 THEN GOTO RESET'USER
PRINT TAB(22,40); "High Score"; HIGH'SCORE; "by "; CHAMP;
RESET'USER:
Y = 19
X = 35
GOTO PUT'PAC
USER'STROBE:
XCALL PACMAN, CHAR
IF CHAR="" THEN GOTO MOVE'GHOSTS
IF CHAR=CHR(27) THEN GOTO END'GAME
IF CHAR=CHR(11) THEN GOTO UP
IF CHAR=CHR(10) THEN GOTO DOWN
IF CHAR=CHR(8) THEN GOTO LEFT
IF CHAR=CHR(12) THEN GOTO RIGHT
IF CHAR="H" THEN GOTO HOLD
GOTO MOVE'GHOSTS
HOLD: PRINT TAB(-1,12);
PRINT TAB(1,20); "HOLD";
HOLD2: XCALL PACMAN, CHAR
IF CHAR="" THEN GOTO HOLD2
PRINT TAB(-1,11);
PRINT TAB(1,20); "----";
GOTO USER'STROBE
UP: IF S(Y-1,X)="*" THEN GOTO MOVE'GHOSTS
CALL REMOVE'PAC
Y = Y-1
PAC = "V"
GOTO PUT'PAC
DOWN: IF S(Y+1,X)="*" THEN GOTO MOVE'GHOSTS
CALL REMOVE'PAC
Y = Y+1
PAC = "^"
GOTO PUT'PAC
LEFT: IF S(Y,X-2)="*" THEN GOTO MOVE'GHOSTS
CALL REMOVE'PAC
X = X-2
PAC = ">"
IF X<3 THEN X = 67
GOTO PUT'PAC
RIGHT: IF S(Y,X+2)="*" THEN GOTO MOVE'GHOSTS
CALL REMOVE'PAC
X = X+2
PAC = "<"
IF X>67 THEN X = 3
GOTO PUT'PAC
PUT'PAC:
PRINT TAB(-1,12);
PRINT TAB(Y,X-1); TAB(-1,33); PAC;
IF Y=11 AND X=35 THEN SCORE = SCORE+FRUIT'FLAG : CALL PRINT'SCORE :&
CALL REMOVE'FRUIT
FOR I = 1 TO 4
IF Y(I)=Y AND X(I)=X AND POWER>0 THEN Y(I) = 3 : X(I) = 35 :&
SCORE = SCORE+200 : CALL PRINT'SCORE
NEXT I
IF POWER>0
IF S(Y,X)="." THEN GOTO DOT
IF S(Y,X)="o" THEN GOTO POWER'DOT
GOTO MOVE'GHOSTS
DOT: S(Y,X) = " "
SCORE = SCORE+10
CALL PRINT'SCORE
DOTS = DOTS-1
IF DOTS=0 THEN GOTO WIN
IF DOTS<80 THEN DRAG = 4
IF DOTS<60 THEN DRAG = 3
IF DOTS<40 THEN DRAG = 2
IF DOTS<20 THEN DRAG = 1
REM PRINT CHR(7);
GOTO MOVE'GHOSTS
MOVE'GHOSTS:
FRUIT = FRUIT+0.25
IF INT(FRUIT/1000)=FRUIT/1000 THEN CALL CREATE'FRUIT
IF INT(FRUIT/1900)=FRUIT/1900 THEN CALL REMOVE'FRUIT
IF INT(RND(0)*DRAG)<>0 THEN GOTO USER'STROBE
IF POWER=1 THEN GOTO END'POWER
CUR = CUR+1
IF CUR>4 THEN CUR = 1
IF POWER>0 THEN POWER = POWER-1 : GOTO RANDOM'MOVEMENT
GOTO DELIBERATE'MOVEMENT
CREATE'FRUIT:
IF FRUIT'FLAG>0 THEN RETURN
FRUIT'FLAG = INT(FRUIT/2)
PRINT TAB(-1,12);
PRINT TAB(11,35);
IF GRAPH="Y" THEN PRINT TAB(-1,23); "H"; TAB(-1,24); ELSE PRINT "%";
RETURN
REMOVE'FRUIT:
IF FRUIT'FLAG=0 THEN RETURN
FRUIT'FLAG = 0
PRINT TAB(-1,11);
PRINT TAB(11,35); S(11,33);
RETURN
END'POWER:
PRINT CHR(7); CHR(7);
POWER = 0
DELIBERATE'MOVEMENT:
R = Y(CUR)
C = X(CUR)
IF Y<R THEN R = R-1
IF Y>R THEN R = R+1
IF X<C THEN C = C-2
IF X>C THEN C = C+2
IF R=Y AND C=X THEN GOTO RANDOM'MOVEMENT
IF S(R,C)<>"*" THEN GOTO MOVE'GHOST
RANDOM'MOVEMENT:
R = Y(CUR)
C = X(CUR)
I = INT(RND(0)*4)
IF I=0 THEN R = R-1
IF I=1 THEN R = R+1
IF I=2 THEN C = C-2
IF I=3 THEN C = C+2
IF S(R,C)="*" THEN GOTO RANDOM'MOVEMENT
MOVE'GHOST:
PRINT TAB(-1,12);
IF POWER=0 THEN PRINT TAB(R,C-1); TAB(-1,33); "@"; ELSE &
PRINT TAB(R,C-1); TAB(-1,32); "@";
PRINT TAB(-1,11);
PRINT TAB(Y(CUR),X(CUR)-1); TAB(-1,33); S(Y(CUR),X(CUR));
Y(CUR) = R
X(CUR) = C
IF R=Y AND C=X AND POWER=0 THEN GOTO EAT'HIM'UP
GOTO USER'STROBE
WIN: PRINT CHR(7);
SCORE = SCORE+5000
IF REF'DRAG>0 THEN REF'DRAG = REF'DRAG-1
HALF'TIME:
PRINT TAB(-1,12);
FOR I = 2 TO 79
PRINT TAB(23,I); "<";
PRINT TAB(23,I-1); " ";
FOR J = 1 TO 50
NEXT J
NEXT I
PRINT TAB(23,79); " ";
FOR I = 80 TO 1 STEP -1
PRINT TAB(23,I); "> ";
FOR J = 1 TO 50
NEXT J
NEXT I
PRINT TAB(23,1); " ";
GOTO NEW'GAME
EAT'HIM'UP:
PRINT CHR(7);
LIVES = LIVES-1
PRINT TAB(22,LIVES*2+1); " ";
IF LIVES>0 THEN GOTO RESET'USER
END'GAME:
IF SCORE<=HIGH'SCORE THEN GOTO EXIT
PRINT TAB(-1,12);
PRINT CHR(7); CHR(7); CHR(7);
PRINT TAB(23,1); "NEW HIGH SCORE! WHAT'S YOUR NAME? ";
INPUT LINE CHAMP
IF CHAMP="" THEN GOTO END'GAME
OPEN #1, "PACMAN.DAT", OUTPUT
PRINT #1, CHAMP
PRINT #1, SCORE
CLOSE #1
ERROR'TRAP:
PRINT TAB(23,1); TAB(-1,24); TAB(-1,12); TAB(-1,28);
IF ERR(0)<2 THEN END
PRINT TAB(-1,10); "*** ERROR IN 'PACMAN' LINE=0 FILE=0 ERROR ="; ERR(0);
PRINT "***"
END
EXIT: PRINT TAB(23,1); TAB(-1,24); TAB(-1,12); TAB(-1,28);
END
END
PRINT'SCORE:
PRINT TAB(1,70);
PRINT TAB(-1,12);
PRINT USING "######"; SCORE;
RETURN
DISPLAY:
IF GRAPH="Y" THEN GOTO GRAPHIC'DISPLAY
TEXT'DISPLAY:
IF INSTR(1,"|-+ABCD",CHAR)<>0 THEN CHAR = "*"
IF CHAR=" " THEN PRINT TAB(-1,33); ELSE PRINT CHAR;
IF CHAR="." OR CHAR="o" THEN DOTS = DOTS+1
RETURN
GRAPHIC'DISPLAY:
IF INSTR(1,"|-+ABCD",CHAR)=0 THEN GOTO TEXT'DISPLAY
PRINT TAB(-1,23);
IF CHAR="|" THEN PRINT TAB(-1,47); ! V
IF CHAR="-" THEN PRINT TAB(-1,46); ! "Z";
IF CHAR="A" THEN PRINT TAB(-1,40); ! "Q";
IF CHAR="B" THEN PRINT TAB(-1,38); ! "R";
IF CHAR="C" THEN PRINT TAB(-1,39); ! "S";
IF CHAR="D" THEN PRINT TAB(-1,41); ! "U";