SCREEN 9 GOSUB Colours RANDOMIZE TIMER GOSUB Randcolours 1 GOSUB Title 10 RANDOMIZE TIMER: GOSUB Colours: GOSUB Randcolours DIM cn(13), rm(13), r1(12), r2(12), temp(12, 12), EXPLET$(13) 11 DIM t1(12), t2(12), nr(12), ru(13), xsp(13), ysp(12), perm(12, 12, 7) DIM crown(12), obtemp(12) 12 i = 300 15 DATA 3,5,7,9,11,13,11,9,7,5,3: 17 FOR q = 2 TO 12: READ nr(q): NEXT: 18 DATA Blue,B,Red,R,Green,G,Yellow,Y 19 FOR q = 1 TO 4: READ col$(q), iscol$(q): NEXT Colstring$ = "BRGY" 20 DATA 100,10,140,38,180,66,220,94,260,122,300,150 DATA 340,178,380,206,420,234,460,262,500,290 FOR q = 2 TO 12: READ xsp(q), ysp(q): NEXT xsp(1) = 60: xsp(13) = 540 DATA BUGGER!,OH DEAR!,SOD IT!,DAMNATION!,*&%@#@%*!,HELL'S TEETH! DATA BUTTOCKS!,AAARRGHH!,NO NO NO!,BLOWN IT! DATA HARD LUCK!,LA GRAN PUTA!,MERDE ALORS! FOR q = 1 TO 13: READ EXPLET$(q): NEXT 25 CLS : COLOR crand(1): LOCATE 2, 20 PRINT "Playing against Computer or humans (C or H)? "; 26 GOSUB Pause: a$ = UCASE$(a$) 27 IF a$ <> "C" AND a$ <> "H" THEN 25 30 IF a$ = "C" THEN PRINT "Computer": GOTO Solstart 40 PRINT "Humans": LOCATE 4, 20: COLOR crand(2) PRINT "How many players (2 to 4)? "; GOSUB Pause: a$ = UCASE$(a$) 41 np = VAL(a$): IF np < 2 OR np > 4 THEN 40 PRINT a$ 50 COLOR crand(3): PRINT FOR q = 1 TO np PRINT TAB(20); "Player"; q; "'s name"; : INPUT opn$(q) opn$(q) = UCASE$(opn$(q)) NEXT Setup: PRINT : COLOR 1 PRINT TAB(20); "What colours would you like, "; FOR q = 1 TO np COLOR q + 2: PRINT iscol$(q); COLOR 1: IF q < 4 THEN PRINT ", "; NEXT: PRINT "?": PRINT FOR q = 1 TO np 55 PRINT TAB(23); opn$(q); " "; GOSUB Pause: c$ = UCASE$(a$) IF c$ <> "B" AND c$ <> "R" AND c$ <> "G" AND c$ <> "Y" GOTO 55 col = INSTR(Colstring$, c$) COLOR col + 2: PRINT col$(col); : COLOR 1 FOR j = 1 TO q - 1 IF c$ = scol$(j) THEN PRINT " Already taken": GOTO 55 NEXT j scol$(q) = c$: scol(q) = col: PRINT NEXT q: PRINT Orderplay: IF sg = 1 GOTO 90 FOR q = 1 TO np: bucket(q) = 1: NEXT: COLOR 1 PRINT TAB(21); "The order of play this game will be:": PRINT FOR q = 1 TO np Rand: x = INT(RND(1) * np + 1) IF bucket(x) = 0 GOTO Rand col(q) = scol(x) + 2: colour$(q) = col$(scol(x)): bucket(x) = 0: COLOR col(q): PRINT TAB(35); colour$(q); " "; opn$(x) pn$(q) = LEFT$(opn$(x), 9): pa$(q) = LEFT$(pn$(q), 1) fullpn$(q) = opn$(x) NEXT q: COLOR 1, 0 SLEEP 5 58 REM SLEEP 90 CLS : GOSUB Drawboard 95 FOR q = 2 TO 12: ru(q) = 0: NEXT pl = pl + 1: rt = 0: GOSUB 35000: pt = s2 - s1: IF pl > np THEN pl = 1 96 GOSUB Newturn: LOCATE 2, 6: c$ = c$(pl) 97 pc = pc(pl): cp$ = pa$(pl) IF pl = pe AND sg = 1 THEN colp = col(pe) COLOR colp: PRINT "MY TURN": GOTO 100 END IF 98 colp = col(pl): COLOR colp: LOCATE 2, 4: PRINT "YOUR TURN, "; pn$(pl) 100 FOR q = 1 TO 2000: NEXT: tt = 0: a = 0 FOR q = 1 TO 3: c(q) = 0: NEXT 110 GOSUB 10000: SLEEP 1 113 LOCATE 3, 6: COLOR colp IF sg = 1 AND pl = pe THEN PRINT "I THROW:": IF m = 3 THEN pt = pt + 1 END IF 114 IF sg = 1 AND pl = pe GOTO 120 115 LOCATE 3, 5: PRINT "YOU THROW:" 120 sx = 16: y = 45: col = 1 FOR q = 1 TO 4 130 dt(q) = INT(RND(1) * 6 + 1): tt = tt + dt(q) 140 x = sx + (q - 1) * 30: GOSUB Dicepic ON dt(q) GOSUB Dice1, Dice2, Dice3, Dice4, Dice5, Dice6 NEXT 150 dc(1) = dt(1) + dt(2) 160 dc(2) = dt(1) + dt(3) 170 dc(3) = dt(1) + dt(4) 180 FOR q = 1 TO 3 FOR j = q + 1 TO 4 190 IF dc(q) = 0 GOTO 230 200 IF dc(q) = dc(j) THEN dc(j) = 0 210 IF dc(q) = tt - dc(j) THEN dc(j) = 0 220 NEXT j 230 NEXT q 240 FOR q = 1 TO 3 250 IF dc(q) = 0 GOTO 300 260 pu(q, 1) = dc(q): pu(q, 2) = tt - dc(q) 300 NEXT SLEEP 1 400 LOCATE 17, 4: COLOR colp: PRINT "USABLE" LOCATE 18, 3: PRINT "NUMBERS:": PRINT 410 FOR q = 1 TO 3 uf = 0: ff = 0: af(q) = 0 420 FOR z = 1 TO 2 430 IF pu(q, z) = 0 GOTO 650 440 IF obtemp(pu(q, z)) > 0 OR crown(pu(q, z)) > 0 THEN pu(q, z) = 0: GOTO 650 END IF 450 IF m = 3 AND rm(pu(q, z)) = 0 THEN pu(q, z) = 0: GOTO 650 460 IF m = 2 AND rm(pu(q, z)) > 0 THEN uf = 0: GOTO 650 470 IF m = 2 AND z = 1 THEN uf = 1: GOTO 650 650 NEXT z: LOCATE , 2 655 IF pu(q, 1) > 0 AND pu(q, 2) > 0 AND pu(q, 1) = pu(q, 2) THEN a = a + 1: PRINT a; "-"; pu(q, 1); "&"; pu(q, 2): GOTO 700 END IF 660 IF pu(q, 1) > 0 THEN a = a + 1: PRINT a; "-"; pu(q, 1); IF pu(q, 2) > 0 AND uf = 0 THEN PRINT "&"; : ff = 1 END IF 670 IF pu(q, 2) > 0 AND uf = 0 AND ff = 0 THEN a = a + 1: PRINT a; "-"; pu(q, 2): GOTO 700 END IF 675 IF pu(q, 2) > 0 AND uf = 0 AND ff = 1 THEN PRINT pu(q, 2): GOTO 700 680 IF pu(q, 2) > 0 AND uf = 1 THEN PRINT "or"; pu(q, 2): af(a) = 1: GOTO 700 690 PRINT 700 IF pu(q, 1) > 0 THEN uc(a, 1) = pu(q, 1): GOTO 720 710 IF pu(q, 2) > 0 THEN uc(a, 1) = pu(q, 2): GOTO 730 720 IF pu(q, 2) > 0 THEN uc(a, 2) = pu(q, 2) 730 NEXT q: SLEEP 2 735 LOCATE 2, 62: COLOR colp 740 IF a = 0 THEN e = INT(RND * 13) + 1 LOCATE 5, 65: PRINT EXPLET$(e); : SLEEP 2: GOTO 3000 END IF 1000 IF sg = 1 AND pl = pe GOTO 15000: REM Computer's turn 1005 IF a = 1 AND af(1) = 1 THEN c = 1: GOTO 1025 1007 IF a = 1 THEN c = 1: LOCATE 2, 63: PRINT "NO CHOICE" GOTO 1100 END IF 1010 LOCATE 2, 62: COLOR colp: PRINT "WHICH NO.?"; : COLOR colp 1012 GOSUB Pause 1015 c = VAL(a$) 1020 IF c < 1 OR c > a GOTO 1010 1023 PRINT c 1025 IF sg = 1 AND pl = pe THEN GOSUB 16000: GOTO 1100 1030 IF af(c) = 1 THEN GOSUB 1500 1100 FOR q = 1 TO 2 cn = uc(c, q) 1110 IF cn = 0 GOTO 1140 1112 IF sg = 1 AND pl = h THEN t1(cn) = t1(cn) + 1: GOTO 1120 1113 IF t2(cn) = nr(cn) GOTO 1180 1115 IF sg = 1 AND pl = pe THEN t2(cn) = t2(cn) + 1: GOSUB 25000 1120 IF rm(cn) = 0 THEN m = m + 1: GOTO 45000 1130 rm(cn) = rm(cn) + 1 1135 GOTO 5000 1140 NEXT q 1180 FOR q = 1 TO 3: FOR z = 1 TO 2: pu(q, z) = 0: uc(q, z) = 0: NEXT: NEXT 1182 IF sg = 1 AND pl = pe GOTO 19000 1190 SLEEP 1: LOCATE 20, 64: COLOR colp: PRINT "GOING ON?"; COLOR colp: PRINT " "; 1191 GOSUB Pause: a$ = UCASE$(a$) 1192 IF a$ <> "Y" AND a$ <> "N" GOTO 1190 1194 PRINT a$ 1196 IF a$ = "Y" GOTO 100 1200 FOR q = 2 TO 12 IF rm(q) <> 0 THEN GOSUB 8000: GOTO 1210: REM end of turn (voluntary) 1205 GOTO 1310 1210 REM permanize captured row IF obtemp(q) = pl THEN crown(q) = pl: ot(pl) = ot(pl) + 1: GOSUB 2000 1250 REM permanize squares and slot in square companions FOR j = fs TO ls IF perm(q, j, 1) = 0 GOTO 1260 FOR k = 1 TO np IF perm(q, j, k) = pl THEN perm(q, j, k) = perm(q, j, k + 1) perm(q, j, k + 1) = perm(q, j, k + 2) perm(q, j, k + 2) = perm(q, j, k + 3) perm(q, j, k + 3) = 0 sx = xsp(j) + 3: sy = ysp(q) + 2 fx = sx + 35: fy = sy + 25 LINE (sx, sy)-(fx, fy), 2, BF GOTO 1254 END IF NEXT k: GOTO 1260 1254 IF perm(q, j, 1) > 0 THEN GOSUB Drawperm 1260 IF temp(q, j) = 0 GOTO 1270 temp(q, j) = 0 FOR k = 1 TO np IF perm(q, j, k) = 0 THEN perm(q, j, k) = pl: GOSUB Drawperm GOTO 1310: REM move on to next row END IF NEXT k 1270 NEXT j 1310 rm(q) = 0: obtemp(q) = 0 NEXT q 1320 m = 0: tc = 0 FOR q = 2 TO 12 r1(q) = t1(q): r2(q) = t2(q) NEXT: REM permanize 1330 IF ot(pl) > 2 GOTO 20000: REM game end SLEEP 2: GOTO 95 1500 LOCATE 3, 62: COLOR colp: PRINT "WHICH ONE?"; : COLOR colp 1502 GOSUB Pause 1505 x = VAL(a$): IF x = 1 GOTO Pauseb 1507 REM 1510 IF x <> uc(c, 1) AND x <> uc(c, 2) THEN a$ = "": B$ = "": GOTO 1500 1520 PRINT x: uc(c, 1) = x: uc(c, 2) = 0 1530 RETURN REM Graphic capture routine:paint in crown circles 2000 cx = xsp(ls + 1) + 21: cy = ysp(q) + 14 2005 col = col(pl): CIRCLE (cx, cy), 16, col, , , .65: PAINT (cx, cy), col 2010 REM sweep row demolishing all occupants FOR k = fs TO ls IF perm(q, k, 1) > 0 THEN sx = xsp(k): sy = ysp(q) LINE (sx + 3, sy + 2)-(sx + 37, sy + 26), 2, BF END IF 2020 NEXT k: RETURN 3000 FOR q = 2 TO 12 IF sg = 1 AND pl = h THEN t1(q) = r1(q) 3001 IF sg = 1 AND pl = pe THEN t2(q) = r2(q) 3002 IF rm(q) <> 0 THEN GOSUB 8000: GOTO 3010: REM end of turn (forced) 3005 GOTO 3050 3010 REM sweep row and erase white blobs FOR j = fs TO ls IF temp(q, j) = pl THEN cn = q: GOSUB Bloberase: temp(q, j) = 0 3015 NEXT j 3024 IF obtemp(q) = pl THEN obtemp(q) = 0: j = ls + 1 cx = xsp(j) + 20: cy = ysp(q) + 14 CIRCLE (cx, cy), 7, 2, , , .5: PAINT (cx, cy), 2 END IF 3050 rm(q) = 0: obtemp(q) = 0 NEXT q m = 0: tc = 0 3060 FOR q = 2 TO 12: t1(q) = r1(q): t2(q) = r2(q): NEXT GOTO 95: REM erase territory gained Solstart: PRINT : COLOR crand(2): PRINT TAB(20); "Your name please"; : INPUT n$ n$ = UCASE$(n$) 3500 PRINT : culi = CSRLIN: LOCATE culi, 20 COLOR 1: PRINT "What colour would you like, "; n$; "," PRINT : PRINT TAB(23); "- "; FOR q = 1 TO 4 COLOR q + 2: PRINT iscol$(q); COLOR 1: IF q < 4 THEN PRINT ", "; NEXT: PRINT " ? "; GOSUB Pause: c$ = UCASE$(a$) IF c$ <> "B" AND c$ <> "R" AND c$ <> "G" AND c$ <> "Y" GOTO 3500 humcol = INSTR(Colstring$, c$) COLOR humcol + 2: PRINT col$(humcol) Rand2: x = INT(RND(1) * 4 + 1): IF x = humcol GOTO Rand2 COLOR 1: PRINT : PRINT TAB(23); "OK, "; n$; ", I'll take "; COLOR x + 2: PRINT col$(x): comcol = x 4000 REM toss for start & set up for human-Computer contest 4005 sh$ = "Sorry, it's Heads. ": st$ = "Sorry, it's Tails. " 4010 sg = 1: np = 2: x = INT(RND(1) * 2 + 1) 4020 COLOR crand(3): PRINT : culi = CSRLIN 4021 LOCATE culi, 20: PRINT "Call, "; n$; ", Heads (H) or Tails (T) "; GOSUB Pause 4022 a$ = UCASE$(a$): IF a$ <> "H" AND a$ <> "T" GOTO 4021 4026 IF a$ = "H" THEN PRINT "Heads": GOTO 4030 4028 PRINT "Tails" 4030 COLOR crand(4): LOCATE culi + 2, 23 IF a$ = "H" AND x = 1 THEN PRINT "Heads it is. you start, "; n$: pe = 2: h = 1: GOTO 4100 END IF 4040 IF a$ = "T" AND x = 2 THEN PRINT "Tails it is. you start, "; n$: pe = 2: h = 1: GOTO 4100 END IF 4050 IF a$ = "H" AND x = 2 THEN PRINT ""; st$; "I'll start, "; n$: pe = 1: h = 2 cz(1) = 10: cz(2) = 6: GOTO 4100 END IF 4060 IF a$ = "T" AND x = 1 THEN PRINT ""; sh$; "I'll start, "; n$: pe = 1: h = 2 cz(1) = 10: cz(2) = 6 END IF 4100 pn$(pe) = "Computer": pa$(pe) = "C": pc(pe) = 193 col(pe) = comcol + 2 4110 opn$(h) = n$: pn$(h) = LEFT$(n$, 9): col(h) = humcol + 2 fullpn$(h) = n$ 4120 pa$(h) = LEFT$(pn$(h), 1) 4140 SLEEP 2: GOTO 90 5000 ON cn - 1 GOTO 5010, 5100, 5200, 5300, 5400, 5500, 5600, 5700, 5800, 5900, 6000 5010 fs = 6: ls = 6: GOSUB 7000: GOTO 1140 5100 fs = 5: ls = 7: GOSUB 7000: GOTO 1140 5200 fs = 4: ls = 8: GOSUB 7000: GOTO 1140 5300 fs = 3: ls = 9: GOSUB 7000: GOTO 1140 5400 fs = 2: ls = 10: GOSUB 7000: GOTO 1140 5500 fs = 1: ls = 11: GOSUB 7000: GOTO 1140 5600 fs = 2: ls = 10: GOSUB 7000: GOTO 1140 5700 fs = 3: ls = 9: GOSUB 7000: GOTO 1140 5800 fs = 4: ls = 8: GOSUB 7000: GOTO 1140 5900 fs = 5: ls = 7: GOSUB 7000: GOTO 1140 6000 fs = 6: ls = 6: GOSUB 7000: GOTO 1140 7000 FOR j = fs TO ls: REM sweep row to find blob and move one space IF temp(cn, j) = pl THEN temp(cn, j) = 0: GOSUB Bloberase temp(cn, j + 1) = pl: GOSUB Blobprint: RETURN END IF 7001 NEXT j 7005 REM if blob is near end IF temp(cn, ls + 1) = pl THEN temp(cn, ls + 1) = 0 j = ls + 1: GOSUB Bloberase obtemp(cn) = pl: GOSUB Blobprint GOTO 7300: REM capture objective temporarily END IF 7020 FOR j = fs TO ls: REM to find pl's last capture on row FOR k = 1 TO np IF perm(cn, j, k) = pl THEN temp(cn, j + 1) = pl: GOSUB Blobprint: RETURN END IF NEXT k 7025 NEXT j 7050 REM if pl's last capture is near end FOR k = 1 TO np IF perm(cn, ls + 1, k) = pl THEN obtemp(cn) = pl: j = ls + 1: GOSUB Blobprint GOTO 7300: REM capture objective temporarily END IF NEXT k 7085 REM if this is pl's first appearance on row IF temp(cn, fs) = 0 THEN temp(cn, fs) = pl: j = fs - 1: GOSUB Blobprint: RETURN END IF Bloberase: cx = xsp(j) + 20: cy = ysp(cn) + 14: col = 2 FOR k = 1 TO 4 WHILE perm(cn, j, k) > 0 col = col(perm(cn, j, k)): GOTO Nx2 WEND Nx2: NEXT k CIRCLE (cx, cy), 7, col, , , .5: PAINT (cx, cy), col RETURN Blobprint: cx = xsp(j + 1) + 20: cy = ysp(cn) + 14 CIRCLE (cx, cy), 7, 1, , , .5: PAINT (cx, cy), 1 RETURN 7300 tc = tc + 1: REM test for winning 7310 IF tc + ot(pl) = 3 THEN q = cn: GOSUB 8000: GOSUB 2000: GOTO 20000 7320 RETURN 8000 ON q - 1 GOTO 8010, 8100, 8200, 8300, 8400, 8500, 8600, 8700, 8800, 8900, 8950 8010 fs = 6: ls = 7: RETURN 8100 fs = 5: ls = 8: RETURN 8200 fs = 4: ls = 9: RETURN 8300 fs = 3: ls = 10: RETURN 8400 fs = 2: ls = 11: RETURN 8500 fs = 1: ls = 12: RETURN 8600 fs = 2: ls = 11: RETURN 8700 fs = 3: ls = 10: RETURN 8800 fs = 4: ls = 9: RETURN 8900 fs = 5: ls = 8: RETURN 8950 fs = 6: ls = 7: RETURN 10000 LINE (0, 28)-(140, 60), 10, BF LINE (0, 260)-(120, 310), 11, BF LINE (480, 10)-(600, 50), 12, BF LINE (494, 260)-(610, 280), 13, BF 10040 RETURN Newturn: LINE (0, 10)-(140, 60), 10, BF LINE (140, 10)-(184, 28), 10, BF LINE (0, 222)-(79, 252), 11, BF LINE (0, 260)-(120, 310), 11, BF LINE (480, 10)-(600, 50), 12, BF LINE (510, 55)-(618, 70), 12, BF RETURN Pauseb: B$ = INKEY$ WHILE B$ = "" GOTO Pauseb WEND B = VAL(B$) x = B + 10: GOTO 1507 Pause: a$ = INKEY$ WHILE a$ = "" GOTO Pause WEND: RETURN Drawperm: FOR k = 1 TO 4 IF perm(q, j, k) = 0 THEN RETURN sx = xsp(j) - 1 + 4 * k: sy = ysp(q) - 1 + 3 * k fx = xsp(j) + 41 - 4 * k: fy = ysp(q) + 29 - 3 * k col = col(perm(q, j, k)) LINE (sx, sy)-(fx, fy), col, BF NEXT k RETURN 15000 IF a = 1 THEN c = 1: GOTO 15010: REM only one combination 15005 GOTO 37000: REM if a = 2 or 3 15010 IF af(c) = 1 THEN GOSUB 16000: GOTO 1100: REM if there's an 15020 LOCATE 2, 63: PRINT "NO CHOICE" 15030 GOTO 1100 16000 REM comparison of alternatives 16010 FOR q = 1 TO 2: c(q) = (t2(uc(1, q)) + 1 - t1(uc(1, q))) / nr(uc(1, q)): NEXT 16020 IF c(1) > c(2) THEN cn = uc(c, 1): uc(c, 2) = 0: GOTO 16040 16030 cn = uc(c, 2): uc(c, 1) = 0 16040 PRINT TAB(62); "I'LL TAKE"; cn: FOR q = 1 TO 200: NEXT: RETURN 19000 REM decision whether Computer continues 19005 REM if Computer has gained 1 box 19010 FOR q = 2 TO 12: IF t2(q) = nr(q) AND m = 3 THEN t2(q) = 0: GOTO 19980 19020 NEXT 19050 IF rt = 11 AND m = 3 THEN 19500 19060 IF rt = 13 AND m = 3 THEN 19750 19070 IF rt = 15 AND pt >= 1 THEN 19500 19080 IF rt = 17 AND pt >= 1 THEN 19750 19090 IF rt = 19 AND pt >= 2 THEN 19500 19100 IF rt = 21 AND pt >= 2 THEN 19750 19110 IF rt = 23 AND pt >= 2 THEN 19900 19120 IF rt = 25 AND pt >= 3 THEN 19500 19130 IF rt = 27 AND pt >= 3 THEN 19750 19140 IF rt = 29 AND pt >= 3 THEN 19900 19150 IF rt = 31 AND pt >= 4 THEN 19500 19160 IF rt = 33 AND pt >= 4 THEN 19750 19170 IF rt = 35 AND pt >= 5 THEN 19500 19200 FOR q = 1 TO i: NEXT 19210 COLOR colp LINE (494, 260)-(610, 280), 13, BF 19220 LOCATE 20, 65: COLOR colp PRINT "I'LL GO ON": SLEEP 3: GOTO 100 19500 x = INT(RND(1) * 10) + 1 19510 IF x = 3 GOTO 19200 19520 GOTO 19980 19750 x = INT(RND(1) * 10) + 1 19760 IF x > 8 GOTO 19200 19770 GOTO 19980 19900 x = INT(RND(1) * 10) + 1 19910 IF x > 7 GOTO 19200 19920 GOTO 19980 19980 FOR qq = 1 TO 4000: NEXT 19985 COLOR colp: LOCATE 20, 66: PRINT " " 19990 LOCATE 20, 66: PRINT "I'LL STOP": GOTO 1200 20000 GOSUB 10000 20060 LOCATE 2, 2: COLOR 1 IF sg = 1 AND pl = pe THEN PRINT "Beaten you this time," LOCATE , 2: PRINT fullpn$(h); "!"; : GOTO 20080 END IF 20065 IF sg = 1 THEN PRINT "Well done, "; fullpn$(h); ", " LOCATE , 5: PRINT "you've won."; : GOTO 20080 END IF 20070 PRINT "Well done, "; fullpn$(pl); "," LOCATE , 5: PRINT "you've won.": PRINT 20080 FOR k = 1 TO 5000: NEXT 20085 LOCATE 2, 56: COLOR 1: PRINT "If you want another" LOCATE , 59: PRINT "game, type 'y'." 20090 LOCATE , 62: PRINT "If not, press": LOCATE , 65: PRINT "any other key" 20100 GOSUB Pause 20110 IF a$ = "y" THEN CLS : CLEAR : GOTO 10 20120 END 25000 REM convert row choice into no. of squares REM & sum up Computer's rows 25010 IF cn = 2 OR cn = 12 THEN ns = 3 25020 IF cn = 3 OR cn = 11 THEN ns = 5 25030 IF cn = 4 OR cn = 10 THEN ns = 7 25040 IF cn = 5 OR cn = 9 THEN ns = 9 25050 IF cn = 6 OR cn = 8 THEN ns = 11 25060 IF cn = 7 THEN ns = 13 25070 IF ru(cn) = 0 THEN rt = rt + ns 25080 ru(cn) = 1: RETURN 28000 GOSUB Pause 28010 RETURN 35000 REM comparison of overall scores 35005 s1 = 0: s2 = 0: FOR q = 2 TO 12 35008 IF crown(q) = h THEN s1 = s1 + 1.5: GOTO 35020 35010 IF crown(q) = pe THEN s2 = s2 + 1.5: GOTO 35020 35015 s1 = s1 + r1(q) / nr(q): s2 = s2 + r2(q) / nr(q) 35020 NEXT 35070 RETURN 37000 REM routine for selecting best alternative 37005 FOR z = 1 TO 200: NEXT 37010 FOR k = 1 TO a: FOR j = 1 TO 2 37015 IF uc(k, j) = 0 THEN tw(k, j) = 0: GOTO 37021 37020 tw(k, j) = (t2(uc(k, j)) + 1 - t1(uc(k, j))) / nr(uc(k, j)) 37021 NEXT: NEXT 37025 FOR k = 1 TO a 37029 REM if Computer is one step from home 37030 IF t2(uc(k, 1)) = nr(uc(k, 1)) - 1 OR t2(uc(k, 2)) = nr(uc(k, 2)) - 1 THEN c = k: GOTO 37500 37031 NEXT 37033 FOR k = 1 TO a 37034 REM if Computer is .4 or less from home 37035 IF uc(k, 1) = 0 GOTO 37038 37036 IF t2(uc(k, 1)) / nr(uc(k, 1)) >= .6 THEN c = k: GOTO 37600 37038 IF uc(k, 2) = 0 GOTO 37050 37040 IF t2(uc(k, 2)) / nr(uc(k, 2)) >= .6 THEN c = k: GOTO 37600 37050 IF af(k) = 1 THEN GOSUB 37700 37060 IF uc(k, 1) = uc(k, 2) GOTO 37080: REM bonus for repeated numbers 37070 c(k) = tw(k, 1) + tw(k, 2): GOTO 37090 37080 c(k) = (t2(uc(k, 1)) + 4 - t1(uc(k, 1))) / nr(uc(k, 1)) 37090 NEXT 37100 FOR q = 1 TO a: FOR j = 1 TO a 37110 IF c(j) < c(q) THEN c(j) = -10 37120 NEXT: NEXT 37130 FOR q = 1 TO 3 37140 IF c(q) <> -10 THEN c = q: GOTO 37200 37150 NEXT 37200 LOCATE 2, 63: PRINT "I CHOOSE"; c: IF af(c) = 1 GOTO 37220 37210 GOTO 1100 37220 IF tw(c, 1) > tw(c, 2) THEN LOCATE 3, 64: PRINT "LINE"; uc(c, 1) GOTO 1100 END IF 37230 LOCATE 3, 64: PRINT "LINE"; uc(q, 2): GOTO 1100 37500 LOCATE 2, 63: PRINT "I CHOOSE"; c: IF af(c) = 1 GOTO 37520 37510 GOTO 1100 37520 IF t2(uc(c, 1)) = nr(uc(c, 1)) - 1 THEN LOCATE 3, 64: PRINT "LINE"; uc(c, 1): uc(c, 2) = 0: GOTO 37540 END IF 37530 LOCATE 3, 64: PRINT "LINE"; uc(c, 2): uc(c, 1) = 0 37540 GOTO 1100 37600 LOCATE 2, 63: PRINT "I CHOOSE"; c: IF af(c) = 1 GOTO 37620 37610 GOTO 1100 37620 IF t2(uc(c, 1)) / nr(uc(c, 1)) >= .6 THEN LOCATE 3, 64: PRINT "LINE"; uc(c, 1): uc(c, 2) = 0: GOTO 37640 END IF 37630 LOCATE 3, 64: PRINT "LINE"; uc(c, 2): uc(c, 1) = 0: 37640 GOTO 1100 37700 REM sub-routine for situation 37710 IF tw(k, 1) > tw(k, 2) THEN tw(k, 2) = 0: uc(k, 2) = 0: RETURN 37720 tw(k, 1) = 0: uc(k, 1) = 0: RETURN 45000 IF cn = 2 THEN rm(cn) = 11: GOTO 5000 45002 IF cn = 3 THEN rm(cn) = 9: GOTO 5100 45004 IF cn = 4 THEN rm(cn) = 7: GOTO 5200 45006 IF cn = 5 THEN rm(cn) = 5: GOTO 5300 45008 IF cn = 6 THEN rm(cn) = 3: GOTO 5400 45010 IF cn = 7 THEN rm(cn) = 1: GOTO 5500 45012 IF cn = 8 THEN rm(cn) = 3: GOTO 5600 45014 IF cn = 9 THEN rm(cn) = 5: GOTO 5700 45016 IF cn = 10 THEN rm(cn) = 7: GOTO 5800 45018 IF cn = 11 THEN rm(cn) = 9: GOTO 5900 45020 IF cn = 12 THEN rm(cn) = 11: GOTO 6000 50000 REM draw board Drawboard: col = 8 LINE (216, 10)-(0, 159), 10 LINE -STEP(0, -149), 10 LINE -STEP(216, 0), 10 PAINT (50, 54), 10 LINE (0, 167)-(216, 316), 11 LINE -STEP(-216, 0), 11 LINE -STEP(0, -149), 11 PAINT (50, 285), 11 LINE (406, 10)-(622, 159), 12 LINE -STEP(0, -149), 12 LINE -STEP(-216, 0), 12 PAINT (600, 44), 12 LINE (622, 167)-(406, 316), 13 LINE -STEP(216, 0), 13 LINE -STEP(0, -149), 13 PAINT (600, 285), 13 SLEEP 1 FOR q = 0 TO 5 sx = 260 - 40 * q: sy = 10 + 28 * q fx = 340 + 40 * q cx = fx + 21: cy = sy + 14 nx = sx - 16: ny = sy + 11 ON q + 1 GOSUB Two, Three, Four, Five, Six, Seven LINE (sx, sy)-(fx, sy), 1 CIRCLE (cx, cy), 18, 1, , , .65 NEXT FOR q = 0 TO 4 sx = 60 + 40 * q: fx = 540 - 40 * q: sy = 178 + 28 * q cx = fx - 19: cy = sy + 14 nx = sx + 24: ny = sy + 11 ON q + 1 GOSUB Eight, Nine, Ten, Eleven, Twelve LINE (sx, sy)-(fx, sy), 1 CIRCLE (cx, cy), 18, 1, , , .65 NEXT LINE (260, 318)-(340, 318), 1 FOR q = 0 TO 5 sx = 60 + 40 * q: sy = 150 - 28 * q: fy = 178 + 28 * q LINE (sx, sy)-(sx, fy), 1 NEXT LINE (300, 11)-(300, 318), 1 FOR q = 0 TO 5 sx = 340 + 40 * q: sy = 11 + 28 * q: fy = 318 - 28 * q LINE (sx, sy)-(sx, fy), 1 NEXT: SLEEP 2 IF sg = 1 OR np < 3 THEN RETURN LOCATE 22, 57: COLOR 1: PRINT "Player order:"; FOR q = 1 TO 4 COLOR col(q): PRINT " "; pa$(q); NEXT: LOCATE 1, 1 RETURN Two: LINE (nx + 2, ny)-(nx + 5, ny), col FOR x = 0 TO 6 STEP 6 LINE (nx + x, ny + 1)-(nx + x + 1, ny + 2), col, BF NEXT LINE (nx + 5, ny + 3)-(nx + 1, ny + 5), col LINE (nx + 6, ny + 3)-(nx + 2, ny + 5), col LINE (nx, ny + 6)-(nx + 7, ny + 6), col RETURN Three: FOR y = 0 TO 6 STEP 6 LINE (nx + 1, ny + y)-(nx + 5, ny + y), col NEXT y LINE (nx + 3, ny + 3)-(nx + 5, ny + 3), col FOR y = 1 TO 4 STEP 3 LINE (nx + 6, ny + y)-(nx + 7, ny + y + 1), col, BF NEXT y FOR y = 1 TO 5 STEP 4 LINE (nx, ny + y)-(nx + 1, ny + y), col NEXT y RETURN Four: LINE (nx + 4, ny)-(nx + 5, ny + 6), col, BF LINE (nx + 3, ny + 1)-(nx + 1, ny + 3), col LINE (nx + 3, ny + 2)-(nx + 2, ny + 3), col LINE (nx, ny + 4)-(nx + 7, ny + 4), col RETURN Five: LINE (nx, ny)-(nx + 6, ny), col LINE (nx, ny + 1)-(nx + 1, ny + 1), col LINE (nx, ny + 2)-(nx + 5, ny + 2), col LINE (nx + 5, ny + 3)-(nx + 6, ny + 3), col LINE (nx + 6, ny + 4)-(nx + 7, ny + 4), col LINE (nx, ny + 5)-(nx + 1, ny + 5), col LINE (nx + 5, ny + 5)-(nx + 6, ny + 5), col LINE (nx + 1, ny + 6)-(nx + 5, ny + 6), col RETURN Six: LINE (nx + 4, ny)-(nx + 6, ny), col LINE (nx + 2, ny + 1)-(nx + 4, ny + 1), col LINE (nx + 1, ny + 2)-(nx + 3, ny + 2), col LINE (nx, ny + 3)-(nx + 6, ny + 3), col FOR x = 0 TO 6 STEP 6 FOR y = 4 TO 5 LINE (nx + x, ny + y)-(nx + x + 1, ny + y), col, BF NEXT y NEXT x LINE (nx + 2, ny + 6)-(nx + 5, ny + 6), col RETURN Seven: LINE (nx, ny)-(nx + 7, ny), col LINE (nx + 6, ny + 1)-(nx + 1, ny + 6), col LINE (nx + 7, ny + 1)-(nx + 2, ny + 6), col RETURN Eight: FOR y = 0 TO 6 STEP 3 LINE (nx + 2, ny + y)-(nx + 5, ny + y), col NEXT y FOR y = 1 TO 4 STEP 3 FOR x = 0 TO 6 STEP 6 LINE (nx + x, ny + y)-(nx + x + 1, ny + y + 1), col, BF NEXT x NEXT y RETURN Nine: LINE (nx + 1, ny + 6)-(nx + 3, ny + 6), col LINE (nx + 3, ny + 5)-(nx + 5, ny + 5), col LINE (nx + 4, ny + 4)-(nx + 6, ny + 4), col LINE (nx + 1, ny + 3)-(nx + 7, ny + 3), col FOR x = 0 TO 6 STEP 6 FOR y = 1 TO 2 LINE (nx + x, ny + y)-(nx + x + 1, ny + y), col, BF NEXT y NEXT x LINE (nx + 2, ny)-(nx + 5, ny), col RETURN Ten: LINE (nx, ny)-(nx + 1, ny + 6), col, B LINE (nx + 5, ny)-(nx + 6, ny), col LINE (nx + 4, ny + 1)-(nx + 7, ny + 1), col FOR y = 2 TO 4 LINE (nx + 3, ny + y)-(nx + 4, ny + y), col LINE (nx + 7, ny + y)-(nx + 8, ny + y), col NEXT LINE (nx + 4, ny + 5)-(nx + 7, ny + 5), col LINE (nx + 5, ny + 6)-(nx + 6, ny + 6), col RETURN Eleven: LINE (nx + 1, ny)-(nx + 2, ny + 6), col, B LINE (nx + 5, ny)-(nx + 6, ny + 6), col, B RETURN Twelve: LINE (nx, ny)-(nx + 1, ny + 6), col, B LINE (nx + 4, ny)-(nx + 6, ny), col LINE (nx + 3, ny + 1)-(nx + 4, ny + 1), col LINE (nx + 6, ny + 1)-(nx + 7, ny + 2), col, B LINE (nx + 5, ny + 3)-(nx + 6, ny + 3), col LINE (nx + 4, ny + 4)-(nx + 5, ny + 4), col LINE (nx + 3, ny + 5)-(nx + 4, ny + 5), col LINE (nx + 3, ny + 6)-(nx + 7, ny + 6), col RETURN Colours: PALETTE 1, 63: REM white PALETTE 2, 0 PALETTE 3, 11: REM blue 25 PALETTE 4, 36: REM red PALETTE 5, 2: REM green PALETTE 6, 54: REM yellow PALETTE 7, 21: REM purple PALETTE 8, 27: REM cyan PALETTE 9, 52: REM orange PALETTE 10, 8: REM dark blue 33 41 49 PALETTE 11, 32: REM crimson REM PALETTE 12, 20: REM brown PALETTE 12, 40: REM deep purple PALETTE 13, 48: REM dark green 16 PALETTE 14, 7: REM light grey PALETTE 15, 30: REM beige REM PALETTE 13,39:REM pink RETURN Dicepic: LINE (x, y)-(x + 17, y + 10), col, B LINE (x + 1, y + 1)-(x + 16, y + 9), 2, BF LINE (x + 1, y + 1)-(x + 1, y + 9), col LINE (x + 16, y + 1)-(x + 16, y + 9), col RETURN Dice1: LINE (x + 8, y + 5)-(x + 9, y + 5), col RETURN Dice2: LINE (x + 4, y + 2)-(x + 5, y + 2), col LINE (x + 12, y + 8)-(x + 13, y + 8), col RETURN Dice3: LINE (x + 4, y + 2)-(x + 5, y + 2), col LINE (x + 12, y + 8)-(x + 13, y + 8), col LINE (x + 8, y + 5)-(x + 9, y + 5), col RETURN Dice4: LINE (x + 4, y + 2)-(x + 5, y + 2), col LINE (x + 12, y + 2)-(x + 13, y + 2), col LINE (x + 4, y + 8)-(x + 5, y + 8), col LINE (x + 12, y + 8)-(x + 13, y + 8), col RETURN Dice5: LINE (x + 4, y + 2)-(x + 5, y + 2), col LINE (x + 12, y + 2)-(x + 13, y + 2), col LINE (x + 4, y + 8)-(x + 5, y + 8), col LINE (x + 12, y + 8)-(x + 13, y + 8), col LINE (x + 8, y + 5)-(x + 9, y + 5), col RETURN Dice6: LINE (x + 4, y + 2)-(x + 5, y + 2), col LINE (x + 12, y + 2)-(x + 13, y + 2), col LINE (x + 4, y + 5)-(x + 5, y + 5), col LINE (x + 12, y + 5)-(x + 13, y + 5), col LINE (x + 4, y + 8)-(x + 5, y + 8), col LINE (x + 12, y + 8)-(x + 13, y + 8), col RETURN Title: x = 150: y = 55: col = crand(1): COLOR col: CLS LINE (x, y)-(x - 40, y - 29), col LINE -STEP(-56, 0): LINE -STEP(-40, 29), col: LINE -STEP(0, 41) LINE -STEP(40, 29): LINE -STEP(56, 0), col: LINE -STEP(40, -29) LINE (x - 12, y + 9)-(x - 46, y - 16) LINE -STEP(-44, 0): LINE -STEP(-28, 20): LINE -STEP(0, 32) LINE -STEP(28, 20): LINE -STEP(44, 0): LINE -STEP(34, -25) LINE -STEP(12, 9): LINE (x - 12, y + 9)-(x, y): PAINT (x - 6, y) x = 170: col = crand(2): COLOR col LINE (x, y + 70)-(x, y), col LINE -STEP(40, -29): LINE -STEP(56, 0): LINE -STEP(40, 29) LINE -STEP(0, 70) LINE (x + 18, y + 70)-(x + 18, y + 4), col LINE -STEP(28, -20): LINE -STEP(44, 0): LINE -STEP(28, 20) LINE -STEP(0, 65): LINE -STEP(18, 0): LINE (x, y + 70)-(x + 18, y + 70) PAINT (x + 9, y), col: LINE (x + 18, y + 13)-(x + 118, y + 26), col, BF x = 326: col = crand(3): COLOR col LINE (x, y + 70)-(x, y), col LINE -STEP(40, -29): LINE -STEP(56, 0): LINE -STEP(40, 29) LINE -STEP(0, 70) LINE (x + 18, y + 70)-(x + 18, y + 4), col LINE -STEP(28, -20): LINE -STEP(44, 0): LINE -STEP(28, 20) LINE -STEP(0, 65): LINE -STEP(18, 0): LINE (x, y + 70)-(x + 18, y + 70) PAINT (x + 9, y), col x = 462: col = 14: COLOR 14 LINE (x, y - 29)-(x + 20, y - 29) LINE -STEP(-10, 7): LINE -STEP(-10, -7): PAINT (x + 10, y - 26), col x = 618: col = crand(4): COLOR col LINE (x, y)-(x - 40, y - 29), col LINE -STEP(-56, 0): LINE -STEP(-40, 29) LINE (x - 12, y + 9)-(x - 46, y - 16), col LINE -STEP(-44, 0): LINE -STEP(-34, 25) LINE -STEP(-12, -9): LINE (x - 12, y + 9)-(x, y): : PAINT (x - 6, y), col LINE (x - 77, y - 16)-(x - 59, y + 70), col, BF x = 150: y = 169: col = crand(5): COLOR col LINE (x, y)-(x - 40, y - 29), col LINE -STEP(-56, 0): LINE -STEP(-40, 29): LINE -STEP(0, 13) LINE (x - 12, y + 9)-(x - 46, y - 16), col LINE -STEP(-44, 0): LINE -STEP(-28, 20): LINE -STEP(0, 9) LINE (x - 136, y + 13)-(x, y + 26), col, BF LINE -STEP(0, 15): LINE -STEP(-40, 29): LINE -STEP(-55, 0) LINE -STEP(-40, -29) LINE (x - 18, y + 26)-(x - 18, y + 36) LINE -STEP(-28, 20): LINE -STEP(-43, 0): LINE -STEP(-34, -25) LINE -STEP(-12, 9): LINE (x - 12, y + 9)-(x, y) PAINT (x - 6, y), col: PAINT (x - 6, y + 29), col x = 306: col = crand(6): COLOR col LINE (x, y)-(x - 40, y - 29), col LINE -STEP(-56, 0): LINE -STEP(-40, 29) LINE (x - 12, y + 9)-(x - 46, y - 16), col LINE -STEP(-44, 0): LINE -STEP(-34, 25) LINE -STEP(-12, -9): LINE (x - 12, y + 9)-(x, y): : PAINT (x - 6, y), col LINE (x - 77, y - 16)-(x - 59, y + 70), col, BF x = 462: col = crand(7): COLOR col LINE (x, y)-(x - 40, y - 29), col LINE -STEP(-56, 0): LINE -STEP(-40, 29): LINE -STEP(0, 41) LINE -STEP(40, 29): LINE -STEP(56, 0): LINE -STEP(40, -29) LINE -STEP(0, -41) LINE (x - 18, y + 4)-(x - 46, y - 16), col LINE -STEP(-44, 0): LINE -STEP(-28, 20): LINE -STEP(0, 32) LINE -STEP(28, 20): LINE -STEP(44, 0): LINE -STEP(28, -20) LINE -STEP(0, -32) PAINT (x - 6, y), col x = 482: col = crand(8): COLOR crand(8) LINE (x, y + 70)-(x, y - 13), col LINE -STEP(22, -16): LINE -STEP(92, 0): LINE -STEP(22, 16) LINE -STEP(0, 23): LINE -STEP(-22, 16): LINE -STEP(-92, 0) LINE -STEP(-4, -3): LINE -STEP(0, 47): LINE -STEP(-18, 0) LINE (x + 18, y + 6)-(x + 18, y - 9), col LINE -STEP(10, -7): LINE -STEP(80, 0): LINE -STEP(10, 7) LINE -STEP(0, 15): LINE -STEP(-10, 7): LINE -STEP(-80, 0) LINE -STEP(-10, -7): PAINT (x + 9, y), col SLEEP 1 LOCATE 21, 12: COLOR crand(2) PRINT "Computerised version of the game invented by Sid Sackson" SLEEP 1: COLOR crand(3) PRINT : PRINT TAB(21); "Programmed for the PC "; PRINT CHR$(155); : PRINT " by G.C.Crawshay" SLEEP 5: RETURN Randcolours: FOR q = 1 TO 7: ctitle(q) = q + 2: NEXT: ctitle(8) = 15 FOR q = 1 TO 8 Randcol: x = INT(RND(1) * 8) + 1 IF ctitle(x) = 0 GOTO Randcol crand(q) = ctitle(x): ctitle(x) = 0 IF x = 1 THEN crand(q) = 14 NEXT RETURN REM colour choices all go wrong - redesign Rand section completely