home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol142 / ozdot.bas < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  7.7 KB  |  230 lines

  1. 100 ' **********************************************"
  2. 110 ' **********************************************
  3. 120 ' **                                          **
  4. 130 ' **            CONNECT THE DOTS              **
  5. 140 ' **                                          **
  6. 150 ' **             by Chuck Lund                **
  7. 160 ' **                                          **
  8. 170 ' **         originally appeared in           **
  9. 180 ' **           Creative Computing             **
  10. 190 ' **              Jan/Feb 1976                **
  11. 200 ' **                                          **
  12. 210 ' **         Modified for use on the          **
  13. 220 ' **           OSBORNE 1 Computer             **
  14. 230 ' **                  by                      **
  15. 240 ' **              ALEX MORALES                **
  16. 250 ' **             (213) 969-4921               **
  17. 260 ' **                                          **
  18. 270 ' **********************************************
  19. 280 ' **********************************************
  20. 290 GR$=CHR$(27)+"g"        'GRAPHICS MODE
  21. 300 NG$=CHR$(27)+"G"        'END GRAPHICS MODE
  22. 310 HI$=CHR$(27)+CHR$(41)   'HALF INTENSITY MODE
  23. 320 NI$=CHR$(27)+CHR$(40)   'NORMAL INTENSITY MODE
  24. 330 ' 61440 IS THE START OF SCREEN RAM
  25. 340 GOSUB 2230
  26. 350 PRINT CHR$(26);"INITIALIZING...":IF X$="Y" THEN ERASE A,X,Y
  27. 360 DIM A(12,12),X(9,9),Y(9,9)
  28. 370 V=0:GOSUB 2120
  29. 380 FOR R=1 TO 12
  30. 390 FOR C=1 TO 12
  31. 400 IF R/2=INT(R/2) THEN 440
  32. 410 IF C/2=INT(C/2) THEN 440
  33. 420 A(R,C)=-50
  34. 430 GOTO 450
  35. 440 A(R,C)=0
  36. 450 NEXT C,R
  37. 460 IF V=1 THEN 480
  38. 470 PRINT CHR$(26)
  39. 480 GOSUB 1210
  40. 490 PRINT:PRINT"YOUR MOVE..."
  41. 500 GOSUB 1480
  42. 510 A(X,Y)=50
  43. 520 IF X/2=INT(X/2) THEN 590
  44. 530 IF A(X-2,Y)+A(X-1,Y+1)+A(X-1,Y-1)<>150 THEN 560
  45. 540 P=1
  46. 550 A(X-1,Y)=1
  47. 560 IF A(X+2,Y)+A(X+1,Y+1)+A(X+1,Y-1)<>150 THEN 650
  48. 570 A(X+1,Y)=1
  49. 580 GOTO 480
  50. 590 IF A(X,Y-2)+A(X+1,Y-1)+A(X-1,Y-1)<>150 THEN 620
  51. 600 A(X,Y-1)=1
  52. 610 P=1
  53. 620 IF A(X,Y+2)+A(X+1,Y+1)+A(X-1,Y+1)<>150 THEN 650
  54. 630 A(X,Y+1)=1
  55. 640 GOTO 480
  56. 650 IF P=1 THEN 480
  57. 660 GOSUB 1210
  58. 670 PRINT:PRINT"MY MOVE...  "
  59. 680 FOR R=4 TO 10 STEP 2
  60. 690 FOR C=4 TO 10 STEP 2
  61. 700 IF A(R-1,C)+A(R+1,C)+A(R,C-1)+A(R,C+1)<>150 THEN 890
  62. 710 A(R,C)=-1
  63. 720 IF A(R-1,C)<>0 THEN 760
  64. 730 A(R-1,C)=50
  65. 740 IF A(R-3,C)+A(R-2,C-1)+A(R-2,C+1)<>150 THEN 660
  66. 750 A(R-2,C)=-1
  67. 760 IF A(R+1,C)<>0 THEN 800
  68. 770 A(R+1,C)=50
  69. 780 IF A(R+3,C)+A(R+2,C-1)+A(R+2,C+1)<>150 THEN 660
  70. 790 A(R+2,C)=-1
  71. 800 IF A(R,C-1)<>0 THEN 840
  72. 810 A(R,C-1)=50
  73. 820 IF A(R,C-3)+A(R-1,C-2)+A(R+1,C+2)<>150 THEN 660
  74. 830 A(R,C-2)=-1
  75. 840 IF A(R,C+1)<>0 THEN 660
  76. 850 A(R,C+1)=50
  77. 860 IF A(R,C+3)+A(R-1,C+2)+A(R+1,C+2)<>150 THEN 660
  78. 870 A(R,C+2)=-1
  79. 880 GOTO 660
  80. 890 NEXT C,R
  81. 900 IF E>1 THEN 950
  82. 910 IF A(12-X,12-Y)<>0 THEN 950
  83. 920 A(12-X,12-Y)=50
  84. 930 IF E>1 THEN 1080
  85. 940 GOTO 480
  86. 950 FOR R=3 TO 9
  87. 960 FOR C=3 TO 9
  88. 970 IF (R+C)/2=INT((R+C)/2) THEN 1060
  89. 980 IF A(R,C)<>0 THEN 1060
  90. 990 IF R/2=INT(R/2) THEN 1040
  91. 1000 IF A(R-2,C)+A(R-1,C-1)+A(R-1,C+1)=100 THEN 1060
  92. 1010 IF A(R+2,C)+A(R+1,C-1)+A(R+1,C+1)=100 THEN 1060
  93. 1020 A(R,C)=50
  94. 1030 GOTO 480
  95. 1040 IF A(R,C-2)+A(R-1,C-1)+A(R+1,C-1)=100 THEN 1060
  96. 1050 IF A(R,C+2)+A(R-1,C+2)+A(R+1,C+1)<>100 THEN 1020
  97. 1060 NEXT C,R
  98. 1070 IF E>1 THEN 910
  99. 1080 R=INT(RND*7)+3
  100. 1090 C=INT(RND*7)+3
  101. 1100 IF R/2=INT(R/2) THEN 1130
  102. 1110 IF C/2=INT(C/2) THEN 1150
  103. 1120 GOTO 1080
  104. 1130 IF C/2<>INT(C/2) THEN 1150
  105. 1140 GOTO 1080
  106. 1150 IF A(R,C)<>0 THEN 1080
  107. 1160 A(R,C)=50
  108. 1170 GOTO 480
  109. 1180 PRINT:PRINT"PLAY AGAIN? (Y/N) ";:X$=INPUT$(1)
  110. 1190 IF X$="Y" THEN 350
  111. 1200 PRINT X$:END
  112. 1210 P=0:D=0:E=0
  113. 1220 FOR R=3 TO 9
  114. 1230 ON R-2 GOSUB 1250,1260,1250,1260,1250,1260,1250
  115. 1240 NEXT:GOTO 1370
  116. 1250 A$(R-2)=GR$+CHR$(13)+STRING$(6,(32+((A(R,4)=50)*10)))+CHR$(13)+STRING$(6,(32+((A(R,6)=50)*10)))+CHR$(13)+STRING$(6,(32+((A(R,8)=50)*10)))+CHR$(13)+NG$:RETURN
  117. 1260 A$(R-2)=GR$+CHR$(32+((A(R,3)=50)*10))+NG$
  118. 1270 IF A(R,4)=1 THEN A$(R-2)=A$(R-2)+HI$+"PLAYER"+NI$:E=E+1:GOTO 1290
  119. 1280 IF A(R,4)=-1 THEN A$(R-2)=A$(R-2)+HI$+" COMP "+NI$:D=D+1 ELSE A$(R-2)=A$(R-2)+"      "
  120. 1290 A$(R-2)=A$(R-2)+GR$+CHR$(32+((A(R,5)=50)*10))+NG$
  121. 1300 IF A(R,6)=1 THEN A$(R-2)=A$(R-2)+HI$+"PLAYER"+NI$:E=E+1:GOTO 1320
  122. 1310 IF A(R,6)=-1 THEN A$(R-2)=A$(R-2)+HI$+" COMP "+NI$:D=D+1 ELSE A$(R-2)=A$(R-2)+"      "
  123. 1320 A$(R-2)=A$(R-2)+GR$+CHR$(32+((A(R,7)=50)*10))+NG$
  124. 1330 IF A(R,8)=1 THEN A$(R-2)=A$(R-2)+HI$+"PLAYER"+NI$:E=E+1:GOTO 1350
  125. 1340 IF A(R,8)=-1 THEN A$(R-2)=A$(R-2)+HI$+" COMP "+NI$:D=D+1 ELSE A$(R-2)=A$(R-2)+"      "
  126. 1350 A$(R-2)=A$(R-2)+GR$+CHR$(32+((A(R,9)=50)*10))+NG$
  127. 1360 RETURN
  128. 1370 PRINT CHR$(&H1E)
  129. 1380 FOR XXX=1 TO 7
  130. 1390 IF XXX MOD 2 = 0 THEN 1410
  131. 1400 PRINT TAB(15);A$(XXX):GOTO 1440
  132. 1410 FOR YYY=1 TO 3
  133. 1420 PRINT TAB(15);A$(XXX)
  134. 1430 NEXT YYY
  135. 1440 NEXT XXX
  136. 1450 IF E>=5 THEN PRINT:PRINT"YOU WON!       ":PRINT:GOTO 1180
  137. 1460 IF D>=5 THEN PRINT:PRINT"I WON!         ":PRINT:GOTO 1180
  138. 1470 RETURN
  139. 1480 FOR R=3 TO 9
  140. 1490 FOR C=3 TO 9
  141. 1500 IF X(R,C)=0 THEN 1520
  142. 1510 IF A(R,C)=0 THEN 1530
  143. 1520 NEXT C,R
  144. 1530 XX=X(R,C):YY=Y(R,C)
  145. 1540 POKE 61440!+XX+128*YY,0
  146. 1550 M$=INPUT$(1)
  147. 1560 IF M$=CHR$(8) THEN GOSUB 1620
  148. 1570 IF M$=CHR$(10) THEN GOSUB 1730
  149. 1580 IF M$=CHR$(11) THEN GOSUB 1860
  150. 1590 IF M$=CHR$(12) THEN GOSUB 2010
  151. 1600 IF M$=CHR$(13) THEN X=R:Y=C:RETURN
  152. 1610 GOTO 1540
  153. 1620 IF XX=14 AND (YY=3 OR YY=7 OR YY=11) THEN PRINT CHR$(7);:RETURN
  154. 1630 IF XX=17 AND (YY=1 OR YY=5 OR YY=9 OR YY=13) THEN PRINT CHR$(7);:RETURN
  155. 1640 IF (YY=1 OR YY=5 OR YY=9 OR YY=13) THEN 1690
  156. 1650 CC=C-2
  157. 1660 IF CC>=3 THEN 1670 ELSE PRINT CHR$(7);:RETURN
  158. 1670 IF A(R,CC)<>0 THEN CC=CC-2:GOTO 1660
  159. 1680 POKE 61440!+XX+128*YY,32:C=CC:XX=X(R,C):RETURN
  160. 1690 CC=C-2
  161. 1700 IF CC>=4 THEN 1710 ELSE PRINT CHR$(7);:RETURN
  162. 1710 IF A(R,CC)<>0 THEN CC=CC-2:GOTO 1700
  163. 1720 GOTO 1680
  164. 1730 RR=R
  165. 1740 IF RR>8 THEN PRINT CHR$(7);:RETURN
  166. 1750 IF (RR=4 OR RR=6 OR RR=8) THEN 1790
  167. 1760 RR=RR+1:FOR CC=3 TO 9 STEP 2
  168. 1770 IF A(RR,CC)<>50 THEN 1840
  169. 1780 NEXT CC
  170. 1790 RR=RR+1
  171. 1800 FOR CC=4 TO 8 STEP 2
  172. 1810 IF A(RR,CC)<>50 THEN 1840
  173. 1820 NEXT CC
  174. 1830 R=R+1:GOTO 1740
  175. 1840 POKE 61440!+XX+128*YY,32:R=RR:C=CC:XX=X(R,C):YY=Y(R,C)
  176. 1850 RETURN
  177. 1860 RR=R
  178. 1870 RR=RR-1
  179. 1880 IF RR<3 THEN PRINT CHR$(7);:RETURN
  180. 1890 IF (RR=3 OR RR=5 OR RR=7 OR RR=9) THEN 1940
  181. 1900 FOR CC=3 TO 9 STEP 2
  182. 1910 IF A(RR,CC)<>50 THEN 1990
  183. 1920 NEXT CC
  184. 1930 RR=RR-1
  185. 1940 FOR CC=4 TO 8 STEP 2
  186. 1950 IF A(RR,CC)<>50 THEN 1990
  187. 1960 NEXT CC
  188. 1970 RR=RR-1
  189. 1980 GOTO 1880
  190. 1990 POKE 61440!+XX+128*YY,32:R=RR:C=CC:XX=X(R,C):YY=Y(R,C)
  191. 2000 RETURN
  192. 2010 IF XX=35 AND (YY=3 OR YY=7 OR YY=11) THEN PRINT CHR$(7);:RETURN
  193. 2020 IF XX=31 AND (YY<=1 OR YY=5 OR YY=9 OR YY=13) THEN PRINT CHR$(7);:RETURN
  194. 2030 IF (YY=1 OR YY=5 OR YY=9 OR YY=13) THEN 2080
  195. 2040 CC=C+2
  196. 2050 IF CC<=9 THEN 2060 ELSE PRINT CHR$(7);:RETURN
  197. 2060 IF A(R,CC)<>0 THEN CC=CC+2:GOTO 2050
  198. 2070 POKE 61440!+XX+128*YY,32:C=CC:XX=X(R,C):RETURN
  199. 2080 CC=C+2
  200. 2090 IF CC<=8 THEN 2100 ELSE PRINT CHR$(7);:RETURN
  201. 2100 IF A(R,CC)<>0 THEN CC=CC+2:GOTO 2090
  202. 2110 GOTO 2070
  203. 2120 J=1
  204. 2130 FOR I=3 TO 9 STEP 2
  205. 2140 X(I,4)=17:Y(I,4)=J
  206. 2150 X(I,6)=24:Y(I,6)=J
  207. 2160 X(I,8)=31:Y(I,8)=J:J=J+2
  208. 2170 IF I=9 THEN RETURN
  209. 2180 X(I+1,3)=14:Y(I+1,3)=J
  210. 2190 X(I+1,5)=21:Y(I+1,5)=J
  211. 2200 X(I+1,7)=28:Y(I+1,7)=J
  212. 2210 X(I+1,9)=35:Y(I+1,9)=J:J=J+2
  213. 2220 NEXT I
  214. 2230 PRINT CHR$(26)
  215. 2240 PRINT"THIS PROGRAM WILL PLAY CONNECT THE DOTS WITH YOU."
  216. 2250 PRINT:PRINT"THE GAME IS PLAYED ON A 4 x 4 ARRAY.  WHEN YOU"
  217. 2260 PRINT"WANT TO MAKE A MOVE, USE THE FOUR ARROW KEYS TO"
  218. 2270 PRINT"MOVE THE CURSOR TO THE SPACE BETWEEN TWO DOTS YOU"
  219. 2280 PRINT"WANT TO CONNECT.  ONCE YOU HAVE DECIDED ON YOUR"
  220. 2290 PRINT"MOVE, PRESS <RETURN> AND THE COMPUTER WILL DRAW"
  221. 2300 PRINT"THE LINE BETWEEN THE TWO DOTS.  WHEN YOU HAVE"
  222. 2310 PRINT"COMPLETED A SQUARE, THAT SQUARE IS YOURS AND YOU"
  223. 2320 PRINT"MAY TAKE ANOTHER TURN."
  224. 2330 PRINT:PRINT"THE GAME ENDS WHEN EITHER YOU OR THE COMPUTER HAVE"
  225. 2340 PRINT"COMPLETED 5 SQUARES."
  226. 2350 PRINT:PRINT:PRINT"Hit <RETURN> to start... ";
  227. 2360 RS$=INKEY$:IF RS$="" THEN RS=RS+1:GOTO 2360
  228. 2370 IF RS>32767 THEN RS=RS-32767:GOTO 2370
  229. 2380 RANDOMIZE RS:RETURN
  230.