-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathROBOT
161 lines (161 loc) · 6.03 KB
/
ROBOT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
* NAME ROBOT
DIM BOARD(21,68), B(5), R1(50), C1(50)
ROBOT = 20; MAT BOARD = 1; MAT B = ''; WIN = ''; LOSE = ''
RB = ''; MOVE = ''; CS = @(-1); SPOT = ' #%O+'
VAR2 = '+'; TRB = 20; TRD = ''
CRT 'DO YOU WANT INSTRUCTIONS (Y/N) ':; INPUT ANS,1
IF ANS[1,1] = 'Y' THEN GOSUB 1000
5 CRT 'ENTER HOW MANY TO INCREMENT (2 OR 5) ':; INPUT CNT,1
IF CNT # 2 AND CNT # 5 THEN GOTO 5
6 CRT '1 - NOVICE 2 - PRO 3 - EXPERT':; INPUT ANS,1
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
CRT CS:@(25,12):'PLEASE WAIT I AM BUSY COUNTING'
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 CRT @(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 = 5 OR MOVE < 0 OR MOVE > 9 THEN GOTO 50
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; CRT @(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
ON BOARD(R,C) GOTO 60, 120, 140, 130
60 BOARD(R,C) = 5; CRT @(C,R):'+'
K = 1
FOR X = 1 TO ROBOT
E = R1(X)
IF NOT(E) THEN GOTO 100 ELSE F = C1(X)
BOARD(E,F) = 1; CRT @(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; CRT @(F,E):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 CRT @(74,17):RL 'R##'; GOTO 50
110 CRT CS:@(14,10):'GOOD MANEUVERING ! YOU DESTROYED ALL ':ROBOT:' ROBOTS !!!'
WIN = WIN + 1; IF ROBOT = 50 THEN GOSUB 2000
IF WIN > LOSE AND ROBOT < 50 THEN ROBOT = ROBOT + CNT
GOTO 170
120 VAR1 = '#'; GOSUB 500
CRT CS:@(20,10):'ZZZZZZZZZZZZTTTT YOU TOUCHED THE FENCE'; GOTO 170
130 VAR1 = 'O'; GOSUB 500
CRT CS:@(17,10):'AAAIIIIYYYYEEEEEEE YOU FELL INTO A HOLE'; GOTO 170
140 R = E; C = F; VAR1 = '%'; GOSUB 500
CRT 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 CRT 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 CRT @(28,11):'YOUR AVERAGE WAS ':AVER
CRT @(23,12):'WHICH GIVES YOU A RATING OF ':TEXT; CRT
CRT @(23,13):'YOU DESTROYED ':TRD:' ROBOTS OUT OF ':TRB
CRT @(25,16):'DO YOU WANT TO TRY AGAIN ':; INPUT ANS,1
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 CRT CS:@(28,10):'YOUR AVERAGE WAS ':AVER
CRT @(23,11):'WHICH GIVES YOU A RATING OF ':TEXT
CRT @(21,12):'YOU DESTROYED ':TRD:' ROBOTS OUT OF ':TRB
CRT @(30,16):'TRY AGAIN SOMETIME'; STOP
250 * CRT BOARD
CRT CS:@(0,0):STR('#',70)
FOR R = 1 TO 21
CRT @(0,R):'#':
FOR C = 1 TO 68
CRT SPOT[BOARD(R,C),1]:
NEXT C
CRT @(C,R):'#'
NEXT R
CRT @(0,22):STR('#',70)
CRT @(72,1):'7 8 9':@(72,3):'4 + 6':@(72,5):'1 2 3'
CRT @(71,7):'MOVE':@(72,9):'# FENCE':@(72,10):'O HOLE'
CRT @(72,11):'% ROBOT':@(72,12):'+ YOU'
CRT @(72,15):'ROBOTS':@(73,16):'LEFT':@(71,20):'WINS':@(71,21):'LOSES'
CRT @(77,20):WIN:@(77,21):LOSE:@(74,17):RL
R = R9; C = C9; TRY = ''; PROMPT ' '
CRT @(C9-1,R9):; INPUT DUM; IF C9 = 1 THEN GOTO 260
CRT @(C9-1,R9):SPOT[BOARD(R9,C9-1),1]
260 * PROMPT CHAR(7)
RETURN
300 * ERASE AND HOLD
R9 = R; C9 = C; PROMPT ':'
CRT CS:; INPUT ANS
IF ANS = 'E' THEN CRT 'WHAAAT?'; STOP
IF ANS = 'R' THEN GOSUB 250; RETURN
GOTO 300
RETURN
500 * OUCH
FOR I = 1 TO 100
IF I/2 = INT(I/2) THEN CRT @(C,R):VAR1 ELSE CRT @(C,R):VAR2
NEXT I
LOSE = LOSE + 1
RETURN
1000 * INSTRUCTIONS
CRT CS
CRT ' THIS IS A GAME OF CHASE. YOU WILL START BY BEING CHASED BY 20 ROBOTS.'
CRT 'YOUR TASK IS TO ELUDE AND DESTROY ALL THE ROBOTS. YOU DESTROY'
CRT 'ROBOTS BY LEADING THEM INTO HOLES "O", RUNNING THEM INTO FENCES "#"'
CRT 'OR BY LEADING TWO ROBOTS INTO EACH OTHER WHICH WILL DESTROY ONE OF'
CRT 'THEM. EACH TIME YOU WIN THE NUMBER OF ROBOTS WILL INCREASE BY 2 OR 5.'
CRT
CRT ' IF AT THE BEGINNING OF THE GAME YOU DETERMINE THERE IS NO POS-'
CRT 'SIBLE WAY OF WINNING YOU MAY ENTER A "0" FOR YOUR MOVE AND THE GAME'
CRT 'WILL RESTART. BUT, IF YOU SHOULD MAKE A MOVE AND THEN ENTER A "0"'
CRT 'IT WILL COUNT AS A LOSS.'
CRT
CRT
CRT ' PRESS <RETURN> 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