! Program ROBOT ! A Game of Chase. ! ! 05/12/92 ! EQU CTRLX TO 24, ESCAPE TO 27 EQU AM TO CHAR(254), VM TO CHAR(253), BELL TO CHAR(7), PGBRK TO CHAR(12) BREAK OFF DIM BOARD(42,68), B(5), R1(50), C1(50) ROBOT = 20; MAT BOARD = 1; MAT B = ''; WIN = 0; LOSE = 0 RB = ''; MOVE = ''; CS = @(-1); SPOT = ' #%O+' BLACK=16;RED=17;GREEN=18;YELLOW=19;BLUE=20;PURPLE=21;BG=22;WHITE=23 *COLOR=CHAR(BLACK):CHAR(RED):CHAR(BLUE):CHAR(PURPLE):CHAR(YELLOW) COLOR=@(-48):@(-44):@(-47):@(-43):@(-45) VAR2 = '+'; TRB = 20; TRD = '' PRINT 'DO YOU WANT INSTRUCTIONS (Y/N) ':; INPUT ANS IF ANS='END' THEN STOP IF ANS[1,1] = 'Y' THEN GOSUB 1000 5 PRINT 'ENTER HOW MANY TO INCREMENT (2 OR 5) ':; INPUT CNT IF CNT # 2 AND CNT # 5 THEN GOTO 5 6 PRINT '1 - NOVICE 2 - PRO 3 - EXPERT':; INPUT ANS IF ANS < 1 OR ANS > 3 THEN GOTO 6 ON ANS GOTO 7, 8, 9 7 RATE = 200; HOLES = 40; GOTO 10 8 RATE = 175; HOLES = 30; GOTO 10 9 RATE = 150; HOLES = 20 10 RL = ROBOT; B(2) = RATE; B(3) = ROBOT; B(4) = HOLES; B(5) = 1 PRINT CS:@(25,12):' WAIT SUCKER ' PRINT @(25,13) :" I'M PREPARING YOUR DOOM " FOR X = 2 TO 5 FOR Y = 1 TO B(X) 20 R = INT(RND(22)); IF R < 1 THEN GOTO 20 30 C = INT(RND(69)); IF C < 1 THEN GOTO 30 IF BOARD(R,C) # 1 THEN GOTO 20 ELSE BOARD(R,C) = X IF X = 5 THEN R9 = R; C9 = C IF X # 3 THEN GOTO 40 ELSE R1(Y) = R; C1(Y) = C 40 NEXT Y NEXT X; GOSUB 250 50 PRINT @(76,7):; INPUT MOVE,1:; TRY = TRY + 1 IF MOVE = 'C' THEN GOSUB 300; GOTO 50 IF NOT(NUM(MOVE)) THEN GOTO 50 IF MOVE # INT(MOVE) OR MOVE < 0 OR MOVE > 9 THEN GOTO 50 IF MOVE = 5 THEN GOTO 61 IF MOVE = 0 THEN GOTO 150 * CHANGE MOVES BACK TO INTERNAL LOGIC BEGIN CASE CASE MOVE=1 MOVE=7 CASE MOVE=2 MOVE=6 CASE MOVE=3 MOVE=5 CASE MOVE=4 MOVE=8 CASE MOVE=6 MOVE=4 CASE MOVE=7 MOVE=1 CASE MOVE=8 MOVE=2 CASE MOVE=9 MOVE=3 END CASE BOARD(R,C) = 1; PRINT @(C,R):' ' R = R - (MOVE < 4) + (MOVE > 4) - (MOVE = 8) C = C + (MOVE < 6 AND MOVE > 2) - (MOVE > 6) - (MOVE = 1) IF R = 0 OR R = 22 OR C = 0 OR C = 69 THEN GOTO 120 * IF R = 0 OR R = 43 OR C = 0 OR C = 69 THEN GOTO 120 ON BOARD(R,C) GOTO 60, 120, 140, 130 60 BOARD(R,C) = 5; PRINT @(C,R):@(-45):'+' 61 * K = 1 FOR X = 1 TO ROBOT E = R1(X) IF NOT(E) THEN GOTO 100 ELSE F = C1(X) BOARD(E,F) = 1; PRINT @(F,E):' ' IF R - E = 0 THEN A9 = 0; GOTO 70 IF R - E > 0 THEN A9 = 1 ELSE A9 = -1 70 E = E + A9 IF C - F = 0 THEN A9 = 0; GOTO 80 IF C - F > 0 THEN A9 = 1 ELSE A9 = -1 80 F = F + A9 Z = BOARD(E,F) Y = Z + 2 * (Z = 1) - (Z = 2) IF Z = 5 THEN GOTO 140 90 BOARD(E,F) = Y; PRINT @(F,E):COLOR[(BOARD(E,F)-1)*3+1,3]:SPOT[BOARD(E,F),1] R1(X) = (Z = 1) * E; C1(X) = F IF R1(X) = 0 THEN RL = RL - 1; TRD =TRD + 1 IF Y # 3 THEN GOTO 100 K = 0 100 NEXT X IF K THEN GOTO 110 ELSE PRINT @(74,17):RL 'R##'; GOTO 50 110 PRINT @(-40):@(-41):CS:@(14,10):'GOOD MANEUVERING ! YOU DESTROYED ALL ':ROBOT:' ROBOTS !!!' WIN = WIN + 1; IF ROBOT = 50 THEN GOSUB 2000 IF ROBOT < 50 THEN ROBOT = ROBOT + CNT GOTO 170 120 VAR1 = '#'; GOSUB 500 PRINT @(-40):@(-41):CS:@(20,10):'ZZZZZZZZZZZZTTTT YOU TOUCHED THE FENCE'; GOTO 170 130 VAR1 = 'O'; GOSUB 500 PRINT @(-40):@(-41):CS:@(17,10):'AAAIIIIYYYYEEEEEEE YOU FELL INTO A HOLE'; GOTO 170 140 R = E; C = F; VAR1 = '%'; GOSUB 500 PRINT @(-40):@(-41):CS:@(32,10):'A ROBOT GOT YOU':RB:RB:RB:RB; GOTO 170 150 IF TRY <= 1 THEN MAT BOARD = 1; MAT B = ''; TRY = ''; GOTO 10 LOSE = LOSE + 1 160 PRINT @(-40):@(-41):CS:@(29,10):'SORRY TO SEE YOU QUIT' 170 AVER = WIN / (WIN + LOSE) IF AVER < .25 THEN TEXT = 'POOR'; GOTO 175 IF AVER >= .25 AND AVER < .5 THEN TEXT = 'FAIR'; GOTO 175 IF AVER >= .5 AND AVER < .75 THEN TEXT = 'GOOD' ELSE TEXT = 'EXCELLENT' 175 PRINT @(28,11):'YOUR AVERAGE WAS ':AVER PRINT @(20,12):'WHICH GIVES YOU A RATING OF ':TEXT; PRINT PRINT @(23,13):'YOU DESTROYED ':TRD:' ROBOTS OUT OF ':TRB PRINT @(25,16):'DO YOU WANT TO TRY AGAIN ':; INPUT ANS 180 IF ANS[1,1]# 'N' THEN TRB=TRB+ROBOT; MAT BOARD=1; MAT B=''; TRY=''; GOTO 10 AVER = WIN / (WIN + LOSE) IF AVER < .25 THEN TEXT = 'POOR'; GOTO 190 IF AVER >= .25 AND AVER < .5 THEN TEXT = 'FAIR'; GOTO 190 IF AVER >= .5 AND AVER < .75 THEN TEXT = 'GOOD' ELSE TEXT = 'EXCELLENT' 190 PRINT @(-40):@(-41):CS:@(28,10):'YOUR AVERAGE WAS ':AVER PRINT @(23,11):'WHICH GIVES YOU A RATING OF ':TEXT PRINT @(21,12):'YOU DESTROYED ':TRD:' ROBOTS OUT OF ':TRB PRINT @(30,16):'TRY AGAIN SOMETIME'; RQM;RQM;RQM CRT @(-1) STOP 250 * PRINT BOARD PRINT @(-40):@(-41):CS:@(-44):@(0,0):STR('#',70) FOR R = 1 TO 21 PRINT @(0,R):@(-44):'#': FOR C = 1 TO 68 PRINT COLOR[(BOARD(R,C)-1)*3+1,3]: PRINT SPOT[BOARD(R,C),1]: NEXT C PRINT @(C,R):@(-44):'#' NEXT R PRINT @(0,22):@(-44):STR('#',70) PRINT @(72,1):'7 8 9':@(72,3):'4 5 6':@(72,5):'1 2 3' PRINT @(71,7):'MOVE':@(72,9):'# FENCE':@(72,10):'O HOLE' PRINT @(72,11):'% ROBOT':@(72,12):'+ YOU' PRINT @(72,15):'ROBOTS':@(73,16):'LEFT':@(71,20):'WINS':@(71,21):'LOSES' PRINT @(77,20):WIN:@(77,21):LOSE:@(74,17):RL R = R9; C = C9; TRY = ''; PROMPT '' ECHO OFF PRINT @(C9-1,R9):; INPUT DUM;ECHO ON; IF C9 = 1 THEN GOTO 260 PRINT @(C9-1,R9):COLOR[(BOARD(R9,C9-1)-1)*3+1,3]:SPOT[BOARD(R9,C9-1),1] 260 * PROMPT CHAR(7) RETURN 300 * ERASE AND HOLD R9 = R; C9 = C; PROMPT ':' PRINT @(-40):@(-41):CS:; INPUT ANS IF ANS = 'E' THEN PRINT 'WHAAAT?'; ENTER MENU IF ANS = 'R' THEN GOSUB 250; RETURN GOTO 300 RETURN 500 * OUCH FOR I = 1 TO 100 IF I/2 = INT(I/2) THEN PRINT @(C,R):VAR1 ELSE PRINT @(C,R):VAR2 NEXT I LOSE = LOSE + 1 RETURN 1000 * INSTRUCTIONS PRINT @(-40):@(-41):CS PRINT ' THIS IS A GAME OF CHASE. YOU WILL START BY BEING CHASED BY 20 ROBOTS.' PRINT 'YOUR TASK IS TO ELUDE AND DESTROY ALL THE ROBOTS. YOU DESTROY' PRINT 'ROBOTS BY LEADING THEM INTO HOLES "O", RUNNING THEM INTO FENCES "#"' PRINT 'OR BY LEADING TWO ROBOTS INTO EACH OTHER WHICH WILL DESTROY ONE OF' PRINT 'THEM. EACH TIME YOU WIN THE NUMBER OF ROBOTS WILL INCREASE BY 2 OR 5.' PRINT PRINT ' IF AT THE BEGINNING OF THE GAME YOU DETERMINE THERE IS NO POS-' PRINT 'SIBLE WAY OF WINNING YOU MAY ENTER A "0" FOR YOUR MOVE AND THE GAME' PRINT 'WILL RESTART. BUT, IF YOU SHOULD MAKE A MOVE AND THEN ENTER A "0"' PRINT 'IT WILL COUNT AS A LOSS.' PRINT PRINT PRINT ' PRESS TO RETURN ':; INPUT DUM RETURN 2000 * DECREMENT FENCES AND HOLES IF RATE > 150 THEN RATE = RATE - 25; HOLES = HOLES - 10 ROBOT = 20 - CNT RETURN END