home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / basic3 / pro5 / othello.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1990-01-01  |  6.9 KB  |  248 lines

  1. 1000  REM  OTHELLO -- PET VERSION -- MODIFIED BY PATRICK   LEABO
  2. 1010  REM                                        TUCSON, ARIZONA
  3. 1020  REM                                             3-82
  4. 1025  REM NOT DONE YET BUT HAVE FUN -- PLEASE ADD A GOOD ALGORITHM TO IT
  5. 1030  SCREEN 0,0:COLOR 10:WIDTH 80:KEY OFF
  6. 1040  E$="":FOR I= 1 TO 39:E$= E$+ " ":NEXT
  7. 1050  D$= CHR$ (11)
  8. 1060  FOR I= 1 TO 20:D$= D$+ CHR$ (10):NEXT
  9. 1070  XL= 3:XH= 6:YL= 3:YH= 6
  10. 1080  DIM A(9,9),I4(7),J4(7),D$(2),P$(2):Z0= 0
  11. 1090  CLS:LOCATE 1,20:PRINT "GREETINGS FROM OTHELLO"
  12. 1100  PRINT :PRINT "OTHELLO  IS PLAYED ON AN 8 X 8 BOARD, ROWS NUMBERED"
  13. 1110  PRINT "1 TO 8  AND COLUMNS A TO H.   THE INITIAL CONFIGURATION IS"
  14. 1120  PRINT "ALL BLANK EXCEPT FOR THE CENTER FOUR SQUARES, TRY TO PLACE"
  15. 1130  PRINT "YOUR PIECE SO THAT IT OUTFLANKS YOUR  OPPONENT, CREATING "
  16. 1140  PRINT "HORIZONTAL, VERTICAL, OR DIAGONAL RUN OF OPPOSING PIECES,"
  17. 1150  PRINT "TURNING THEM INTO YOURS."
  18. 1160  PRINT
  19. 1180  PRINT "EXAMPLE: RED OUTFLANKS BLUE, CAPTURING FOUR BLUE PIECES."
  20. 1190  PRINT "2MAKE YOUR MOVE BY ENTERING A NUMBER FOR THE ROW AND A LETTER"
  21. 1200  PRINT "FOR THE COLUMN.  "
  22. 1210  PRINT "NOTE: YOU MUST CAPTURE AT LEAST ONE OF MY PIECES IN THIS WAY "
  23. 1220  PRINT "IF IT IS POSSIBLE.  IF IT IS NOT POSSIBLE, YOU FORFEIT YOUR"
  24. 1230  PRINT "MOVE BY ENTERING 0 A FOR YOUR MOVE."
  25. 1240  PRINT :PRINT "HOW MANY PLAYERS (1 OR 2)? ";:GOSUB 3220:IF VAL (X$)= 0 OR VAL (X$)> 2 THEN 1240
  26. 1250  PRINT X$:NP= VAL (X$):PRINT 
  27. 1260  IF NP= 2 THEN PRINT "PLAYER #1 GOES FIRST WHEN THE PLAY STARTS"
  28. 1270  SOUND 3000,2:LINE INPUT "WHAT'S YOUR FIRST NAME? ";P$(1):P$(1)= P$(1)+" "+ CHR$(2)
  29. 1280  SOUND 3000,2:IF NP= 2 THEN LINE INPUT "WHO IS YOUR OPPONENT? ";P$(2):P$(2)= P$(2)+" "+CHR$(1)
  30. 1290  IF NP= 2 THEN 1350
  31. 1293  PRINT:PRINT"MAKE SURE ";:COLOR 26:PRINT" CAPS LOCK ";:COLOR 15:PRINT" IS DOWN"
  32. 1295  LOCATE 21,31:PRINT" ";:COLOR 31:PRINT"<--- <UNK! {FE22}>;:COLOR 10:PRINT" "
  33. 1300  PRINT :PRINT "SHOULD I PLAY MY BEST?"   ;
  34. 1310  S2= 0:S4= 0:S5= 0:P$(2)= "IBM PC"
  35. 1320  GOSUB 3220:IF X$= "N"THEN PRINT "  NO":GOTO 1350
  36. 1330  PRINT "  YES"
  37. 1340  S2= 2:S4= 1:S5= - 2
  38. 1350  B= - 1:W= 1:PT= 0
  39. 1360  D$(B+ 1)= "RED":N$(B+ 1)= "RED "
  40. 1370  D$(0+ 1)= "BLANK"
  41. 1380  D$(W+ 1)= "BLUE":N$(W+ 1)= "BLUE"
  42. 1390  FOR K= 0 TO 7
  43. 1400  READ I4(K),J4(K)
  44. 1410  NEXT 
  45. 1420  FOR I= 0TO 9:FOR J= 0TO 9
  46. 1430  A(I,J)= 0
  47. 1440  NEXT J,I
  48. 1450  A(4,4)= W:A(5,5)= W
  49. 1460  A(4,5)= B:A(5,4)= B
  50. 1470  SC(1)= 2:SC(2)= 2:N1= 4:Z= 0
  51. 1480  C= B:H= W
  52. 1490  FOR NN= 1 TO 3000:NEXT :CLS
  53. 1500  GOSUB 3300
  54. 1510  IF NP= 2THEN 2020
  55. 1520  PRINT D$"DO YOU WANT TO GO FIRST? ";
  56. 1530  PT= 1:GOSUB 3220:IF X$= "Y"THEN PRINT "YES":PT= 0:GOTO 2020
  57. 1540  PT= 1:PRINT "NO":PRINT D$E$D$"THANK YOU.  I WILL MAKE THE FIRST MOVE."
  58. 1550  REM  COMPUTERS MOVE
  59. 1560  IF NP= 1 THEN TIME$="0:0:0":GOTO 1600
  60. 1570  IF PT= 2 THEN B1= - 1:I3= 0:J3= 0:T1= C:T2= H
  61. 1580  IF PT= 1 THEN B1= - 1:I3= 0:J3= 0:T1= H:T2= C
  62. 1590  GOTO 2030
  63. 1600  PT= PT+ 1:IF PT> 2 THEN PT= 1
  64. 1610  B1= - 1:I3= 0:J3= 0:T1= C:T2= H
  65. 1620  FOR I= YL TO YH:FOR J= XL TO XH
  66. 1630  IF A(I,J)< > 0 THEN 1790
  67. 1640  GOSUB 2740
  68. 1650  IF F1= Z0 THEN 1790
  69. 1660  U= - 1
  70. 1670  GOSUB 2780
  71. 1680  IF S1= Z0 THEN 1790
  72. 1690  IF (I= 1)OR (I= 8)THEN S1= S1+ S2
  73. 1700  IF (J= 1)OR (J= 8)THEN S1= S1+ S2
  74. 1710  IF (I= 2)OR (I= 7)THEN S1= S1+ S5
  75. 1720  IF (J= 2)OR (J= 7)THEN S1= S1+ S5
  76. 1730  IF (I= 3)OR (I= 6)THEN S1= S1+ S4
  77. 1740  IF (J= 3)OR (J= 6)THEN S1= S1+ S4
  78. 1750  IF S1< B1 THEN 1790
  79. 1760  IF S1> B1 THEN 1780
  80. 1770  IF RND (1)> 0.5THEN 1790
  81. 1780  B1= S1:I3= I:J3= J
  82. 1790  NEXT J,I
  83. 1800  IF B1> 0THEN 1880
  84. 1810  IF S5= 0THEN 1840
  85. 1820  IF NP= 1THEN S5= 0:GOTO 1610
  86. 1830  S5= 0:GOTO 1550
  87. 1840  S5= 0:PRINT D$ E$ D$"I HAVE TO FORFEIT MY MOVE"
  88. 1850  IF Z= 1THEN 2430
  89. 1860  Z= 1
  90. 1870  GOTO 2020
  91. 1880  Z= 0
  92. 1890  PRINT D$E$D$"I WILL MOVE TO ";RIGHT$ (STR$ (I3),1)" "CHR$ (J3+ 64)
  93. 1900  GOSUB 3090REM 5
  94. 1910  I= I3:J= J3:U= 1
  95. 1920  GOSUB 2780
  96. 1930  SC(PT)= SC(PT)+ S1+ 1
  97. 1940  OP= PT+ 1:IF OP= 3THEN OP= 1
  98. 1950  SC(OP)= SC(OP)- S1
  99. 1960  N1= N1+ 1
  100. 1970  PRINT D$E$D$"THAT GIVES ME ";
  101. 1980  PRINT S1;
  102. 1990  PRINT " OF YOUR PIECES"
  103. 2000  GOSUB 3390
  104. 2010  IF SC(OP)= 0OR N1= 64THEN 2430
  105. 2020  T1= H:T2= C
  106. 2030  PT= PT+ 1:IF PT> 2THEN PT= 1
  107. 2040  IF PT= 2THEN B1= - 1:I3= 0:J3= 0:T1= C:T2= H
  108. 2050  IF PT= 1THEN B1= - 1:I3= 0:J3= 0:T1= H:T2= C
  109. 2060  BEEP
  110. 2070  TIME$="0:0:0":PRINT D$;E$D$;P$(PT)", I believe it's your turn.";:GOSUB 3020
  111. 2080  IF (I< 0)OR (J< 0)OR (J> 8)OR (I> 8)THEN 2040
  112. 2090  IF I< > 0 THEN 2160
  113. 2100  PRINT D$;E$D$;"ARE YOU FORFEITING YOUR TURN ? ";
  114. 2110  GOSUB 3220:IF X$< > "Y"THEN PRINT "NO":GOTO 2040
  115. 2120  PRINT "YES"
  116. 2130  IF Z= 1 THEN 2430
  117. 2140  Z1= 1
  118. 2150  GOTO 1550
  119. 2160  IF A(I,J)= 0 THEN 2190
  120. 2170  PRINT D$"SORRY,SQUARE OCCUPIED; TRY AGAIN"
  121. 2180  GOTO 2270
  122. 2190  GOSUB 2740
  123. 2200  IF F1= 1 THEN 2230
  124. 2210  PRINT D$""E$D$"SORRY,NOT NEXT TO MY PIECES; TRY AGAIN"
  125. 2220  GOTO 2270
  126. 2230  U= - 1
  127. 2240  GOSUB 2780
  128. 2250  IF S1> 0THEN 2290
  129. 2260  PRINT D$""E$D$"SORRY,DOESN'T FLANK A ROW; TRY AGAIN"
  130. 2270  PRINT E$D$:BEEP:FOR N=1 TO 2000:NEXT
  131. 2280  GOTO 2040
  132. 2290  Z= 0:GOSUB 3150
  133. 2300  PRINT D$""E$D$""P$(PT)" THAT GIVES YOU ";
  134. 2310  PRINT S1;
  135. 2320  PRINT " PIECE";:IF S1> 1 THEN PRINT "S";
  136. 2330  PRINT :PRINT E$D$
  137. 2340  U= 1
  138. 2350  GOSUB 2780
  139. 2360  SC(PT)= SC(PT)+ S1+ 1
  140. 2370  OP= PT+ 1:IF OP= 3THEN OP= 1
  141. 2380  SC(OP)= SC(OP)- S1
  142. 2390  N1= N1+ 1
  143. 2400  GOSUB 3390
  144. 2410  IF SC(OP)= 0OR N1= 64THEN 2430
  145. 2420  GOTO 1550
  146. 2430  PRINT D$;E$:PRINT E$:PRINT E$
  147. 2440  PRINT D$;E$D$;P$(1)"  HAS "SC(1)" PIECES   ";
  148. 2450  PRINT P$(2)" HAS "SC(2)" PIECES"
  149. 2460  IF SC(1)= SC(2)THEN 2510
  150. 2470  IF NP= 2THEN 2540
  151. 2480  IF SC(1)> SC(2)THEN 2530
  152. 2500  GOTO 2540
  153. 2510  PRINT "ITS A TIE !!";
  154. 2520  GOTO 2680
  155. 2530  PRINT "OK, THAT WAS A VERY GOOD GAME, ";P$
  156. 2540  C1= SC(1)- SC(2)
  157. 2550  IF C1> 0 THEN 2570
  158. 2560  C1= - C1
  159. 2570  C1= (64* C1)/ N1
  160. 2580  PRINT "THAT WAS A ";
  161. 2590  IF C1< 11 THEN 2670
  162. 2600  IF C1< 25 THEN 2660
  163. 2610  IF C1< 39 THEN 2650
  164. 2620  IF C1< 53 THEN 2640
  165. 2630  PRINT "PERFECT GAME":GOTO 2680
  166. 2640  PRINT "WALKAWAY":GOTO 2680
  167. 2650  PRINT " FIGHT":GOTO 2680
  168. 2660  PRINT "   HOT GAME":GOTO 2680
  169. 2670  PRINT "     CLOSE CALL."
  170. 2680  PRINT
  171. 2690  BEEP:PRINT "Do you feel PLAYING another game?"
  172. 2700  GOSUB 3220:IF X$= "Y"THEN PRINT "YES";:RUN 1040
  173. 2710  PRINT "NO"
  174. 2720  PRINT "THANKS FOR PLAYING."
  175. 2730  CLS:RUN"FILES.BAS"
  176. 2740  F1= Z0:FOR I1= - 1 TO 1:FOR J1= - 1 TO 1:IF A(I+ I1,J1+ J)= T2 THEN 2760
  177. 2750  NEXT J1,I1:RETURN
  178. 2760  F1= 1:RETURN
  179. 2770  REM  CHECK FOR COUNT & FLANKING PIECES
  180. 2780  S1= Z0:FOR K= 0 TO 7
  181. 2790  S3= Z0:I5= I4(K):J5= J4(K):I6= I+ I5:J6= J+ J5
  182. 2800  IF A(I6,J6)< > T2 THEN 2910
  183. 2810  S3= S3+ 1:I6= I6+ I5:J6= J6+ J5
  184. 2820  IF A(I6,J6)= T1 THEN 2850
  185. 2830  IF A(I6,J6)= Z0 THEN 2910
  186. 2840  GOTO 2810
  187. 2850  S1= S1+ S3
  188. 2860  IF U< > 1 THEN 2910
  189. 2870  I6= I:J6= J
  190. 2880  FOR K1= 0TO S3
  191. 2890  A(I6,J6)= T1:I6= I6+ I5:J6= J6+ J5
  192. 2900  NEXT K1
  193. 2910  NEXT K
  194. 2920  RETURN 
  195. 2930  REM  3SET SEARCH LIMITS FOR COMPUTER MOVE5
  196. 2940  IF I= YL THEN YL= YL- 1:IF YL< 1 THEN YL= 1
  197. 2950  IF I= YH THEN YH= YH+ 1:IF YH> 8 THEN YH= 8
  198. 2960  IF J= XL THEN XL= XL- 1:IF XL< 1 THEN XL= 1
  199. 2970  IF J= XH THEN XH= XH+ 1:IF XH> 8 THEN XH= 8
  200. 2980  LOCATE 1,1:PRINT TI$;"   "
  201. 2990  RETURN 
  202. 3000  REM  INPUT SUBROUTINE5"
  203. 3010  PRINT D$E$"BAD MOVE; TRY AGAIN."
  204. 3020  I= - 1:J= - 1
  205. 3030  FOR K= 1TO 2
  206. 3040  GOSUB 3220
  207. 3050  G= ASC (X$)
  208. 3060  IF 47< G AND G< 58 THEN I= G- 48:PRINT ""X$"  ";
  209. 3070  IF 64< G AND G< 74 THEN J= G- 64:PRINT ""X$"  ";
  210. 3080  NEXT :PRINT :RETURN 
  211. 3090  REM BLINK COMPUTERS MOVE5
  212. 3100  LOCATE 2* J3+ 3,4* I3+ 1:COLOR 26,0:PRINT CHR$(1):COLOR 7,0
  213. 3110  I= I3:J= J3
  214. 3120  GOSUB 2940
  215. 3130  FOR NN= 1TO 1000:NEXT 
  216. 3140  RETURN 
  217. 3150  REM BLINK PLAYERS MOVE5
  218. 3160  IF PT= 2THEN CC= 0
  219. 3170  IF PT= 1THEN CC= 2
  220. 3180  LOCATE 2* J+ 3,4* I+ 1:COLOR 26,0:PRINT CHR$(2):COLOR 7,0
  221. 3190  GOSUB 2940
  222. 3200  FOR NN= 1TO 500:NEXT 
  223. 3210  RETURN 
  224. 3220  REM INPUT STATEMENTS
  225. 3230  SOUND 3000,2
  226. 3240  X$=INKEY$:IF X$="" THEN 3240 ELSE IF X$=CHR$(27) THEN CLS:NEW ELSE RETURN
  227. 3250  REM  PRINT SCORE
  228. 3260  LOCATE 5,36:PRINT CHR$(2);RIGHT$ ("  "+ STR$ (SC(1)),3);" ":LOCATE 19,36:PRINT CHR$(1);RIGHT$ ("  "+ STR$ (SC(2)),3);" ";:LOCATE 1,1
  229. 3270  RETURN
  230. 3280  REM BOARD DATA
  231. 3290  DATA 0,1,-1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1
  232. 3300  REM 5 OTHER OTHELLO BOARD
  233. 3310  CLS:LOCATE 1,10:PRINT "O T H E L L O"
  234. 3320  LOCATE 3,5:PRINT"1   2   3   4   5   6   7   8"
  235. 3330  FOR N=1 TO 8:LOCATE 3+2*N,1:PRINT CHR$(N+64):NEXT
  236. 3340  LOCATE 4,3  :PRINT"KEYTHENTHENTHEN<0xCB!>THENTHENTHEN<0xCB!>THENTHENTHEN<0xCB!>THENTHENTHEN<0xCB!>THENTHENTHEN<0xCB!>THENTHENTHEN<0xCB!>THENTHENTHEN<0xCB!>THENTHENTHENCLOSE":FOR N=1 TO 13STEP 2
  237. 3350  LOCATE 4+N,3:PRINT"OPEN   OPEN   OPEN   OPEN   OPEN   OPEN   OPEN   OPEN   OPEN"
  238. 3360  LOCATE 5+N,3:PRINT"TOTHENTHENTHENTAB(THENTHENTHENTAB(THENTHENTHENTAB(THENTHENTHENTAB(THENTHENTHENTAB(THENTHENTHENTAB(THENTHENTHENTAB(THENTHENTHENRANDOMIZE":NEXT
  239. 3370  LOCATE 4+N,3:PRINT"OPEN   OPEN   OPEN   OPEN   OPEN   OPEN   OPEN   OPEN   OPEN"
  240. 3380  LOCATE 5+N,3:PRINT"SCREENTHENTHENTHENLOCATETHENTHENTHENLOCATETHENTHENTHENLOCATETHENTHENTHENLOCATETHENTHENTHENLOCATETHENTHENTHENLOCATETHENTHENTHENLOCATETHENTHENTHENLOAD"
  241. 3390  FOR I= 1TO 8
  242. 3400  FOR J= 1 TO 8:LOCATE 2* J+ 3,4* I+ 1:FACE= (A(I,J)+ 3)/2
  243. 3410  IF FACE = 1.5 THEN PRINT" " ELSE PRINT CHR$(FACE)
  244. 3420  NEXT J,I
  245. 3430  GOSUB 3250
  246. 3440  RETURN
  247. 3450  END 
  248.