Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Tris - GnuTris.bas

GnuTris.bas

Caricato da: Teutoburgo
Scarica il programma completo

  1. ' Tris
  2.    ' Copyright (C) 1989 Pierre Blanc
  3.    ' Pierre Blanc: blanc_teutoburgo@yahoo.it
  4.    ' http://www.teutoburgo.tk
  5.    ' http://it.geocities.com/teutoburgo
  6.  
  7.    ' This program is free software; you can redistribute it and/or modify
  8.    ' it under the terms of the GNU General Public License as published by
  9.    ' the Free Software Foundation; either version 2 of the License, or
  10.    ' (at your option) any later version.
  11.  
  12.    ' This program is distributed in the hope that it will be useful,
  13.    ' but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.    ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.    ' GNU General Public License for more details.
  16.  
  17.    ' You should have received a copy of the GNU General Public License
  18.    ' along with this program; if not, write to the Free Software
  19.    ' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20.    ' or go to      http://www.gnu.org/copyleft/gpl.html
  21.  
  22. 10 DIM A(3), X(9), Y(9), P(9), CW(24), WW(3), PW(3), PP(3), ROT(9, 9)
  23. 20 A(2) = 3
  24. 30 A(3) = 6: P1 = 0: P2 = 0
  25. 40 FOR N = 1 TO 9
  26. 50 READ X(N)
  27. 60 NEXT N
  28. 70 FOR N = 1 TO 9
  29. 80 READ Y(N)
  30. 90 NEXT N
  31. 92 FOR N = 1 TO 9
  32. 93 FOR M = 1 TO 9
  33. 95 READ ROT(N, M)
  34. 97 NEXT M, N
  35. 100 ' *************** TRIS CHALLENGER - PROFESSIONAL VERSION ******************
  36. 110 ' Copyright (C) 1989 -- Pierre Blanc --
  37. 120 RANDOMIZE TIMER
  38. 130 FOR N = 1 TO 24
  39. 140 READ CW(N)
  40. 150 NEXT N
  41. 155 SCREEN 0, 0, 0: WIDTH 80: KEY OFF: COLOR 10, 6, 6: CLS
  42. 157 GOSUB 5000
  43. 158 COLOR 10
  44. 160 LOCATE 19, 1: LINE INPUT "Scegli livello (1=Debole,2=Medio,3=Imbattibile) ¯"; L$
  45. 170 X$ = L$: GOSUB 9000
  46. 180 IF ER = 1 THEN ER = 0: LOCATE 18, 50: PRINT SPC(LN); : GOSUB 30000
  47. 190 IF RET = 1 THEN RET = 0: GOTO 160
  48. 193 L = VAL(L$)
  49. 197 IF L < 1 OR L > 3 THEN LOCATE 18, 50: PRINT SPC(1); : GOTO 160
  50. 200 CLS
  51. 210 TRI1$ = "   ³   ³   "
  52. 220 TRI2$ = "ÄÄÄÅÄÄÄÅÄÄÄ"
  53. 230 TRI3$ = TRI1$
  54. 240 TRI4$ = TRI2$
  55. 250 TRI5$ = TRI1$
  56. 500 LOCATE 6, 35: PRINT TRI1$
  57. 510 PRINT TAB(35); TRI2$
  58. 520 PRINT TAB(35); TRI3$
  59. 530 PRINT TAB(35); TRI4$
  60. 540 PRINT TAB(35); TRI5$
  61. 560 GOSUB 6000
  62. 1000 FOR N = 1 TO 3
  63. 1010 FOR M = 1 TO 3
  64. 1020 LOCATE 4 + N * 2, 31 + M * 4: PRINT M + A(N)
  65. 1030 NEXT M
  66. 1040 NEXT N
  67. 1050 LOCATE 18, 1
  68. 1098 LOCATE 18, 1: PRINT SPC(50 + LN);
  69. 1100 LOCATE 18, 1: INPUT "Chi comincia (0=ESC,1=TU,2=IO) "; C$
  70. 1110 X$ = C$: GOSUB 9000
  71. 1120 IF ER = 1 THEN ER = 0: LOCATE 18, 34: PRINT SPC(LN); : GOSUB 30000
  72. 1125 IF RET = 1 THEN RET = 0: GOTO 1100
  73. 1130 C = VAL(C$)
  74. 1140 IF C < 0 OR C > 2 THEN LOCATE 18, 34: PRINT SPC(1); : GOTO 1100
  75. 1150 IF C = 0 THEN SYSTEM
  76. 1153 NM = 0
  77. 1155 IF C = 2 THEN GOTO 1260
  78. 1160 COLOR 14: LOCATE 18, 1: LINE INPUT "Dammi la tua mossa (numero da 1 a 9) ¯"; M$
  79. 1170 X$ = M$: GOSUB 9000
  80. 1175 LOCATE 18, 39: PRINT SPC(LN);
  81. 1180 IF ER = 1 THEN ER = 0: GOSUB 30000
  82. 1190 IF RET = 1 THEN RET = 0: GOTO 1160
  83. 1200 M = VAL(M$)
  84. 1210 IF M = 0 THEN GOSUB 30000: RET = 0: GOTO 1160
  85. 1215 IF P(M) <> 0 THEN GOSUB 30100: GOTO 1160
  86. 1220 COLOR 11: LOCATE X(M), Y(M): PRINT "x"
  87. 1230 P(M) = 1: NM = NM + 1
  88. 1233 IF L = 3 AND ROTV = 0 AND M <> 5 THEN ROTV = M
  89. 1235 K = 1: GOSUB 7500
  90. 1240 IF W = 1 THEN GOTO 8000
  91. 1250 IF NM = 9 THEN GOSUB 7000
  92. 1260 IF L = 1 THEN GOTO 1300
  93. 1270 IF L = 2 THEN GOTO 1500
  94. 1280 GOTO 1700
  95. 1290 ' --------- Livello 1
  96. 1300 MC = INT(RND * 9) + 1
  97. 1310 IF P(MC) <> 0 THEN GOTO 1300
  98. 1320 SOUND 523, .1: SOUND 196, .5: COLOR 14: LOCATE X(MC), Y(MC): PRINT "o"
  99. 1330 P(MC) = 2: NM = NM + 1
  100. 1340 K = 2: GOSUB 7500
  101. 1350 IF W = 1 THEN GOTO 8500
  102. 1360 IF NM = 9 THEN GOSUB 7000
  103. 1400 GOTO 1160
  104. 1500 ' --------- Livello 2
  105. 1510 N = 0
  106. 1520 FOR V1 = 1 TO 8
  107. 1530 FOR V2 = 1 TO 3
  108. 1540 N = N + 1
  109. 1550 IF P(CW(N)) = 2 THEN WW(V2) = 1
  110. 1560 NEXT V2
  111. 1570 IF WW(1) + WW(2) + WW(3) = 2 THEN GOSUB 2000
  112. 1580 WW(1) = 0: WW(2) = 0: WW(3) = 0
  113. 1590 NEXT V1
  114. 1600 N = 0
  115. 1610 FOR V1 = 1 TO 8
  116. 1620 FOR V2 = 1 TO 3
  117. 1630 N = N + 1
  118. 1640 IF P(CW(N)) = 1 THEN WW(V2) = 1
  119. 1650 NEXT V2
  120. 1660 IF WW(1) + WW(2) + WW(3) = 2 THEN GOSUB 2000
  121. 1680 WW(1) = 0: WW(2) = 0: WW(3) = 0
  122. 1690 NEXT V1
  123. 1695 WW(1) = 0: WW(2) = 0: WW(3) = 0: GOTO 1300
  124. 1700 ' --------- Livello 3
  125. 1710 FOR N = 1 TO 9: CP$ = CP$ + (RIGHT$(STR$(P(N)), 1)): NEXT N
  126. 1715 IF ROTV <> 0 THEN INR$ = CP$: GOSUB 5500: CP$ = NR$: NR$ = ""
  127. 1720 RESTORE 25000
  128. 1725 FOR N = 1 TO 175
  129. 1730 READ PST$
  130. 1740 IF CP$ = (LEFT$(PST$, 9)) THEN GOTO 1750
  131. 1745 NEXT N
  132. 1747 GOTO 35000
  133. 1750 CP$ = ""
  134. 1753 IF ROTV = 0 THEN GOTO 1760
  135. 1754 FOR K = 1 TO 3
  136. 1755 INR$ = RIGHT$(PST$, 9): GOSUB 5500: PST$ = LEFT$(PST$, 9) + NR$: NR$ = ""
  137. 1757 NEXT K
  138. 1760 MCC = INT(RND * 9) + 1
  139. 1765 L3$ = (MID$(PST$, 9 + MCC, 1))
  140. 1770 IF L3$ = "0" THEN GOTO 1760 ELSE IF L3$ = "1" THEN GOTO 1780
  141. 1780 IF ROTV = 0 AND MCC <> 5 THEN ROTV = MCC
  142. 1785 MC = MCC
  143. 1790 GOTO 1320
  144. 2000 FOR CN = 1 TO 3
  145. 2010 IF P(CW(N - CN + 1)) = 0 THEN MC = CW(N - CN + 1): WW(1) = 0: WW(2) = 0: WW(3) = 0: GOTO 1320
  146. 2020 NEXT CN
  147. 2030 RETURN
  148. 5000 ' Presentazione
  149. 5010 PRINT "       teutoburgo.tk presenta:"
  150. 5020 PRINT
  151. 5030 PRINT "           T    R    I    S       challenger         (1990)"
  152. 5040 PRINT
  153. 5050 PRINT "        di Pierre Blanc"
  154. 5060 PRINT : PRINT
  155. 5070 FOR N = 1 TO 3
  156. 5080 COLOR 11: PRINT "            x   x   x"; : COLOR 14: PRINT "     o   o   o"
  157. 5085 PRINT
  158. 5090 NEXT
  159. 5095 COLOR 10 : PRINT
  160. 5100 PRINT "   Questo programma e' liberamente distribuibile seguendo la GNU GPL license"
  161. 5110 PRINT "   ma e' fornito SENZA ALCUNA GARANZIA. Consultare la licenza per i dettagli"
  162. 5499 RETURN
  163. 5500 ' Rotazione
  164. 5510 FOR N = 1 TO 9
  165. 5520 NR$ = NR$ + MID$(INR$, (ROT(ROTV, N)), 1)
  166. 5530 NEXT N
  167. 5540 RETURN
  168. 6000 ' Stampa punteggi
  169. 6010 COLOR 15, 6
  170. 6100 LOCATE 1, 1: PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
  171. 6110 LOCATE 2, 1: PRINT "³ Tuoi punti : "; P1; "  ": LOCATE 2, 22: PRINT "³"
  172. 6120 LOCATE 3, 1: PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
  173. 6130 LOCATE 1, 58: PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
  174. 6140 LOCATE 2, 58: PRINT "³ Miei punti : "; P2; "  ": LOCATE 2, 79: PRINT "³"
  175. 6150 LOCATE 3, 58: PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
  176. 6490 COLOR 10
  177. 6499 RETURN
  178. 6500 ' Inizializzazione
  179. 6510 FOR N = 1 TO 9
  180. 6520 P(N) = 0
  181. 6530 NEXT N
  182. 6540 ROTV = 0
  183. 6550 IF LIVERR = 1 THEN LIVERR = 0: L = 3: CP$ = ""
  184. 6690 GOSUB 6000
  185. 6700 LOCATE 23, 6: COLOR 5, 2: PRINT "Premi un tasto o 'C' per cambiare livello o '0' per azzerare i punti"
  186. 6710 X$ = INKEY$: IF X$ = "" THEN GOTO 6710
  187. 6720 COLOR 10, 6
  188. 6730 IF X$ = "c" OR X$ = "C" THEN GOTO 155
  189. 6740 IF X$ = "0" THEN P1 = 0: P2 = 0: GOTO 155
  190. 6750 IF X$ = CHR$(27) THEN SYSTEM
  191. 6999 GOTO 200
  192. 7000 ' Patta
  193. 7010 FOR N = 1 TO 9
  194. 7020 IF (SCREEN(X(N), Y(N)) MOD 16) = 8 THEN LOCATE X(N), Y(N): COLOR 27: PRINT "x"
  195. 7030 IF (SCREEN(X(N), Y(N)) MOD 16) = 15 THEN LOCATE X(N), Y(N): COLOR 30: PRINT "o"
  196. 7040 NEXT N
  197. 7050 LOCATE 14, 36: COLOR 12, 4: PRINT "P A T T A"
  198. 7060 P1 = P1 + .5
  199. 7070 P2 = P2 + .5
  200. 7499 GOTO 6500
  201. 7500 ' Verify
  202. 7510 N = 1: W = 0
  203. 7520 FOR V1 = 1 TO 8
  204. 7530 FOR V2 = 1 TO 3
  205. 7540 IF P(CW(N)) = K THEN WW(V2) = 1: PP(V2) = CW(N)
  206. 7550 N = N + 1
  207. 7560 NEXT V2
  208. 7570 IF WW(1) + WW(2) + WW(3) = 3 THEN W = 1: FOR N = 1 TO 3: PW(N) = PP(N): NEXT N
  209. 7580 WW(1) = 0: WW(2) = 0: WW(3) = 0
  210. 7590 NEXT V1
  211. 7999 RETURN
  212. 8000 ' Vinci tu
  213. 8010 COLOR 27
  214. 8020 FOR N = 1 TO 3
  215. 8030 LOCATE X(PW(N)), Y(PW(N)): PRINT "x"
  216. 8040 NEXT N
  217. 8050 COLOR 4, 2
  218. 8060 FOR N = 1 TO 32
  219. 8070 LOCATE 14, 2 + N: PRINT "þHAI"
  220. 8075 SOUND 37 + N * 5, .5
  221. 8080 LOCATE 14, 73 - N: PRINT "VINTOþ"
  222. 8085 SOUND 37 + 160 - N * 5, .5
  223. 8090 NEXT N
  224. 8100 P1 = P1 + 1
  225. 8499 GOTO 6500
  226. 8500 ' Vinco io
  227. 8510 COLOR 30
  228. 8520 FOR N = 1 TO 3
  229. 8530 LOCATE X(PW(N)), Y(PW(N)): PRINT "o"
  230. 8540 NEXT N
  231. 8550 COLOR 2, 4
  232. 8560 FOR N = 1 TO 32
  233. 8570 LOCATE 14, 2 + N: PRINT "þHO"
  234. 8575 SOUND 37 + N * 5, .5
  235. 8580 LOCATE 14, 73 - N: PRINT "VINTOþ"
  236. 8585 SOUND 37 + 160 - N * 5, .5
  237. 8590 NEXT N
  238. 8600 P2 = P2 + 1
  239. 8999 GOTO 6500
  240. 9000 ' error trapping
  241. 9005 LN = LEN(X$)
  242. 9010 IF LN <> 1 THEN ER = 1: RETURN
  243. 9020 IF ASC(X$) < 48 OR ASC(X$) > 57 THEN ER = 1
  244. 9999 RETURN
  245. 20000 DATA 6,6,6,8,8,8,10,10,10,36,40,44,36,40,44,36,40,44
  246. 20010 DATA 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,3,6,9,2,5,8,1,4,7
  247. 20013 DATA 7,4,1,8,5,2,9,6,3,1,2,3,4,5,6,7,8,9,3,6,9,2,5,8,1,4,7
  248. 20015 DATA 7,4,1,8,5,2,9,6,3,7,8,9,4,5,6,1,2,3,9,6,3,8,5,2,7,4,1
  249. 20020 DATA 1,2,3,4,5,6,7,8,9,1,4,7,2,5,8,3,6,9,1,5,9,3,5,7
  250. 24970 '
  251. 24980 ' Book di aperture per il livello 3
  252. 24990 ' Questo piccolo database e' composto da stringhe di 18 cifre
  253. 24991 ' Le prime 9 cifre della stringa identificano la posizione attuale
  254. 24992 ' Le caselle sono numerate da 1 a 9, 0 indica la casella vuota,
  255. 24993 ' 1 indica la x, 2 la o
  256. 24994 ' Le ultime 9 cifre indicano le mosse possibili per il computer
  257. 24995 ' (identificate da un 1)
  258. 24999 '0-1 mosse
  259. 25000 '
  260. 25005 DATA 000000000111111111,100000000000010000,010000000101010010
  261. 25010 DATA 001000000000010000,000100000100011100,000010000101000101
  262. 25020 DATA 000001000001110001,000000100000010000,000000010010010101
  263. 25030 DATA 000000001000010000
  264. 25039 '2 mosse
  265. 25040 DATA 210000000000110100,201000000000100101,200100000011010000
  266. 25050 DATA 200010000000001011,200001000001010100,200000100011000001
  267. 25060 DATA 200000010001010100,200000001001000100
  268. 25070 DATA 120000000000100101,021000000000001101,020100000100010000
  269. 25080 DATA 020010000000101101,020001000001010000,020000100100000000
  270. 25090 DATA 020000010000111101,020000001001000000
  271. 25100 DATA 100020000000000001,010020000101101101,001020000000000100
  272. 25110 DATA 000120000111000111,000021000111000111,000020100001000000
  273. 25120 DATA 000020010101101101,000020001100000000
  274. 25129 '3 mosse
  275. 25130 DATA 100021000011000011,100020010000101101,100020001010101010
  276. 25140 DATA 211000000000100100,210100000000011010,210001000000000100
  277. 25150 DATA 210000100000010010,210000001000010110,112000000000001001
  278. 25160 DATA 012100000000000001,012001000000110010,012000100000010011
  279. 25170 DATA 012000001000010010,010120000101000100,010021000101000001
  280. 25180 DATA 010020100101101000,010020010101101101,010020001101101000
  281. 25190 DATA 110000020001000000,011000020100000000,010100020101000000
  282. 25200 DATA 010010020101000101,010001020101000000,010000120101000000
  283. 25210 DATA 010000021101000000,200010001001000100
  284. 25219 '4 mosse
  285. 25220 DATA 210200100000010000,210020001000100100,210100200000010001
  286. 25230 DATA 201100200000000001,221100000000010000,212100000000010000
  287. 25240 DATA 200120001011000000,210012000000000010,200112000001000000
  288. 25250 DATA 200012001011000110,210010020000000100,200110020000001000
  289. 25260 DATA 200010021001101100,212001000000010100,212000100000000001
  290. 25270 DATA 200100210001010000,212000001000000100,200100201001000000
  291. 25279 '
  292. 25280 DATA 121200000000010000,120201000001000001,120200100000010000
  293. 25290 DATA 120200010000000101,121000200000000010,120100200000010010
  294. 25300 DATA 120001200000010010,120000210000101001,121000002000000010
  295. 25310 DATA 120100002000000100,120010002001101100,120001002000000010
  296. 25320 DATA 120000102000100000,120000012000100100
  297. 25330 DATA 121002000000010000,021102000100000100,021002010000000101
  298. 25340 DATA 021002001000010000,021100200000000010,021010200100101001
  299. 25350 DATA 021001200000000001,021000210000001001,021000201000001000
  300. 25360 DATA 021100002000010010,021001002000010010,021000012000101100
  301. 25370 DATA 020120010101000000,020211000100000000,020210010100000000
  302. 25380 DATA 020112000001000000,020012010001000000,020110200000001000
  303. 25390 DATA 020010210100000000,120010002001101100,020011002000100000
  304. 25400 DATA 020010012001000000,122001000000010000,020021010101000000
  305. 25410 DATA 021200010000000001,020201010100000000,020200110000000001
  306. 25420 DATA 120020010000101101,021020010000101101,120002010000000100
  307. 25430 DATA 020102010001000000,020002011000000100,020100210001000000
  308. 25440 DATA 020001210101000000,020000211101000000,100021002000000110
  309. 25450 DATA 100020012001001000,012020100000001001,010221000100000100
  310. 25460 DATA 010122000001000001
  311. 25470 DATA 020100012101000000,020001012100000000,020000112101000000
  312. 25479 '5 mosse
  313. 25480 DATA 120021010000000101,100221010001000001,211100200000000001
  314. 25490 DATA 210102100000000001,211100220000000001,211102000000010110
  315. 25500 DATA 210102001000010110,210100120001011000,210100021001011000
  316. 25510 DATA 210001120001010000,210000121001011000,210100201000011000
  317. 25520 DATA 112001002000000100,112201000000010011,021201100000010011
  318. 25530 DATA 012201001000000100,012000121100110000,012001102000110000
  319. 25540 DATA 012100021100010000,012001021100110000,112001020000000100
  320. 25550 DATA 012001120100110000,010221100001000001,010221010100000100
  321. 25560 DATA 010122010001000001,010112001100000100
  322. 25569 '6 mosse
  323. 25570 DATA 210112020000000001,121201002000000010,120200112000001000
  324. 25580 DATA 120102210001000000,120100212001000000,121200102000010000
  325. 25590 DATA 121102200000000010,021002211000100000,021001212100000000
  326. 25600 DATA 021201012100000000,020112210001000000,020211012100000000
  327. 25610 DATA 020201112100000000,020102211001000000
  328. 30000 BEEP: RET = 1: RETURN
  329. 30010 X$ = INKEY$
  330. 30020 IF X$ = CHR$(13) THEN LOCATE 22, 5: PRINT SPC(70); : RET = 1: RETURN
  331. 30030 IF X$ = CHR$(27) THEN SYSTEM
  332. 30040 GOTO 30000
  333. 30100 COLOR 13: LOCATE 22, 25: PRINT "Mossa impossibile.Premi un tasto": BEEP
  334. 30110 X$ = INKEY$
  335. 30120 IF X$ = "" THEN GOTO 30110
  336. 30130 LOCATE 22, 25: PRINT SPC(32); : RETURN
  337. 35000 L = 2: LIVERR = 1: GOTO 1500