home *** CD-ROM | disk | FTP | other *** search
/ Sunny 1,000 Collection / SUNNY1000.iso / Files / W31 / Puzzle / OTHULLO.ZIP / othullo.bas next >
BASIC Source File  |  1997-01-02  |  36KB  |  1,068 lines

  1. 'http://www.uwm.edu/~dkoller
  2. 'dkoller@csd.uwm.edu
  3.  
  4. DEFINT A-Z                                     'SHIFT + F5 TO START
  5. DECLARE SUB compch (ch, lg, no, go, z, lv, pl)
  6. DECLARE SUB compsrch (ch, lg, no, go, lv, p3a, p3b, pl)
  7. DECLARE SUB tally (turn, pl, r!, b!, gr!, pr!)
  8. DECLARE SUB stall1 (secs#)
  9. DECLARE SUB pointer (x, y, p)                  'OTHULLO (44 GAME MODES!)
  10. DECLARE SUB scan (p, pl, turn, p3)             'BY DAVID KOLLER
  11. DECLARE SUB instruct ()                        '2/96 - README GENERATED 1/97
  12. DECLARE SUB ointro ()
  13.                                                'To shut sound off, change
  14.                                                'the "PLAY" statements to "REM"
  15. SCREEN 12
  16.     DEF SEG = 0
  17.     KeyFlags = PEEK(1047)
  18.     POKE 1047, &H0
  19.     DEF SEG
  20. DIM SHARED piece(-64 TO 128) AS INTEGER
  21. DIM SHARED a1(1 TO 400)
  22. DIM SHARED a2(1 TO 400)
  23. DIM SHARED a3(1 TO 400)
  24. DIM SHARED a4(1 TO 400)
  25. DIM SHARED a5(1 TO 400)
  26. DIM SHARED a6(1 TO 400)
  27. DIM SHARED wood(1, 100)
  28. DIM SHARED wood2(1, 100)
  29. DIM SHARED sq(1, 500)
  30. DIM SHARED rpc(1, 200)
  31. DIM SHARED bpc(1, 200)
  32. DIM SHARED gpc(1, 200)
  33. DIM SHARED ppc(1, 200)
  34. 10 DATA 0,6,6,6,7,7,6,6,6,0,6,6,6,6,6,6,6,7,7,7,6,6,7,6,6,6,6,7,7,7,6,6,7,7,7,6,6,6,6,7,7,6,6,6,6,6,7,7,6,6,6,7,7,6,6,6,6,6,6,0,6,7,7,7,7,6,6,7,7,7,6,6,6,6,6,7,7,6,6,6,7,7,7,6,6,6,6,6,6,6,6,0,6,6,6,6,7,7,6,0,7,6,6,6,7,7,6,6,6,7,7,7,7,7,7,6,6,6,0,0,0,6,6,6,7,7,6,6,7,7,6,6,0,0,6,6,6,0,6,6,6,7,7,6,0,6,6,6,6,6,6,6,6,7,6,6,6,0,6,15,0,0,6,6,6,6,6,0,6,7,6,6,7,7,7,6,6,7,7,6,6,6,6,6,0,0,6,6,6,7,7,7,6,6,6,6,7,7,6,6,6,7,7,6,6,0,6,7,7,7,6,6,6,7,7,6,6,6,7,7,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,6,7,7,7,6,6,6,0,6,6,6,7,7,7,6,0,7,7,6,6,6,7,6,6,6
  35.  
  36. FOR y = 1 TO 10
  37. FOR x = 1 TO 26
  38. READ z
  39. PSET (x, y), z
  40. NEXT x
  41. NEXT y
  42. GET (1, 1)-(26, 10), wood
  43. RESTORE 10
  44. FOR x = 1 TO 10
  45. FOR y = 1 TO 26
  46. READ z
  47. PSET (x, y), z
  48. NEXT y
  49. NEXT x
  50. GET (1, 1)-(10, 26), wood2
  51. LINE (25, 25)-(75, 75), 0, BF
  52. LINE (27, 27)-(73, 73), 8, BF
  53. LINE (29, 29)-(71, 71), 7, BF
  54. LINE (31, 31)-(69, 69), 15, BF
  55. GET (25, 25)-(75, 75), sq
  56. CLS
  57. LINE (0, 0)-(30, 30), 15, BF
  58. CIRCLE (15, 15), 15, 0
  59. PAINT (15, 15), 2, 0
  60. CIRCLE (15, 15), 10, 0
  61. PAINT (15, 15), 10, 0
  62. GET (0, 0)-(30, 30), gpc
  63. LINE (0, 0)-(30, 30), 15, BF
  64. CIRCLE (15, 15), 15, 0
  65. PAINT (15, 15), 4, 0
  66. CIRCLE (15, 15), 10, 0
  67. PAINT (15, 15), 12, 0
  68. GET (0, 0)-(30, 30), rpc
  69. LINE (0, 0)-(30, 30), 15, BF
  70. CIRCLE (15, 15), 15, 0
  71. PAINT (15, 15), 5, 0
  72. CIRCLE (15, 15), 10, 0
  73. PAINT (15, 15), 13, 0
  74. GET (0, 0)-(30, 30), ppc
  75. LINE (0, 0)-(30, 30), 15, BF
  76. CIRCLE (15, 15), 15, 0
  77. PAINT (15, 15), 1, 0
  78. CIRCLE (15, 15), 10, 0
  79. PAINT (15, 15), 9, 0
  80. GET (0, 0)-(30, 30), bpc
  81. CLS
  82.  
  83. PSET (25, 13), 0
  84. arrow$ = "bd7 e5 f5 l3 d7 l4 u7 l3 a2"
  85. DRAW "ta180 c14 x" + VARPTR$(arrow$)
  86. PAINT (22, 7), 14
  87. GET (0, 0)-(40, 15), a1
  88. CLS
  89. PSET (28, 13), 0
  90. DRAW "ta205 c14 x" + VARPTR$(arrow$)
  91. PAINT (21, 7), 14
  92. GET (0, 0)-(40, 15), a2
  93. CLS
  94. PSET (25, 13), 0
  95. DRAW "ta155 c14 x" + VARPTR$(arrow$)
  96. PAINT (22, 7), 14
  97. GET (0, 0)-(40, 15), a3
  98. CLS
  99. LINE (20, 18)-(20, 18), 0
  100. DRAW "ta-90 c14 x" + VARPTR$(arrow$)
  101. PAINT (10, 23), 14
  102. GET (0, 1)-(25, 41), a4
  103. CLS
  104. LINE (20, 18)-(20, 18), 0
  105. DRAW "ta-115 c14 x" + VARPTR$(arrow$)
  106. PAINT (12, 22), 14
  107. GET (0, 1)-(25, 41), a5
  108. CLS
  109. LINE (20, 18)-(20, 18), 0
  110. DRAW "ta-65 c14 x" + VARPTR$(arrow$)
  111. PAINT (12, 28), 14
  112. GET (0, 1)-(25, 41), a6
  113. CLS
  114. CALL ointro
  115. CALL instruct
  116. 107 FOR z = -8 TO 72
  117.     piece(z) = 0
  118.     NEXT z
  119. CLS
  120. COLOR 15
  121. cp2 = 0
  122. cp3 = 0
  123. cp = 0
  124. INPUT "ENTER THE NUMBER OF PLAYERS (0-4): ", pl
  125. PRINT ""
  126. IF pl = 2 THEN INPUT "DO YOU WANT TWO COMPUTER PLAYERS: (1 = YES): ", cp2
  127. IF cp2 = 1 THEN pl = 4
  128.  
  129. IF pl = 3 THEN INPUT "DO YOU WANT A COMPUTER PLAYER (1 = YES): ", cp3
  130. IF cp3 = 1 THEN pl = 4
  131. PRINT ""
  132. IF cp2 = 1 OR cp3 = 1 THEN INPUT "ENTER SKILL LEVEL OF COMPUTER (1-10): ", lv
  133. PRINT ""
  134. INPUT "ENTER THE TIME LIMIT FOR EACH MOVE (0 = NO LIMIT): ", time
  135.  
  136. IF pl = 1 THEN
  137.   cp = 1
  138.   PRINT ""
  139.   PRINT "ENTER THE SKILL LEVEL DESIRED (1-10 FOR 1 OPPONENT / 11-20 FOR 3 OPPONENTS): "
  140.   PRINT ""
  141.   INPUT lv
  142. END IF
  143. IF pl = 1 AND lv > 10 THEN pl = 4: lv = lv - 10
  144. IF pl = 1 AND lv < 10 THEN pl = 2
  145.  
  146. CLS
  147.  
  148. FOR x = 0 TO 200 STEP 10
  149.   LINE (0, x + 2)-(60, 0), 15
  150.   LINE (0, x + 3)-(60, 0), 7
  151.   LINE (0, x + 4)-(60, 0), 8
  152.   LINE (0, x + 1)-(60, 0), 7
  153.   LINE (0, x)-(60, 0), 8
  154. NEXT x
  155.  
  156. FOR x = 0 TO 200 STEP 10
  157.   LINE (640, x + 2)-(580, 0), 15
  158.   LINE (640, x + 3)-(580, 0), 7
  159.   LINE (640, x + 4)-(580, 0), 8
  160.   LINE (640, x + 1)-(580, 0), 7
  161.   LINE (640, x)-(580, 0), 8
  162. NEXT x
  163.  
  164. FOR x = 480 TO 280 STEP -10
  165.   LINE (640, x + 2)-(580, 480), 15
  166.   LINE (640, x + 3)-(580, 480), 7
  167.   LINE (640, x + 4)-(580, 480), 8
  168.   LINE (640, x + 1)-(580, 480), 7
  169.   LINE (640, x)-(580, 480), 8
  170. NEXT x
  171.  
  172. FOR x = 480 TO 280 STEP -10
  173.   LINE (0, x + 2)-(60, 480), 15
  174.   LINE (0, x + 3)-(60, 480), 7
  175.   LINE (0, x + 4)-(60, 480), 8
  176.   LINE (0, x + 1)-(60, 480), 7
  177.   LINE (0, x)-(60, 480), 8
  178. NEXT x
  179.  
  180. IF pl <> 3 THEN
  181. LINE (120, 40)-(520, 440), 15, BF
  182. p3 = 0
  183. p3a = 0
  184. p3b = 0
  185. END IF
  186.  
  187. IF pl = 3 THEN
  188. LINE (120, 40)-(570, 440), 15, BF
  189. p3 = 50
  190. p3a = 8
  191. p3b = 1
  192. END IF
  193.  
  194. FOR y = 41 TO 440 STEP 26
  195.   PUT (99, y), wood2, PSET
  196.   PUT (531 + p3 + p3b, y), wood2, PSET
  197.   PUT (110, y), wood2, PSET
  198.   PUT (520 + p3 + p3b, y), wood2, PSET
  199. NEXT y
  200.  
  201.   LINE (99, 440)-(120, 451), 0, BF
  202.   LINE (520, 440)-(585, 451), 0, BF
  203.  
  204. FOR x = 99 TO 519 + p3 STEP 26
  205.   PUT (x, 19), wood, PSET
  206.   PUT (x, 452), wood, PSET
  207.   PUT (x, 30), wood, PSET
  208.   PUT (x, 441), wood, PSET
  209. NEXT x
  210.  
  211. IF pl = 3 THEN
  212.   LINE (592, 41)-(592, 439), 0
  213.   LINE (592, 40)-(592, 19), 8
  214.   LINE (592, 440)-(592, 461), 8
  215. END IF
  216.  
  217. FOR x = 9 TO 60 STEP 26
  218.   PUT (x, 102), wood, PSET
  219.   PUT (x, 162), wood, PSET
  220.   PUT (x, 227), wood, PSET
  221.   PUT (x, 292), wood, PSET
  222.   PUT (x, 352), wood, PSET
  223. NEXT x
  224.  
  225. FOR y = 102 TO 350 STEP 26
  226.   PUT (9, y), wood2, PSET
  227.   PUT (59, y), wood2, PSET
  228. NEXT y
  229.  
  230.   FOR x = 120 TO 470 + p3 STEP 50
  231.   FOR y = 40 TO 390 STEP 50
  232.     PUT (x, y), sq, PSET
  233.   NEXT y
  234.   NEXT x
  235.  
  236. IF cp2 = 1 THEN LOCATE 1, 27: PRINT "COMPUTER IS BLUE AND PURPLE"
  237. IF cp3 = 1 THEN LOCATE 1, 33: PRINT "COMPUTER IS BLUE"
  238.  
  239. turn = 1
  240. IF pl < 3 THEN
  241. piece(27) = 1
  242. piece(28) = 2
  243. piece(35) = 2
  244. piece(36) = 1
  245. END IF
  246. IF pl = 3 THEN
  247. piece(21) = 2
  248. piece(22) = 1
  249. piece(23) = 3
  250. piece(30) = 3
  251. piece(31) = 2
  252. piece(32) = 1
  253. piece(39) = 1
  254. piece(40) = 3
  255. piece(41) = 2
  256. piece(48) = 2
  257. piece(49) = 1
  258. piece(50) = 3
  259. END IF
  260. IF pl > 3 THEN
  261. piece(18) = 3
  262. piece(19) = 4
  263. piece(20) = 4
  264. piece(21) = 2
  265. piece(26) = 2
  266. piece(27) = 1
  267. piece(28) = 1
  268. piece(29) = 3
  269. piece(34) = 3
  270. piece(35) = 4
  271. piece(36) = 4
  272. piece(37) = 2
  273. piece(42) = 2
  274. piece(43) = 1
  275. piece(44) = 1
  276. piece(45) = 3
  277. END IF
  278.  
  279. CALL tally(turn, pl, r!, b!, gr!, pr!)
  280. CALL scan(p, pl, turn, p3)
  281.  
  282. ti# = TIMER
  283. x = 295
  284. y = 215
  285. p = 27 + p3b * 3
  286. b = 0
  287. r = 0
  288. gr = 0
  289. pr = 0
  290. co = 4
  291. c = 14
  292.  
  293. KEY 15, CHR$(128) + CHR$(72) 'U
  294. KEY 16, CHR$(128) + CHR$(80) 'D
  295. KEY 17, CHR$(128) + CHR$(77) 'R
  296. KEY 18, CHR$(128) + CHR$(75) 'L
  297. KEY 19, CHR$(0) + CHR$(28)
  298. KEY 20, CHR$(0) + CHR$(25) 'P
  299. KEY 21, CHR$(0) + CHR$(20) 'T
  300. KEY 22, CHR$(0) + CHR$(35) 'H
  301. KEY(15) ON
  302. KEY(16) ON
  303. KEY(17) ON
  304. KEY(18) ON
  305. KEY(19) ON
  306. KEY(20) ON
  307. KEY(21) ON
  308. KEY(22) ON
  309.   ON KEY(15) GOSUB 102
  310.   ON KEY(16) GOSUB 103
  311.   ON KEY(17) GOSUB 104
  312.   ON KEY(18) GOSUB 105
  313.   ON KEY(19) GOSUB 106
  314.   ON KEY(20) GOSUB 116
  315.   ON KEY(21) GOSUB 117
  316.   ON KEY(22) GOSUB 119
  317.   loseturn# = TIMER
  318.  
  319. 101 IF time <> 0 THEN
  320.       IF time - (TIMER - loseturn#) < 5.5 THEN
  321.         COLOR 12
  322.         IF time - (TIMER - loseturn#) > 5.4 THEN PLAY "o0l64bcb"
  323.       END IF
  324.       LOCATE 1, 27: PRINT " TIME REMAINING TO MOVE:"; CINT(time - (TIMER - loseturn#))
  325.       IF (TIMER - time > loseturn#) THEN GOSUB 116
  326.     END IF
  327.  
  328.     IF (cp > 0 AND turn <> 1) OR (pl = 0) OR (cp2 = 1 AND (turn = 2 OR turn = 4)) OR (cp3 = 1 AND turn = 4) THEN
  329.       CALL compsrch(ch, lg, no, go, lv, p3a, p3b, pl)
  330.       IF lg = 0 THEN GOSUB 116
  331.       p = go
  332.       GOSUB 106
  333.       x = 295
  334.       y = 215
  335.       p = 27 + 3 * p3b
  336.     END IF
  337.  
  338.     IF b + r + gr + pr = 64 + p3a THEN GOTO 107
  339.     LINE (x - 24, y - 24)-(x + 24, y - 21), c, BF
  340.     LINE (x + 21, y - 24)-(x + 24, y + 24), c, BF
  341.     LINE (x - 24, y + 24)-(x + 24, y + 21), c, BF
  342.     LINE (x - 24, y - 24)-(x - 21, y + 24), c, BF
  343.     cc = cc + 1
  344.     IF cc = 50 THEN
  345.     cc = 1
  346.       IF (TIMER - .75 > ti#) THEN
  347.         ti# = TIMER
  348.         IF c = co THEN
  349.           c = 14
  350.         ELSE
  351.           c = co
  352.         END IF
  353.         FOR w = 130 TO 319 STEP 63
  354.           IF POINT(48, w) = co AND POINT(51, w) = 0 THEN CIRCLE (39, w), 12, 14: zz = 1
  355.           IF POINT(51, w) = 14 AND zz <> 1 THEN CIRCLE (39, w), 12, 0
  356.         NEXT w
  357.         zz = 0
  358.       END IF
  359.     END IF
  360. GOTO 101
  361.  
  362. 102 CALL pointer(x, y, p)
  363.   IF y > 65 THEN
  364.     y = y - 50
  365.     p = p - 8 - p3b
  366.   END IF
  367.   RETURN
  368. 103 CALL pointer(x, y, p)
  369.   IF y < 415 THEN
  370.     y = y + 50
  371.     p = p + 8 + p3b
  372.   END IF
  373.   RETURN
  374. 104 CALL pointer(x, y, p)
  375.   IF x < (465 + p3) THEN
  376.     x = x + 50
  377.     p = p + 1
  378.   END IF
  379.   RETURN
  380. 105 CALL pointer(x, y, p)
  381.   IF x > 165 THEN
  382.     x = x - 50
  383.     p = p - 1
  384.   END IF
  385.   RETURN
  386.  
  387. 106
  388.   CALL pointer(x, y, p)
  389.   IF piece(p) = 1 OR piece(p) = 2 OR piece(p) = 3 OR piece(p) = 4 THEN RETURN
  390.   chk = 0
  391.  
  392.   CIRCLE (39, 130), 12, 0
  393.   CIRCLE (39, 193), 12, 0
  394.   CIRCLE (39, 256), 12, 0
  395.   CIRCLE (39, 319), 12, 0
  396.  
  397.   IF piece(p - 9 - p3b) = 2 OR piece(p - 9 - p3b) = 3 OR piece(p - 9 - p3b) = 4 THEN
  398.     FOR z = 1 TO p MOD (8 + p3b)
  399.       IF piece(p - z * (9 + p3b)) = 0 THEN GOTO 108
  400.         IF piece(p - z * (9 + p3b)) = 1 THEN
  401.           chk = 1
  402.           FOR chg = 1 TO z
  403.             piece(p - chg * (9 + p3b)) = 1
  404.           NEXT chg
  405.           GOTO 108
  406.         END IF
  407.     NEXT z
  408.   END IF
  409. 108
  410.   IF piece(p - 8 - p3b) = 2 OR piece(p - 8 - p3b) = 3 OR piece(p - 8 - p3b) = 4 THEN
  411.     FOR z = 1 TO FIX(p / (8 + p3b))
  412.       IF piece(p - z * (8 + p3b)) = 0 THEN GOTO 109
  413.         IF piece(p - z * (8 + p3b)) = 1 THEN
  414.           chk = 1
  415.           FOR chg = 1 TO z
  416.             piece(p - chg * (8 + p3b)) = 1
  417.           NEXT chg
  418.           GOTO 109
  419.         END IF
  420.     NEXT z
  421.   END IF
  422. 109
  423.   IF piece(p - 7 - p3b) = 2 OR piece(p - 7 - p3b) = 3 OR piece(p - 7 - p3b) = 4 THEN
  424.     FOR z = 1 TO 7 + p3b - p MOD (8 + p3b)
  425.       IF piece(p - z * (7 + p3b)) = 0 THEN GOTO 110
  426.         IF piece(p - z * (7 + p3b)) = 1 THEN
  427.           chk = 1
  428.           FOR chg = 1 TO z
  429.             piece(p - chg * (7 + p3b)) = 1
  430.           NEXT chg
  431.           GOTO 110
  432.         END IF
  433.     NEXT z
  434.   END IF
  435. 110
  436.   IF piece(p - 1) = 2 OR piece(p - 1) = 3 OR piece(p - 1) = 4 THEN
  437.     FOR z = 1 TO p MOD (8 + p3b)
  438.       IF piece(p - z) = 0 THEN GOTO 111
  439.         IF piece(p - z) = 1 THEN
  440.           chk = 1
  441.           FOR chg = 1 TO z
  442.             piece(p - chg) = 1
  443.           NEXT chg
  444.           GOTO 111
  445.         END IF
  446.     NEXT z
  447.   END IF
  448. 111
  449.   IF piece(p + 1) = 2 OR piece(p + 1) = 3 OR piece(p + 1) = 4 THEN
  450.     FOR z = 1 TO 7 + p3b - p MOD (8 + p3b)
  451.       IF piece(p + z) = 0 THEN GOTO 112
  452.         IF piece(p + z) = 1 THEN
  453.           chk = 1
  454.           FOR chg = 1 TO z
  455.             piece(p + chg) = 1
  456.           NEXT chg
  457.           GOTO 112
  458.         END IF
  459.     NEXT z
  460.   END IF
  461. 112
  462.   IF piece(p + 7 + p3b) = 2 OR piece(p + 7 + p3b) = 3 OR piece(p + 7 + p3b) = 4 THEN
  463.     FOR z = 1 TO p MOD (8 + p3b)
  464.       IF piece(p + z * (7 + p3b)) = 0 THEN GOTO 113
  465.         IF piece(p + z * (7 + p3b)) = 1 THEN
  466.           chk = 1
  467.           FOR chg = 1 TO z
  468.             piece(p + chg * (7 + p3b)) = 1
  469.           NEXT chg
  470.           GOTO 113
  471.         END IF
  472.     NEXT z
  473.   END IF
  474. 113
  475.   IF piece(p + 8 + p3b) = 2 OR piece(p + 8 + p3b) = 3 OR piece(p + 8 + p3b) = 4 THEN
  476.     FOR z = 1 TO 8 - FIX(p / (8 + p3b))
  477.       IF piece(p + z * (8 + p3b)) = 0 THEN GOTO 114
  478.         IF piece(p + z * (8 + p3b)) = 1 THEN
  479.           chk = 1
  480.           FOR chg = 1 TO z
  481.             piece(p + chg * (8 + p3b)) = 1
  482.           NEXT chg
  483.           GOTO 114
  484.         END IF
  485.     NEXT z
  486.   END IF
  487. 114
  488.   IF piece(p + 9 + p3b) = 2 OR piece(p + 9 + p3b) = 3 OR piece(p + 9 + p3b) = 4 THEN
  489.     FOR z = 1 TO 7 + p3b - p MOD (8 + p3b)
  490.       IF piece(p + z * (9 + p3b)) = 0 THEN GOTO 115
  491.         IF piece(p + z * (9 + p3b)) = 1 THEN
  492.           chk = 1
  493.           FOR chg = 1 TO z
  494.             piece(p + chg * (9 + p3b)) = 1
  495.           NEXT chg
  496.           GOTO 115
  497.         END IF
  498.     NEXT z
  499.   END IF
  500. 115
  501.  
  502. IF chk = 0 THEN RETURN
  503. piece(p) = 1
  504.  
  505. 116
  506. turn = turn + 1
  507. IF turn = 5 AND pl > 3 THEN turn = 1
  508. IF turn = 4 AND pl = 3 THEN turn = 1
  509. IF turn = 3 AND pl < 3 THEN turn = 1
  510. g = 0
  511. FOR z = 0 TO 63 + p3a
  512.   IF pl > 3 AND piece(z) = 1 THEN
  513.      piece(z) = 2
  514.   ELSEIF pl > 3 AND piece(z) = 2 THEN
  515.      piece(z) = 3
  516.   ELSEIF pl > 3 AND piece(z) = 3 THEN
  517.      piece(z) = 4
  518.   ELSEIF pl > 3 AND piece(z) = 4 THEN
  519.      piece(z) = 1
  520.   ELSEIF pl > 3 THEN
  521.      g = g + 1
  522.   END IF
  523.  
  524.   IF pl = 3 AND piece(z) = 1 THEN
  525.      piece(z) = 2
  526.   ELSEIF pl = 3 AND piece(z) = 2 THEN
  527.      piece(z) = 3
  528.   ELSEIF pl = 3 AND piece(z) = 3 THEN
  529.      piece(z) = 1
  530.   ELSEIF pl = 3 THEN
  531.      g = g + 1
  532.   END IF
  533.  
  534.   IF pl < 3 AND piece(z) = 1 THEN
  535.      piece(z) = 2
  536.   ELSEIF pl < 3 AND piece(z) = 2 THEN
  537.      piece(z) = 1
  538.   ELSEIF pl < 3 THEN
  539.      g = g + 1
  540.   END IF
  541. NEXT z
  542.  
  543. CALL scan(p, pl, turn, p3)
  544. CALL tally(turn, pl, r!, b!, gr!, pr!)
  545.  
  546. 118
  547. IF g = 0 THEN
  548.       LOCATE 1, 10, 0
  549.       PRINT "                                                   "
  550.       LOCATE 1, 26, 0
  551.       COLOR 14
  552.         r! = FIX(r!)
  553.         b! = FIX(b!)
  554.         gr! = FIX(gr!)
  555.         pr! = FIX(pr!)
  556.         IF r! > pr! AND r! > b! AND r! > pr! THEN PRINT "RED IS THE WINNER WITH"; FIX(r!); "!!": FOR z = 1 TO 200 STEP 2: CIRCLE (320 + p3 / 2, 240), z, 4: NEXT z: w = 1
  557.         IF b! > r! AND b! > gr! AND b! > pr! THEN PRINT "BLUE IS THE WINNER WITH"; FIX(b!); "!!": FOR z = 1 TO 200 STEP 2: CIRCLE (320 + p3 / 2, 240), z, 1: NEXT z: w = 1
  558.         IF gr! > r! AND gr! > b! AND gr! > pr! THEN PRINT "GREEN IS THE WINNER WITH"; FIX(gr!); "!!": FOR z = 1 TO 200 STEP 2: CIRCLE (320 + p3 / 2, 240), z, 2: NEXT z: w = 1
  559.         IF pr! > r! AND pr! > b! AND pr! > gr! THEN PRINT "PURPLE IS THE WINNER WITH"; FIX(pr!); "!!": FOR z = 1 TO 200 STEP 2: CIRCLE (320 + p3 / 2, 240), z, 5: NEXT z: w = 1
  560.         IF (w = 0) AND (r! = b! OR r! = gr! OR r! = pr! OR b! = gr! OR b! = pr! OR gr! = pr!) THEN LOCATE 1, 34, 0: PRINT "IT'S A DRAW !!"
  561.       w = 0
  562.       KEY(19) OFF
  563.       r = 64 + p3a: b = 0: gr = 0: pr = 0
  564.       cp = 0
  565.       WHILE INKEY$ <> CHR$(13)
  566.       WEND
  567.   RETURN
  568. END IF
  569.   IF turn = 1 THEN co = 4
  570. IF pl < 3 THEN
  571.   IF turn = 2 THEN co = 1
  572. END IF
  573.  
  574. IF pl = 3 THEN
  575.   IF turn = 2 THEN co = 2
  576.   IF turn = 3 THEN co = 1
  577. END IF
  578.  
  579. IF pl > 3 THEN
  580.   IF turn = 2 THEN co = 5
  581.   IF turn = 3 THEN co = 2
  582.   IF turn = 4 THEN co = 1
  583. END IF
  584. ch = 0
  585. lg = 0
  586. no = 0
  587. go = 0
  588. z = 0
  589. movep = 0
  590. loseturn# = TIMER
  591. RETURN
  592.  
  593. 117 g = 0
  594.    GOTO 118
  595.  
  596. 119 IF pl > 2 THEN RETURN
  597. KEY(21) OFF
  598. KEY(19) OFF
  599. temp = lv
  600. lv = 10
  601. CALL compsrch(ch, lg, no, go, lv, p3a, p3b, pl)
  602. u = ((go MOD 8) + 1) * 50 + 65
  603. v = FIX(go / 8) * 50 + 37
  604. secs# = .001
  605. DO
  606. s = INT(RND * 15) + 1
  607. r = INT(RND * 3) + 1
  608. PUT (u + s, 0), a1, PSET
  609. CALL stall1(secs#)
  610. s = INT(RND * 5) + 1
  611. r = INT(RND * 15) + 1
  612. PUT (68 + s, v + r), a4, PSET
  613. CALL stall1(secs#)
  614. s = INT(RND * 15) + 1
  615. r = INT(RND * 3) + 1
  616. PUT (u + s, 0), a2, PSET
  617. CALL stall1(secs#)
  618. s = INT(RND * 5) + 1
  619. r = INT(RND * 15) + 1
  620. PUT (68 + s, v + r), a5, PSET
  621. CALL stall1(secs#)
  622. s = INT(RND * 15) + 1
  623. r = INT(RND * 3) + 1
  624. PUT (u + s, 0), a3, PSET
  625. CALL stall1(secs#)
  626. s = INT(RND * 5) + 1
  627. r = INT(RND * 15) + 1
  628. PUT (68 + s, v + r), a6, PSET
  629. CALL stall1(secs#)
  630. LOOP UNTIL INKEY$ = CHR$(13)
  631. KEY(19) ON
  632. KEY(21) ON
  633. lv = temp
  634. LINE (u + 5, 0)-(u + 55, 18), 0, BF
  635. LINE (74, v + 5)-(94, v + 55), 0, BF
  636. RETURN
  637.  
  638. SUB compch (ch, lg, no, go, z, lv, pl)
  639. IF pl <> 3 THEN
  640.   IF lv > 3 THEN IF ((ch <> 9) AND (ch <> 14) AND (ch <> 49) AND (ch <> 54)) AND no > 0 THEN no = no + 200
  641.   IF lv > 3 THEN IF ((ch = 9) OR (ch = 14) OR (ch = 49) OR (ch = 54)) AND no > 0 THEN no = 1
  642.   IF lv > 1 THEN IF ((ch < 8) OR (ch > 55) OR (ch MOD 8 = 0) OR (ch MOD 8 = 7)) AND no > 0 THEN no = no + 100
  643.   IF lv > 4 THEN IF (ch > 56) AND (ch < 63) AND (z < 56) AND ((piece(ch + 1) = 2) OR (piece(ch - 1) = 2)) THEN no = no - 300
  644.   IF lv > 4 THEN IF (ch > 0) AND (ch < 8) AND (z > 8) AND ((piece(ch + 1) = 2) OR (piece(ch - 1) = 2)) THEN no = no - 300
  645.   IF lv > 4 THEN IF ((ch > 0) AND (ch MOD 8 = 0) AND (z MOD 8) <> 0) AND (ch < 56) AND ((piece(ch - 8) = 2) OR (piece(ch + 8) = 2)) THEN no = no - 300
  646.   IF lv > 4 THEN IF ((ch > 7) AND (ch MOD 8 = 7) AND (z MOD 8) <> 7) AND (ch < 63) AND ((piece(ch - 8) = 2) OR (piece(ch + 8) = 2)) THEN no = no - 300
  647.   IF lv > 2 THEN IF ((ch = 0) OR (ch = 7) OR (ch = 56) OR (ch = 63)) AND no > 0 THEN no = no + 500
  648.   IF lv > 5 THEN IF ((ch = 18) OR (ch = 21) OR (ch = 42) OR (ch = 45)) AND no > 0 THEN no = no + 75
  649.   IF lv > 5 THEN IF ((z < 8) OR (z > 55) OR (z MOD 8 = 0) OR (z MOD 8 = 7)) AND ((ch < 8) OR (ch > 55) OR (ch MOD 8 = 0) OR (ch MOD 8 = 7)) AND no > 0 THEN no = no + 50
  650.   IF lv > 6 THEN IF ((ch < 7) AND (ch > 0)) AND ((piece(1) = 2) OR (piece(7) = 2)) AND no > 0 THEN no = 2
  651.   IF lv > 6 THEN IF ((ch > 56) AND (ch < 63)) AND ((piece(56) = 2) OR (piece(63) = 2)) AND no > 0 THEN no = 2
  652.   IF lv > 6 THEN IF (ch MOD 8 = 0) AND (ch <> 0) AND (ch <> 56) AND ((piece(0) = 2) OR (piece(56) = 2)) AND no > 0 THEN no = 2
  653.   IF lv > 6 THEN IF (ch MOD 8 = 7) AND (ch <> 7) AND (ch <> 63) AND ((piece(7) = 2) OR (piece(63) = 2)) AND no > 0 THEN no = 2
  654.   IF lv > 7 THEN IF ((ch = 24) OR (ch = 32) OR (ch = 31) OR (ch = 39)) AND ((piece(ch - 16) = 1) AND (piece(ch - 8) = 0)) AND no > 0 THEN no = 1
  655.   IF lv > 7 THEN IF ((ch = 24) OR (ch = 32) OR (ch = 31) OR (ch = 39)) AND ((piece(ch + 16) = 1) AND (piece(ch + 8) = 0)) AND no > 0 THEN no = 1
  656.   IF lv > 7 THEN IF ((ch = 3) OR (ch = 4) OR (ch = 59) OR (ch = 60)) AND ((piece(ch - 2) = 1) AND (piece(ch - 1) = 0)) AND no > 0 THEN no = 1
  657.   IF lv > 7 THEN IF ((ch = 3) OR (ch = 4) OR (ch = 59) OR (ch = 60)) AND ((piece(ch + 2) = 1) AND (piece(ch + 1) = 0)) AND no > 0 THEN no = 1
  658.   IF lv > 8 THEN IF ((ch MOD 8 = 0) OR (ch MOD 8 = 7)) AND ((piece(ch - 8) = 2) AND (piece(ch + 8) = 2)) AND no > 0 THEN no = no + 100
  659.   IF lv > 8 THEN IF (ch < 7 OR ch > 56) AND (piece(ch - 1) = 2) AND (piece(ch + 1) = 2) AND no > 0 THEN no = no + 100
  660.   IF lv > 9 THEN IF (ch < 56) AND (ch MOD 8 = z MOD 8) AND (ch > z) AND (piece(z - 8) = 2) AND (piece(ch + 8) = 0) AND no > 0 THEN no = 1
  661.   IF lv > 9 THEN IF (ch > 7) AND (ch MOD 8 = z MOD 8) AND (ch < z) AND (piece(z + 8) = 2) AND (piece(ch - 8) = 0) AND no > 0 THEN no = 1
  662.   IF lv > 9 THEN IF (ch MOD 8 <> 7) AND ((ch > z) AND (ABS(ch - z) < 8) AND (ch MOD 8 > z MOD 8)) AND (piece(z - 1) = 2) AND (piece(ch + 1) = 0) AND no > 0 THEN no = 1
  663.   IF lv > 9 THEN IF (ch MOD 8 <> 0) AND ((ch < z) AND (ABS(ch - z) < 8) AND (ch MOD 8 < z MOD 8)) AND (piece(z + 1) = 2) AND (piece(ch - 1) = 0) AND no > 0 THEN no = 1
  664.   IF lv > 9 THEN IF (ch MOD 8 <> 7 AND ch < 56) AND ((ch > z) AND (ABS(ch - z) MOD 9 = 0) AND (ch MOD 8 > z MOD 8)) AND (piece(z - 9) = 2) AND (piece(ch + 9) = 0) AND no > 0 THEN no = 1
  665.   IF lv > 9 THEN IF (ch MOD 8 <> 0 AND ch > 7) AND ((ch < z) AND (ABS(ch - z) MOD 9 = 0) AND (ch MOD 8 < z MOD 8)) AND (piece(z + 9) = 2) AND (piece(ch - 9) = 0) AND no > 0 THEN no = 1
  666.   IF lv > 9 THEN IF (ch MOD 8 <> 7 AND ch > 7) AND ((ch < z) AND (ABS(ch - z) MOD 7 = 0) AND (ch MOD 8 > z MOD 8)) AND (piece(z + 7) = 2) AND (piece(ch - 7) = 0) AND no > 0 THEN no = 1
  667.   IF lv > 9 THEN IF (ch MOD 8 <> 0 AND ch < 56) AND ((ch > z) AND (ABS(ch - z) MOD 7 = 0) AND (ch MOD 8 < z MOD 8)) AND (piece(z - 7) = 2) AND (piece(ch + 7) = 0) AND no > 0 THEN no = 1
  668.   IF lv > 9 THEN IF ((ch = 1 AND z > 8) OR (ch = 6 AND z > 8) OR (ch = 8 AND z MOD 8 <> 0) OR (ch = 15 AND z MOD 8 <> 7) OR (ch = 48 AND z MOD 8 <> 0) OR (ch = 55 AND z MOD 8 <> 7) OR (ch = 57 AND z < 56) OR (ch = 62 AND z < 56)) AND no > 0 THEN no = 3
  669. END IF
  670. IF pl = 3 THEN
  671.   IF lv > 3 THEN IF ((ch <> 10) AND (ch <> 16) AND (ch <> 55) AND (ch <> 61)) AND no > 0 THEN no = no + 200
  672.   IF lv > 3 THEN IF ((ch = 10) OR (ch = 16) OR (ch = 55) OR (ch = 61)) AND no > 0 THEN no = 1
  673.   IF lv > 1 THEN IF ((ch < 9) OR (ch > 62) OR (ch MOD 9 = 0) OR (ch MOD 9 = 8)) AND no > 0 THEN no = no + 100
  674.   IF lv > 4 THEN IF (ch > 63) AND (ch < 71) AND (z < 63) AND ((piece(ch + 1) > 1) OR (piece(ch - 1) > 1)) THEN no = no - 300
  675.   IF lv > 4 THEN IF (ch > 0) AND (ch < 9) AND (z > 9) AND ((piece(ch + 1) > 1) OR (piece(ch - 1) > 1)) THEN no = no - 300
  676.   IF lv > 4 THEN IF ((ch > 0) AND (ch MOD 9 = 0) AND (z MOD 9) <> 0) AND (ch < 63) AND ((piece(ch - 8) > 1) OR (piece(ch + 8) > 1)) THEN no = no - 300
  677.   IF lv > 4 THEN IF ((ch > 8) AND (ch MOD 9 = 8) AND (z MOD 9) <> 8) AND (ch < 71) AND ((piece(ch - 8) > 1) OR (piece(ch + 8) > 1)) THEN no = no - 300
  678.   IF lv > 2 THEN IF ((ch = 0) OR (ch = 8) OR (ch = 63) OR (ch = 71)) AND no > 0 THEN no = no + 500
  679.   IF lv > 5 THEN IF ((ch = 20) OR (ch = 24) OR (ch = 47) OR (ch = 51)) AND no > 0 THEN no = no + 75
  680.   IF lv > 5 THEN IF ((z < 9) OR (z > 62) OR (z MOD 9 = 0) OR (z MOD 9 = 8)) AND ((ch < 9) OR (ch > 62) OR (ch MOD 9 = 0) OR (ch MOD 9 = 8)) AND no > 0 THEN no = no + 50
  681.   IF lv > 6 THEN IF ((ch < 8) AND (ch > 0)) AND ((piece(1) > 1) OR (piece(8) > 1)) AND no > 0 THEN no = 2
  682.   IF lv > 6 THEN IF ((ch > 63) AND (ch < 71)) AND ((piece(63) > 1) OR (piece(71) > 1)) AND no > 0 THEN no = 2
  683.   IF lv > 6 THEN IF (ch MOD 9 = 0) AND (ch <> 0) AND (ch <> 63) AND ((piece(0) > 1) OR (piece(63) > 1)) AND no > 0 THEN no = 2
  684.   IF lv > 6 THEN IF (ch MOD 9 = 8) AND (ch <> 8) AND (ch <> 71) AND ((piece(8) > 1) OR (piece(71) > 1)) AND no > 0 THEN no = 2
  685.   IF lv > 7 THEN IF ((ch = 27) OR (ch = 36) OR (ch = 35) OR (ch = 44)) AND ((piece(ch - 16) = 1) AND (piece(ch - 8) = 0)) AND no > 0 THEN no = 1
  686.   IF lv > 7 THEN IF ((ch = 27) OR (ch = 36) OR (ch = 35) OR (ch = 44)) AND ((piece(ch + 16) = 1) AND (piece(ch + 8) = 0)) AND no > 0 THEN no = 1
  687.   IF lv > 7 THEN IF ((ch = 3) OR (ch = 4) OR (ch = 5) OR (ch = 66) OR (ch = 67) OR (ch = 68)) AND ((piece(ch - 2) = 1) AND (piece(ch - 1) = 0)) AND no > 0 THEN no = 1                                                                                                     'DAVID KOLLER :)
  688.   IF lv > 7 THEN IF ((ch = 3) OR (ch = 4) OR (ch = 5) OR (ch = 66) OR (ch = 67) OR (ch = 68)) AND ((piece(ch + 2) = 1) AND (piece(ch + 1) = 0)) AND no > 0 THEN no = 1
  689.   IF lv > 8 THEN IF ((ch MOD 9 = 0) OR (ch MOD 9 = 8)) AND ((piece(ch - 8) > 1) AND (piece(ch + 8) > 1)) AND no > 0 THEN no = no + 100
  690.   IF lv > 8 THEN IF (ch < 8 OR ch > 63) AND (piece(ch - 1) > 1) AND (piece(ch + 1) > 1) AND no > 0 THEN no = no + 100
  691.   IF lv > 9 THEN IF (ch < 63) AND (ch MOD 9 = z MOD 9) AND (ch > z) AND (piece(z - 8) > 1) AND (piece(ch + 8) = 0) AND no > 0 THEN no = 1
  692.   IF lv > 9 THEN IF (ch > 8) AND (ch MOD 9 = z MOD 9) AND (ch < z) AND (piece(z + 8) > 1) AND (piece(ch - 8) = 0) AND no > 0 THEN no = 1
  693.   IF lv > 9 THEN IF (ch MOD 9 <> 8) AND ((ch > z) AND (ABS(ch - z) < 8) AND (ch MOD 8 > z MOD 8)) AND (piece(z - 1) = 2) AND (piece(ch + 1) = 0) AND no > 0 THEN no = 1
  694.   IF lv > 9 THEN IF (ch MOD 9 <> 0) AND ((ch < z) AND (ABS(ch - z) < 8) AND (ch MOD 8 < z MOD 8)) AND (piece(z + 1) = 2) AND (piece(ch - 1) = 0) AND no > 0 THEN no = 1
  695.   IF lv > 9 THEN IF (ch MOD 9 <> 8 AND ch < 63) AND ((ch > z) AND (ABS(ch - z) MOD 9 = 0) AND (ch MOD 9 > z MOD 9)) AND (piece(z - 9) = 2) AND (piece(ch + 9) = 0) AND no > 0 THEN no = 1
  696.   IF lv > 9 THEN IF (ch MOD 9 <> 0 AND ch > 8) AND ((ch < z) AND (ABS(ch - z) MOD 9 = 0) AND (ch MOD 9 < z MOD 9)) AND (piece(z + 9) = 2) AND (piece(ch - 9) = 0) AND no > 0 THEN no = 1
  697.   IF lv > 9 THEN IF (ch MOD 9 <> 8 AND ch > 8) AND ((ch < z) AND (ABS(ch - z) MOD 7 = 0) AND (ch MOD 9 > z MOD 9)) AND (piece(z + 7) = 2) AND (piece(ch - 7) = 0) AND no > 0 THEN no = 1
  698.   IF lv > 9 THEN IF (ch MOD 9 <> 0 AND ch < 63) AND ((ch > z) AND (ABS(ch - z) MOD 7 = 0) AND (ch MOD 9 < z MOD 9)) AND (piece(z - 7) = 2) AND (piece(ch + 7) = 0) AND no > 0 THEN no = 1
  699.   IF lv > 9 THEN IF ((ch = 1 AND z > 9) OR (ch = 7 AND z > 9) OR (ch = 9 AND z MOD 9 <> 0) OR (ch = 17 AND z MOD 9 <> 8) OR (ch = 54 AND z MOD 9 <> 0) OR (ch = 62 AND z MOD 9 <> 8) OR (ch = 64 AND z < 63) OR (ch = 70 AND z < 63)) AND no > 0 THEN no = 3
  700. END IF
  701.   IF no > lg THEN lg = no: go = ch
  702. END SUB
  703.  
  704. SUB compsrch (ch, lg, no, go, lv, p3a, p3b, pl)
  705.   FOR z = 0 TO (63 + p3a)
  706.     IF piece(z) = 1 THEN
  707.       FOR w = 1 TO z MOD (8 + p3b)
  708.         IF piece(z - w * 9) < 2 THEN
  709.           no = w - 1
  710.           ch = z - w * 9
  711.           IF (piece(z - w * 9) = 1) OR (z - w * 9) < 0 OR (z - w * 9) > (63 + p3a) THEN no = 0
  712.           w = z MOD (8 + p3b)
  713.         END IF
  714.       NEXT w
  715.       CALL compch(ch, lg, no, go, z, lv, pl)
  716.     
  717.       FOR w = 1 TO FIX(z / (8 + p3b))
  718.         IF piece(z - w * 8) < 2 THEN
  719.           no = w - 1
  720.           ch = z - w * 8
  721.           IF (piece(z - w * 8) = 1) OR (z - w * 8) < 0 OR (z - w * 8) > (63 + p3a) THEN no = 0
  722.           w = FIX(z / (8 + p3b))
  723.         END IF
  724.       NEXT w
  725.       CALL compch(ch, lg, no, go, z, lv, pl)
  726.     
  727.       FOR w = 1 TO 7 + p3b - z MOD (8 + p3b)
  728.         IF piece(z - w * 7) < 2 THEN
  729.           no = w - 1
  730.           ch = z - w * 7
  731.           IF (piece(z - w * 7) = 1) OR (z - w * 7) < 0 OR (z - w * 7) > (63 + p3a) THEN no = 0
  732.           w = 7 + p3b - z MOD (8 + p3b)
  733.         END IF
  734.       NEXT w
  735.       CALL compch(ch, lg, no, go, z, lv, pl)
  736.     
  737.       FOR w = 1 TO z MOD (8 + p3b)
  738.         IF piece(z - w) < 2 THEN
  739.           no = w - 1
  740.           ch = z - w
  741.           IF (piece(z - w) = 1) OR (z - w) < 0 OR (z - w) > (63 + p3a) THEN no = 0
  742.           w = z MOD (8 + p3b)
  743.         END IF
  744.       NEXT w
  745.       CALL compch(ch, lg, no, go, z, lv, pl)
  746.     
  747.       FOR w = 1 TO 7 + p3b - z MOD (8 + p3b)
  748.         IF piece(z + w) < 2 THEN
  749.           no = w - 1
  750.           ch = z + w
  751.           IF (piece(z + w) = 1) OR (z + w) < 0 OR (z + w) > (63 + p3a) THEN no = 0  'DAVID KOLLER
  752.           w = 7 + p3b - z MOD (8 + p3b)
  753.         END IF
  754.       NEXT w
  755.       CALL compch(ch, lg, no, go, z, lv, pl)
  756.     
  757.       FOR w = 1 TO z MOD (8 + p3b)
  758.         IF piece(z + w * 7) < 2 THEN
  759.           no = w - 1
  760.           ch = z + w * 7
  761.           IF (piece(z + w * 7) = 1) OR (z + w * 7) < 0 OR (z + w * 7) > (63 + p3a) THEN no = 0
  762.           w = z MOD (8 + p3b)
  763.         END IF
  764.       NEXT w
  765.       CALL compch(ch, lg, no, go, z, lv, pl)
  766.     
  767.       FOR w = 1 TO 7 + p3b - FIX(z / (8 + p3b))
  768.         IF piece(z + w * 8) < 2 THEN
  769.           no = w - 1
  770.           ch = z + w * 8
  771.           IF (piece(z + w * 8) = 1) OR (z + w * 8) < 0 OR (z + w * 8) > (63 + p3a) THEN no = 0
  772.           w = 7 + p3b - FIX(z / (8 + p3b))
  773.         END IF
  774.       NEXT w
  775.       CALL compch(ch, lg, no, go, z, lv, pl)
  776.     
  777.       FOR w = 1 TO 7 + p3b - z MOD (8 + p3b)
  778.         IF piece(z + w * 9) < 2 THEN
  779.           no = w - 1
  780.           ch = z + w * 9
  781.           IF (piece(z + w * 9) = 1) OR (z + w * 9) < 0 OR (z + w * 9) > (63 + p3a) THEN no = 0
  782.           w = 7 + p3b - z MOD (8 + p3b)
  783.         END IF
  784.       NEXT w
  785.       CALL compch(ch, lg, no, go, z, lv, pl)
  786.     END IF
  787.   NEXT z
  788. END SUB
  789.  
  790. SUB instruct
  791.   CLS
  792.   COLOR 15
  793.   PRINT "OTHULLO KEYBOARD COMMANDS"
  794.   PRINT "*************************"
  795.   PRINT ""
  796.   PRINT "ARROWS .. MOVE POINTER"
  797.   PRINT ""
  798.   PRINT "H ....... HINT! COMPUTER SUGGESTS MOVE (1 & 2 PLAYER MODES)"
  799.   PRINT "P ....... PASS TURN IF YOU CAN'T MOVE"
  800.   PRINT "T ....... TALLY SCORES IF NOBODY CAN MOVE"
  801.   PRINT ""
  802.   PRINT "ENTER ... PLACES CHIPS / RETURNS FROM HINT MODE"
  803.   PRINT ""
  804.   INPUT "", dud
  805.   COLOR 14
  806. END SUB
  807.  
  808. SUB ointro
  809.   CIRCLE (60, 240), 50, 1
  810.   PAINT (60, 240), 1
  811.   CIRCLE (580, 240), 50, 1
  812.   PAINT (580, 240), 1
  813.   x = 90
  814.   y = 480
  815.   WHILE y > 240
  816.     LINE (x + 40, y + 2)-(x + 100, y + 2), 0        't top
  817.     LINE (x + 40, y)-(x + 100, y), 1
  818.     LINE (x + 70, y + 51)-(x + 70, y + 52), 0   ' t mid
  819.     LINE (x + 70, y)-(x + 70, y + 50), 1
  820.     y = y - 2
  821.   WEND
  822.   y = 0
  823.   WHILE y < 240
  824.     LINE (x + 120, y + 38)-(x + 180, y + 38), 0     ' h mid
  825.     LINE (x + 120, y + 40)-(x + 180, y + 40), 1
  826.     LINE (x + 120, y - 1)-(x + 120, y - 2), 0    ' h left
  827.     LINE (x + 120, y)-(x + 120, y + 50), 1
  828.     LINE (x + 180, y - 1)-(x + 180, y - 2), 0   ' h right
  829.     LINE (x + 180, y)-(x + 180, y + 50), 1
  830.     y = y + 2
  831.   WEND
  832.   y = 480
  833.   WHILE y > 240
  834.     LINE (x + 200, y + 52)-(x + 260, y + 52), 0  ' u bot
  835.     LINE (x + 200, y + 50)-(x + 260, y + 50), 1
  836.     LINE (x + 200, y + 51)-(x + 200, y + 52), 0    ' u left
  837.     LINE (x + 200, y)-(x + 200, y + 50), 1
  838.     LINE (x + 260, y + 51)-(x + 260, y + 52), 0    ' u right
  839.     LINE (x + 260, y)-(x + 260, y + 50), 1
  840.     y = y - 2
  841.   WEND
  842.   y = 0
  843.   WHILE y < 240
  844.     LINE (x + 280, y + 48)-(x + 340, y + 48), 0' l bot
  845.     LINE (x + 280, y + 50)-(x + 340, y + 50), 1
  846.     LINE (x + 280, y - 1)-(x + 280, y - 2), 0  ' l left
  847.     LINE (x + 280, y)-(x + 280, y + 50), 1
  848.     y = y + 2
  849.   WEND
  850.   y = 640
  851.   WHILE y > 240
  852.     LINE (x + 360, y + 52)-(x + 420, y + 52), 0  ' l bot
  853.     LINE (x + 360, y + 50)-(x + 420, y + 50), 1
  854.     LINE (x + 360, y + 51)-(x + 360, y + 52), 0    ' l left
  855.     LINE (x + 360, y)-(x + 360, y + 50), 1
  856.     y = y - 2
  857.   WEND
  858.  
  859.   LOCATE 14, 27
  860.   PRINT "DAVID KOLLER GAMING PRESENTS"
  861. y = 0
  862. WHILE INKEY$ <> CHR$(13)
  863. y = y + 2
  864. IF y = 640 THEN y = 0
  865. FOR x = 0 TO 180 STEP 10
  866.   LINE (0 + y, x + 2)-(260, 0), 15
  867.   LINE (0 + y, x + 3)-(260, 0), 7
  868.   LINE (0 + y, x + 4)-(260, 0), 8
  869.   LINE (0 + y, x + 1)-(260, 0), 7
  870.   LINE (0 + y, x)-(260, 0), 8
  871. NEXT x
  872.  
  873. FOR x = 0 TO 180 STEP 10
  874.   LINE (640 - y, x + 2)-(380, 0), 15
  875.   LINE (640 - y, x + 3)-(380, 0), 7
  876.   LINE (640 - y, x + 4)-(380, 0), 8
  877.   LINE (640 - y, x + 1)-(380, 0), 7
  878.   LINE (640 - y, x)-(380, 0), 8
  879. NEXT x
  880.  
  881. FOR x = 480 TO 300 STEP -10
  882.   LINE (640 - y, x + 2)-(380, 480), 15
  883.   LINE (640 - y, x + 3)-(380, 480), 7
  884.   LINE (640 - y, x + 4)-(380, 480), 8
  885.   LINE (640 - y, x + 1)-(380, 480), 7
  886.   LINE (640 - y, x)-(380, 480), 8
  887. NEXT x
  888.  
  889. FOR x = 480 TO 300 STEP -10
  890.   LINE (0 + y, x + 2)-(260, 480), 15
  891.   LINE (0 + y, x + 3)-(260, 480), 7
  892.   LINE (0 + y, x + 4)-(260, 480), 8
  893.   LINE (0 + y, x + 1)-(260, 480), 7
  894.   LINE (0 + y, x)-(260, 480), 8
  895. NEXT x
  896. WEND
  897. SLEEP 1
  898. END SUB
  899.  
  900. SUB pointer (x, y, p)
  901.   LINE (x - 24, y - 24)-(x + 24, y - 21), 15, BF
  902.   LINE (x + 21, y - 24)-(x + 24, y + 24), 15, BF
  903.   LINE (x - 24, y + 24)-(x + 24, y + 21), 15, BF
  904.   LINE (x - 24, y - 24)-(x - 21, y + 24), 15, BF
  905.   PUT (x - 25, y - 25), sq, AND
  906. END SUB
  907.  
  908. SUB scan (p, pl, turn, p3)
  909.   pp = -1
  910.   PLAY "mb o1 l25 ef"
  911.   FOR yy = 65 TO 415 STEP 50
  912.     FOR xx = 145 TO 495 + p3 STEP 50
  913.       pp = pp + 1
  914.       IF turn = 1 THEN
  915.         IF piece(pp) = 1 THEN PUT (xx - 15, yy - 15), rpc, PSET
  916.         IF piece(pp) = 2 THEN PUT (xx - 15, yy - 15), bpc, PSET
  917.         IF piece(pp) = 3 THEN PUT (xx - 15, yy - 15), gpc, PSET
  918.         IF piece(pp) = 4 THEN PUT (xx - 15, yy - 15), ppc, PSET
  919.       ELSEIF turn = 2 THEN
  920.         IF piece(pp) = 1 AND pl > 3 THEN PUT (xx - 15, yy - 15), ppc, PSET
  921.         IF piece(pp) = 2 AND pl > 3 THEN PUT (xx - 15, yy - 15), rpc, PSET
  922.         IF piece(pp) = 3 AND pl > 3 THEN PUT (xx - 15, yy - 15), bpc, PSET
  923.         IF piece(pp) = 4 AND pl > 3 THEN PUT (xx - 15, yy - 15), gpc, PSET
  924.         IF piece(pp) = 1 AND pl = 3 THEN PUT (xx - 15, yy - 15), gpc, PSET
  925.         IF piece(pp) = 2 AND pl = 3 THEN PUT (xx - 15, yy - 15), rpc, PSET
  926.         IF piece(pp) = 3 AND pl = 3 THEN PUT (xx - 15, yy - 15), bpc, PSET
  927.         IF piece(pp) = 1 AND pl < 3 THEN PUT (xx - 15, yy - 15), bpc, PSET
  928.         IF piece(pp) = 2 AND pl < 3 THEN PUT (xx - 15, yy - 15), rpc, PSET
  929.       ELSEIF turn = 3 THEN
  930.         IF piece(pp) = 1 AND pl > 3 THEN PUT (xx - 15, yy - 15), gpc, PSET
  931.         IF piece(pp) = 2 AND pl > 3 THEN PUT (xx - 15, yy - 15), ppc, PSET
  932.         IF piece(pp) = 3 AND pl > 3 THEN PUT (xx - 15, yy - 15), rpc, PSET
  933.         IF piece(pp) = 4 AND pl > 3 THEN PUT (xx - 15, yy - 15), bpc, PSET
  934.         IF piece(pp) = 1 AND pl = 3 THEN PUT (xx - 15, yy - 15), bpc, PSET
  935.         IF piece(pp) = 2 AND pl = 3 THEN PUT (xx - 15, yy - 15), gpc, PSET
  936.         IF piece(pp) = 3 AND pl = 3 THEN PUT (xx - 15, yy - 15), rpc, PSET
  937.       ELSEIF turn = 4 THEN
  938.         IF piece(pp) = 1 THEN PUT (xx - 15, yy - 15), bpc, PSET
  939.         IF piece(pp) = 2 THEN PUT (xx - 15, yy - 15), gpc, PSET
  940.         IF piece(pp) = 3 THEN PUT (xx - 15, yy - 15), ppc, PSET
  941.         IF piece(pp) = 4 THEN PUT (xx - 15, yy - 15), rpc, PSET
  942.       END IF
  943.     NEXT xx
  944.   NEXT yy
  945. END SUB
  946.  
  947. SUB stall1 (secs#)
  948.   a# = TIMER
  949.   WHILE TIMER - secs# < a#
  950.   WEND
  951. END SUB
  952.  
  953. SUB tally (turn, pl, r!, b!, gr!, pr!)
  954.  
  955. r! = .4
  956. b! = .3
  957. gr! = .2
  958. pr! = .1
  959.  
  960. IF pl < 3 THEN
  961. FOR z = 0 TO 72
  962. SELECT CASE turn
  963.   CASE 1:
  964.     IF piece(z) = 1 THEN r! = r! + 1
  965.     IF piece(z) = 2 THEN b! = b! + 1
  966.   CASE 2:
  967.     IF piece(z) = 2 THEN r! = r! + 1
  968.     IF piece(z) = 1 THEN b! = b! + 1
  969. END SELECT
  970. NEXT z
  971. END IF
  972.  
  973. IF pl = 3 THEN
  974. FOR z = 0 TO 72
  975. SELECT CASE turn
  976.   CASE 1:
  977.     IF piece(z) = 1 THEN r! = r! + 1
  978.     IF piece(z) = 2 THEN b! = b! + 1
  979.     IF piece(z) = 3 THEN gr! = gr! + 1
  980.   CASE 2:
  981.     IF piece(z) = 2 THEN r! = r! + 1
  982.     IF piece(z) = 3 THEN b! = b! + 1
  983.     IF piece(z) = 1 THEN gr! = gr! + 1
  984.   CASE 3:
  985.     IF piece(z) = 3 THEN r! = r! + 1
  986.     IF piece(z) = 1 THEN b! = b! + 1
  987.     IF piece(z) = 2 THEN gr! = gr! + 1
  988. END SELECT
  989. NEXT z
  990. END IF
  991.  
  992. IF pl = 4 THEN
  993. FOR z = 0 TO 72
  994. SELECT CASE turn
  995.   CASE 1:
  996.     IF piece(z) = 1 THEN r! = r! + 1
  997.     IF piece(z) = 2 THEN b! = b! + 1
  998.     IF piece(z) = 3 THEN gr! = gr! + 1
  999.     IF piece(z) = 4 THEN pr! = pr! + 1
  1000.   CASE 2:
  1001.     IF piece(z) = 2 THEN r! = r! + 1
  1002.     IF piece(z) = 3 THEN b! = b! + 1
  1003.     IF piece(z) = 4 THEN gr! = gr! + 1
  1004.     IF piece(z) = 1 THEN pr! = pr! + 1
  1005.   CASE 3:
  1006.     IF piece(z) = 3 THEN r! = r! + 1
  1007.     IF piece(z) = 4 THEN b! = b! + 1
  1008.     IF piece(z) = 1 THEN gr! = gr! + 1
  1009.     IF piece(z) = 2 THEN pr! = pr! + 1
  1010.   CASE 4:
  1011.     IF piece(z) = 4 THEN r! = r! + 1
  1012.     IF piece(z) = 1 THEN b! = b! + 1
  1013.     IF piece(z) = 2 THEN gr! = gr! + 1
  1014.     IF piece(z) = 3 THEN pr! = pr! + 1
  1015. END SELECT
  1016. NEXT z
  1017. END IF
  1018.  
  1019. rrk = 4
  1020. brk = 4
  1021. grk = 4
  1022. prk = 4
  1023.  
  1024. IF r! > b! THEN rrk = rrk - 1
  1025. IF r! > gr! THEN rrk = rrk - 1
  1026. IF r! > pr! THEN rrk = rrk - 1
  1027. IF b! > r! THEN brk = brk - 1
  1028. IF b! > gr! THEN brk = brk - 1
  1029. IF b! > pr! THEN brk = brk - 1
  1030. IF gr! > b! THEN grk = grk - 1
  1031. IF gr! > r! THEN grk = grk - 1
  1032. IF gr! > pr! THEN grk = grk - 1
  1033. IF pr! > b! THEN prk = prk - 1
  1034. IF pr! > gr! THEN prk = prk - 1
  1035. IF pr! > r! THEN prk = prk - 1
  1036.  
  1037. COLOR 15
  1038. CIRCLE (39, 67 + rrk * 63), 10, 4
  1039. PAINT (39, 67 + rrk * 63), 4
  1040. CIRCLE (39, 67 + rrk * 63), 7, 0
  1041. PAINT (39, 67 + rrk * 63), 12, 0
  1042. LOCATE 6 + rrk * 4, 4
  1043. PRINT FIX(r!)
  1044. CIRCLE (39, 67 + brk * 63), 10, 1
  1045. PAINT (39, 67 + brk * 63), 1
  1046. CIRCLE (39, 67 + brk * 63), 7, 0
  1047. PAINT (39, 67 + brk * 63), 9, 0
  1048. LOCATE 6 + brk * 4, 4
  1049. PRINT FIX(b!)
  1050. IF pl > 2 THEN
  1051.   CIRCLE (39, 67 + grk * 63), 10, 2
  1052.   PAINT (39, 67 + grk * 63), 2
  1053.   CIRCLE (39, 67 + grk * 63), 7, 0
  1054.   PAINT (39, 67 + grk * 63), 10, 0
  1055.   LOCATE 6 + grk * 4, 4
  1056.   PRINT FIX(gr!)
  1057. END IF
  1058. IF pl > 3 THEN
  1059.   CIRCLE (39, 67 + prk * 63), 10, 5
  1060.   PAINT (39, 67 + prk * 63), 5
  1061.   CIRCLE (39, 67 + prk * 63), 7, 0
  1062.   PAINT (39, 67 + prk * 63), 13, 0
  1063.   LOCATE 6 + prk * 4, 4
  1064.   PRINT FIX(pr!)
  1065. END IF
  1066. END SUB
  1067.  
  1068.