home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG026.ARK / SQUARE.ASC < prev    next >
Text File  |  1984-04-29  |  7KB  |  198 lines

  1. 100 REM  ** SQUARE **
  2. 110 REM
  3. 120 REM  WRITTEN BY MAC OGLESBY
  4. 130 REM  AS DESCRIBED IN VOL. 1, ISSUE 3
  5. 140 REM  OF CALCULATORS-COMPUTERS MAGAZINE
  6. 150 REM
  7. 160 CS$=CHR$(126)+CHR$(28)  'CURSOR CONTROL CODES TO CLEAR SCREEN
  8. 170 DEFINT A-Z
  9. 180 PRINTCS$;"ENTER PASSWORD";:INPUTA$:Z=0
  10. 190 A=0:FORI=1TOLEN(A$):A=A+ASC(MID$(A$,I,1)):NEXT:A=RND(-A)
  11. 200 DIM Q(50),S$(50),S(24,12),U(12),V(50)
  12. 210 P$(1)="X":P$(2)="O":F=1
  13. 220 FOR R0=0 TO 4:FOR C0=0 TO 4:D$(R0,C0)=".":NEXTC0:NEXTR0
  14. 230 INPUT"WANT INSTRUCTIONS FOR 'SQUARE'";A$
  15. 240 IFLEFT$(A$,1)="N"THEN400
  16. 250 PRINTCS$;  'CLEAR SCREEN
  17. 260 PRINT"   THE GAME OF SQUARE IS FOR 1 OR 2 PLAYERS.  THE NORMAL"
  18. 270 PRINT"BOARD LOOKS LIKE THIS AT THE START:":GOSUB2000
  19. 280 PRINT"   THE PLAYERS GO IN TURN AND CHOOSE ANY UNOCCUPIED POINT"
  20. 290 PRINT"(SHOWN AS A DOT).  EACH PLAYER HAS 12 MARKERS (X'S OR O'S)"
  21. 300 PRINT"WHICH ARE USED TO IDENTIFY CHOSEN POINTS.":PRINT
  22. 310 INPUT"             ENTER 'C' TO CONTINUE";A$:PRINT
  23. 320 PRINT"   THE WINNER IS THE FIRST PLAYER WHO HAS CHOSEN 4 POINTS"
  24. 330 PRINT"WHICH FORM THE CORNERS OF A SQUARE."
  25. 340 PRINT"   TO CHOOSE A POINT, TYPE 2 DIGITS (0 TO 4) SEPARATED BY A"
  26. 350 PRINT"COMMA.  THE FIRST DIGIT TELLS THE DISTANCE OVER (TO T";
  27. 360 PRINT"HE RIGHT)":PRINT"FROM POINT 0,0 (THE ORIGIN).  THE SECOND";
  28. 370 PRINT" DIGIT TELLS THE DISTANCE UP.":PRINT
  29. 380 PRINT"REMEMBER: OVER,UP.":PRINT
  30. 390 INPUT"             ENTER 'C' TO CONTINUE";A$:PRINT
  31. 400 PRINT:INPUT"DO YOU WANT TO PLAY THE EXPERTS' GAME";A$
  32. 410 B0=1:IFLEFT$(A$,1)="Y"THENB0=2
  33. 420 IFB0=1THEN440
  34. 430 D$(2,2)=" ":N=38:GOTO450
  35. 440 N=50
  36. 450 IFZ=1THENGOTO490ELSEPRINT:INPUT"HOW MANY PLAYERS (1 OR 2)";P0
  37. 460 IFP0=2THEN510
  38. 470 IF P0=1THEN480ELSEPRINT"PLEASE ENTER 1 OR 2":GOTO450
  39. 480 PRINTCS$;"OK, I WILL PLAY THE X'S":PRINT
  40. 490 INPUT"DO YOU WANT TO GO FIRST";A$:F=1
  41. 500 IFLEFT$(A$,1)="Y"THENF=2
  42. 510 PRINTCS$;"OK...HERE WE GO..."
  43. 520 IFZ=1THEN940
  44. 530 RESTORE:FORJ=0TO24:READS(J,0):NEXT
  45. 540 DATA 4,7,8,7,4,7,10,11,10,7,8,11,12,11,8,7,10,11,10,7,4,7,8,7,4
  46. 550 FORJ=0TO24:FORK=1TOS(J,0):READS(J,K):NEXTK:NEXTJ
  47. 560 DATA 1,13,35,43
  48. 570 DATA 1,2,15,20,28,31,36
  49. 580 DATA 2,3,21,24,29,43,44,47
  50. 590 DATA 3,4,16,25,30,31,35
  51. 600 DATA 4,13,36,44
  52. 610 DATA 1,5,15,24,30,32,37
  53. 620 DATA 1,2,5,14,22,25,38,39,47,48
  54. 630 DATA 2,3,15,16,17,23,26,32,33,39,40
  55. 640 DATA 3,4,6,14,20,27,37,40,47,49
  56. 650 DATA 4,6,16,21,28,33,38
  57. 660 DATA 5,7,20,26,29,43,45,48
  58. 670 DATA 5,7,15,17,18,21,27,31,34,39,41
  59. 680 DATA 39,40,41,42,43,44,45,46,47,48,49,50
  60. 690 DATA 6,8,16,17,19,22,24,31,34,40,42
  61. 700 DATA 6,8,23,25,29,44,46,49
  62. 710 DATA 7,9,18,22,28,32,35
  63. 720 DATA 7,9,10,14,23,24,36,41,48,50
  64. 730 DATA 10,11,17,18,19,20,25,32,33,41,42
  65. 740 DATA 8,11,12,14,21,26,35,42,49,50
  66. 750 DATA 8,12,19,27,30,33,36
  67. 760 DATA 9,13,37,45
  68. 770 DATA 9,10,18,26,30,34,38
  69. 780 DATA 10,11,22,27,29,45,46,50
  70. 790 DATA 11,12,19,23,28,34,37
  71. 800 DATA 12,13,38,46
  72. 810 FORJ=1TON:READS$(J):NEXT
  73. 820 DATA 00011110,01021211,02031312,03041413,10112120
  74. 830 DATA 13142423,20213130,23243433,30314140,31324241
  75. 840 DATA 32334342,33344443,00044440,11133331
  76. 850 DATA 01122110,03142312,12233221,21324130,23344332
  77. 860 DATA 01133220,02143321,11234230,12244331
  78. 870 DATA 02233110,03243211,12334120,13344221
  79. 880 DATA 01144330,02244220,03344110
  80. 890 DATA 01032321,10123230,12143432,21234341
  81. 900 DATA 00033330,01043431,10134340,11144441
  82. 910 DATA 11122221,12132322,21223231,22233332
  83. 920 DATA 00022220,02042422,20224240,22244442
  84. 930 DATA 02132211,11223120,13243322,22334231
  85. 940 IFA(1)<>89THEN960
  86. 950 IFB0=2THEN960ELSEPRINT:GOTO970
  87. 960 GOSUB2000
  88. 970 T=T+1
  89. 980 REM ** MAIN MOVE LOOP: J=121212... OR J=212121...
  90. 990 FORJ=FTO3-FSTEP3-2*F
  91. 1000 IFP0=2THEN1730
  92. 1010 IFJ=2THEN1730
  93. 1020 REM ** GENERATE COMPUTER'S MOVE
  94. 1030 IFT<>1THEN1100
  95. 1040 IFD$(2,2)<>"."THEN1060
  96. 1050 R1=2:C1=2:GOTO1710
  97. 1060 IFF=1THEN1080
  98. 1070 Q0=9:GOTO1130
  99. 1080 R1=1+INT(RND(1)*3):C1=1+INT(RND(1)*3)
  100. 1090 IFD$(R1,C1)<>"."THENGOTO1080ELSEGOTO1710
  101. 1100 IFT<>2THEN1380
  102. 1110 IFF=1THEN1130
  103. 1120 Q0=19
  104. 1130 K9=0
  105. 1140 FORJ1=1TON:IFQ(J1)<>1+Q0THEN1160
  106. 1150 K9=K9+1:U(K9)=J1
  107. 1160 NEXTJ1
  108. 1170 IFK9=0THEN1370
  109. 1180 FORJ2=K9TO1STEP-1:T9=1+INT(RND(1)*J2):J1=U(T9)
  110. 1190 FORK1=1TO8STEP2:R1=VAL(MID$(S$(J1),K1,1))
  111. 1200 C1=VAL(MID$(S$(J1),K1+1,1))
  112. 1210 IFD$(R1,C1)<>"."THEN1320
  113. 1220 IFQ0+T<3THEN1240
  114. 1230 GOTO1710
  115. 1240 S0=5*R1+C1:M0=0:FORJ3=1TOS(S0,0)
  116. 1250 IFB0=1THEN1280
  117. 1260 IFS(S0,J3)<=38THEN1280
  118. 1270 GOTO1310
  119. 1280 IFQ(S(S0,J3))>1THEN1300
  120. 1290 M0=M0+1
  121. 1300 NEXTJ3
  122. 1310 IFM0<8-B0THENGOTO1320ELSEGOTO1710
  123. 1320 NEXTK1
  124. 1330 IFJ2=T9THEN1350
  125. 1340 T8=U(J2):U(J2)=U(T9):U(T9)=T8
  126. 1350 NEXTJ2
  127. 1360 REM *** AS A LAST RESORT, PICK ANY VACANT POINT
  128. 1370 R1=RND(1)*5:C1=RND(1)*5:IFD$(R1,C1)<>"."THENGOTO1370ELSEGOTO1710
  129. 1380 IFT=3THEN1430
  130. 1390 REM ** SEE IF 'X' CAN COMPLETE A SQUARE
  131. 1400 FORJ1=1TON:IFQ(J1)<>3THENGOTO1410ELSEGOTO1190
  132. 1410 NEXTJ1
  133. 1420 REM ** SEE IF 'O' CAN COMPLETE A SQUARE
  134. 1430 FORJ1=1TON:IFQ(J1)<>30THENGOTO1440ELSEGOTO1190
  135. 1440 NEXTJ1
  136. 1450 REM ** CAN 'X' CHOOSE A 3RD CORNER?
  137. 1460 K9=0:FORJ1=1TON:IFQ(J1)<>2THEN1480
  138. 1470 K9=K9+1:U(K9)=J1
  139. 1480 NEXTJ1
  140. 1490 IFK9=0THEN1700
  141. 1500 FORI0=1TO2:FORJ0=K9TO1STEP-1:M9=1+INT(RND(1)*J0):J1=U(M9):T9=0
  142. 1510 FORK1=1TO8STEP2:R1=VAL(MID$(S$(J1),K1,1))
  143. 1520 C1=VAL(MID$(S$(J1),K1+1,1)):IFD$(R1,C1)<>"."THEN1540
  144. 1530 T9=T9+1:R(T9)=R1:C(T9)=C1
  145. 1540 NEXTK1
  146. 1550 FORJ2=1TO2:FORJ3=1TO50:V(J3)=Q(J3):NEXTJ3:S0=5*R(J2)+C(J2)
  147. 1560 FORJ3=1TOS(S0,0):V(S(S0,J3))=V(S(S0,J3))+1:NEXTJ3
  148. 1570 S0=5*R(3-J2)+C(3-J2)
  149. 1580 FORJ3=1TOS(S0,0):V(S(S0,J3))=V(S(S0,J3))+10:NEXTJ3
  150. 1590 FORJ3=1TON:IFV(J3)<>4-I0THEN1610
  151. 1600 R1=R(J2):C1=C(J2):GOTO1710
  152. 1610 NEXTJ3
  153. 1620 NEXTJ2
  154. 1630 IFJ0=M9THEN1650
  155. 1640 T8=U(J0):U(J0)=U(M9):U(M9)=T8
  156. 1650 NEXTJ0
  157. 1660 NEXTI0
  158. 1670 REM ** NO GOOD MOVE AVAILABLE...PICK ANY 3RD CORNER
  159. 1680 J1=U(1+INT(RND(1)*K9)):GOTO1190
  160. 1690 REM ** SEE IF WE CAN ANNOY THE HUMAN
  161. 1700 Q0=I9:GOTO1130
  162. 1710 PRINT"THE ";P$(J);"'S MOVE TO ";STR$(C1);",";STR$(R1):GOTO1780
  163. 1720 REM ** GET PLAYER'S CHOICE
  164. 1730 IFT>1THEN1750
  165. 1740 PRINT"THE ";P$(J);"'S MOVE TO WHICH POINT";:GOTO1760
  166. 1750 PRINTP$(J);"'S CHOICE";
  167. 1760 INPUTC1,R1
  168. 1770 IFD$(R1,C1)<>"."THEN1850
  169. 1780 D$(R1,C1)=P$(J)
  170. 1790 REM ** Q() TELLS WHO OWNS CORNERS OF WHICH SQUARES
  171. 1800 S0=5*R1+C1:FORJ1=1TOS(S0,0):Q(S(S0,J1))=Q(S(S0,J1))+1+(J-1)*9
  172. 1810 IFQ(S(S0,J1))<>4+(J-1)*36THEN1830
  173. 1820 PRINT:PRINT"*** THE ";P$(J);"'S WIN!! ***":GOTO1910
  174. 1830 NEXTJ1
  175. 1840 GOTO1880
  176. 1850 PRINT"** ILLEGAL POINT! **":GOTO1870
  177. 1860 PRINT"YOU MUST TYPE 2 DIGITS (0 TO 4) SEPARATED BY A COMMA!"
  178. 1870 PRINT"** INPUT IGNORED! PLEASE TRY AGAIN...":GOTO1750
  179. 1880 NEXTJ
  180. 1890 IFT<12THEN1970
  181. 1900 PRINT:PRINT"THE GAME IS A DRAW; NEITHER PLAYER MADE A SQUARE!"
  182. 1910 FORK1=1TO8STEP2:R1=VAL(MID$(S$(S(S0,J1)),K1,1))
  183. 1920 C1=VAL(MID$(S$(S(S0,J1)),K1+1,1)):D$(R1,C1)=CHR$(64):NEXT:GOSUB2000
  184. 1930 INPUT"WANT TO PLAY AGAIN";A$:IFLEFT$(A$,1)<>"Y"THENEND
  185. 1940 Z=1:FORJ2=0TO4:FORJ3=0TO4:D$(J2,J3)=".":NEXTJ3:NEXTJ2
  186. 1950 FORJ2=1TO50:Q(J2)=0:V(J2)=0:NEXTJ2:FORJ2=1TO12:U(J2)=0:NEXTJ2
  187. 1960 T=0:K9=0:GOTO400
  188. 1970 GOSUB2000
  189. 1980 GOTO970
  190. 1990 REM ** PRINT THE BOARD
  191. 2000 PRINT:FORR0=4TO0STEP-1:PRINTSTR$(R0);"  ";
  192. 2010 FORC0=0TO4:PRINTD$(R0,C0);:IFC0=4THEN2030
  193. 2020 PRINT"     ";
  194. 2030 NEXTC0:PRINT:IFR0=0THEN2050
  195. 2040 PRINT:PRINT
  196. 2050 NEXTR0:PRINT:PRINT"    0     1     2     3     4":PRINT:RETURN
  197. 2060 END
  198.