100 REMark     Cazaletras, versin 3
110 REMark     ---------------------
120 REMark                                                 PRINCIPAL
130 iniciar : datos : jugar 0
140 REMark                                                 INICIAR
150 DEFine PROCedure iniciar
160 DIM tabla$(3,6,1),tacha%(3,6),inf_pun%(25),fich_rec$(14),u$(5)
170 DIM nombre$(4,10),puntos(4),dato%(2),lim%(2,1),tira$(95)
180 DIM autor$(10),palabra$(30),mejor$(30),a$(30),pal$(30)
190   fich_rec$="Cazaletras_dat" : u$="FLP1_"
200   RANDOMISE
210   tira$="AAAAAAAAAAAABBCCCCDDDDDEEEEEEEEEEEEFGGHHIIIIIIJLLLLMMNNNNN"
220   tira$=tira$&"OOOOOOOOOPPQRRRRRSSSSSSTTTTUUUUUVXYZ"
230   RESTORE 
240   FOR i=0 TO 25 : READ inf_pun%(i)
250   REMark A,B,C,D,E,F,G,H,I,J, ,L,M,N,O,P,Q,R,S,T,U,V,W,X ,Y,Z
260   DATA   1,3,3,2,1,4,2,6,1,8,10,1,3,1,1,3,8,1,1,1,1,4,0,10,6,8
270   FOR i=0 TO 2
280     FOR j=0 TO 1
290       READ lim%(i,j)
300     END FOR j
310   END FOR i
320   DATA 2,5,20,90,5,15
330   OPEN #14, u$&fich_rec$
340   REPeat lectura
350     IF EOF(#14) : EXIT lectura
360     INPUT #14,autor$,record,palabra$
370   END REPeat lectura
380   CLOSE #14 : autor$="" : palabra$="" : mejor$=""
390   record_hoy%=0 : num_jug%=2 : tope%=60 : fallo%=10
400 END DEFine iniciar
410 REMark                                                DATOS
420 DEFine PROCedure datos
430   dato%(0)=num_jug% : dato%(1)=tope% : dato%(2)=fallo%
440   WINDOW 512,256,0,0 : PAPER 0 : CLS : CSIZE 2,0
450   FOR i=3 TO 6 : OPEN #i, con_ : PAPER #i, 7 : INK #i, 1 : CSIZE #i, 2,0
460   WINDOW #3, 216,110,262,80
470   FOR i=3 TO 6
480     IF i<>3 : WINDOW #i, 204,70,35,80*i-300
490     CLS #i : BORDER #i, 10,1 : BORDER #i, 5,7 : BORDER #i, 15
500   END FOR i
510   AT #3, 0,3 : PRINT #3, "Nombres"
520   FOR j=0 TO num_jug%-1 : AT #3, j+2,0 : PRINT #3, (j+1)&". ";nombre$(j)
530   AT #4, 0,1 : PRINT #4, "Jugadores"
540   AT #5, 0,2 : PRINT #5, "Tiempo" : PRINT #6, "Penalizacin"
550   FOR i=4 TO 6 : CSIZE #i, 3,1 : AT #i, 1,3 : PRINT #i, dato%(i-4)
560   i=0 : INK 5
570   CURSOR 289,30 : PRINT "TAB: elegir"
580   CURSOR 289,45 : PRINT ": cambiar"
590   CURSOR 274,220 : PRINT "ENTER: terminar"
600   REPeat elegir
610     i=(i+1) MOD 4 : cambio_borde 2
620     IF i=0
630       REPeat bloque
640         AT #3, 7,1 : PRINT #3, "F1 comienza"
650         REPeat tecla_bloque
660           n=CODE(INKEY$(-1))
670           SELect ON n
680             =10 : EXIT elegir
690             =232
700                   AT #3,1,0 : CLS #3, 2
710                   FOR j=0 TO dato%(0)-1
720                     REPeat pilla_nombre
730                       AT #3, j+2,0 : CLS #3, 4 : CLS #3, 2
740                       INPUT #3, (j+1)&". ";palabra$
750                       IF LEN(palabra$)>10
760                         AT #3, 7,2 : CLS #3, 3 : PRINT #3, "Muy largo"
770                         PAUSE 50
780                         NEXT pilla_nombre
790                       ELSE 
800                         nombre$(j)=palabra$ : EXIT pilla_nombre
810                       END IF 
820                     END REPeat pilla_nombre
830                   END FOR j
840                   NEXT bloque
850             =9 : CLS #3,3 : cambio_borde 1 : NEXT elegir
860             =REMAINDER : NEXT tecla_bloque
870           END SELect 
880         END REPeat tecla_bloque
890       END REPeat bloque
900     ELSE 
910       REPeat tecla_dato
920         n=CODE(INKEY$(-1))
930         SELect ON n
940           =10 : EXIT elegir
950           =9 : cambio_borde 1 : NEXT elegir
960           =208 : dato%(i-1)=dato%(i-1)+1
970           =216 : dato%(i-1)=dato%(i-1)-1
980           =REMAINDER : NEXT tecla_dato
990         END SELect 
1000         IF dato%(i-1)>lim%(i-1,1) : dato%(i-1)=lim%(i-1,0)
1010         IF dato%(i-1)<lim%(i-1,0) : dato%(i-1)=lim%(i-1,1)
1020         AT #(i+3), 1,3
1030         IF i=3 AND (dato%(2)=5 OR dato%(2)=9) : CLS #6, 3
1040         PRINT #(i+3), dato%(i-1) : NEXT tecla_dato
1050         EXIT tecla_dato
1060       END REPeat tecla_dato
1070     END IF 
1080   END REPeat elegir
1090   num_jug%=dato%(0) : tope%=dato%(1) : fallo%=dato%(2)
1100   FOR i=3 TO 6 : CLOSE #i
1110 END DEFine datos
1120 REMark                                                 JUGAR
1130 DEFine PROCedure jugar(ind)
1140   pantalla
1150   IF ind=0
1160     segundo=tope% : jug=-1 : barajar
1170   ELSE 
1180     segundo=segseg : jug=jug-1
1190     FOR i=0 TO 3
1200       FOR j=0 TO 6
1210         IF tacha%(i,j)=2 : AT #3, i,j : PRINT #3, tabla$(i,j)
1220       END FOR j
1230     END FOR i
1240   END IF 
1250   REPeat ronda
1260     jug=(jug+1) MOD num_jug% : CLS : cambio_color 2
1270     IF ind=1 : ind=0 : ELSE : segundo=tope% : END IF 
1280     AT #2, 1,1 : PRINT #2, segundo
1290     IF quedan<3
1300       INK 7 : AT 1,2 : PRINT "No tienes jugada" : poner -1 : CLS
1310       jug=jug+1
1320     END IF 
1330     INK 6 : palabra$="" : AT 0,6 : PRINT "Palabra"
1340     FLASH 1 : AT 2,0 : PRINT "" : FLASH 0
1350     AT 4,0 : INK 4 : PRINT 'Para borrar usa ""' : INK 7
1360     tiempo=DATE
1370     REPeat espera
1380       n=CODE(INKEY$(10))
1390       SELect ON n
1400         =97 TO 106,108 TO 118,120 TO 122,137
1410                     palabra$=palabra$&CHR$(n) : AT 2,2 : PRINT palabra$
1420         =192,194
1430                q=LEN(palabra$)
1440                IF q=1 : palabra$=""
1450                IF q>1 : palabra$=palabra$(1 TO (q-1))
1460                AT 2,2 : CLS 4 : PRINT palabra$
1470         =10 : EXIT espera
1480         =27 : segseg=segundo : otra
1490       END SELect 
1500       tic=DATE
1510       IF tic<>tiempo
1520         segundo=segundo-1 : AT #2, 1,pos(segundo)
1530         IF segundo=9 : CLS #2, 3
1540         PRINT #2, segundo
1550         IF segundo=0
1560           CLS : INK 4 : AT 1,3 : PRINT " Tiempo !!!" : poner -1
1570           NEXT ronda
1580         END IF 
1590         tiempo=tic
1600       END IF 
1610     END REPeat espera
1620     CLS : AT 0,2 : INK 7 : PRINT palabra$
1630     IF LEN(palabra$)<3
1640       INK 4 : AT 2,1 : PRINT "Palabra no vlida" : poner -1 : NEXT ronda
1650     END IF 
1660     examen
1670     IF jugada=0
1680       INK 4 : AT 2,3 : PRINT "Faltan letras" : poner -1 : NEXT ronda
1690     END IF 
1700     INK 6 : AT 2,2 : PRINT "Se acepta?"
1710     INK 4 : AT 4,1 : PRINT "S:      No: TAB"
1720     INK 6 : AT 2,15
1730     REPeat tecla
1740       correcto=1
1750       n=CODE(INKEY$(-1))
1760       SELect ON n
1770         =27 : otra
1780         =208 : PRINT "S" : poner 1
1790         =9 : PRINT "No" : poner -1 : NEXT ronda
1800         =REMAINDER : correcto=0
1810       END SELect 
1820       IF correcto=1 : EXIT tecla
1830     END REPeat tecla
1840     cambio_color 1
1850   END REPeat ronda
1860 END DEFine jugar
1870 REMark                                                 PANTALLA
1880 DEFine PROCedure pantalla
1890   FOR i=3 TO 13 : OPEN #i, scr_ : CSIZE #i, 2,0
1900   WINDOW 512,256,0,0 : PAPER 0 : CLS : CSIZE 2,0
1910   WINDOW #0, 448,40,32,215 : PAPER #0,0 : CLS #0 : INK #0,3 : CSIZE #0,2,0
1920   AT #0, 1,4 : PRINT #0, "AEILNORSTU 1    DG 2    BCMP 3"
1930   AT #0, 3,4 : PRINT #0, "FV 4     HY 6   JQZ 8   X 10"
1940   WINDOW 260,60,205,145 : BORDER 2,4 : BORDER 5 : INK 7
1950   WINDOW #2, 96,60,52,145 : PAPER #2, 0 : CLS #2
1960   BORDER #2, 3,5 : BORDER #2, 6 : INK #2, 5
1970   CSIZE #2, 2,0 : PRINT #2, "Tiempo" : BORDER #2, 8 : CSIZE #2, 3,1
1980   WINDOW #3, 152,100,289,25 : PAPER #3, 0 : CLS #3
1990   BORDER #3, 5,2 : BORDER #3, 10 : INK #3, 6 : CSIZE #3, 3,1
2000   FOR i=4 TO 2*num_jug%+2 STEP 2
2010     WINDOW #i, 144,20,52,12.5*i-35 : PAPER #i, 1 : CLS #i
2020     BORDER #i, 2,7 : BORDER #i, 5 : INK #i, 7 : PRINT #i, nombre$(i/2-2)
2030     WINDOW #(i+1), 56,20,205,12.5*i-35 : PAPER #(i+1), 1 : CLS #(i+1)
2040     BORDER #(i+1), 2,7 : BORDER #(i+1), 5 : INK #(i+1), 7
2050     AT #(i+1), 0,pos(puntos(i/2-2)) : PRINT #(i+1), puntos(i/2-2)
2060   END FOR i
2070 END DEFine pantalla
2080 REMark                                                 NORMAL
2090 DEFine PROCedure no
2100 MODE 4
2110   FOR i=3 TO 13 : CLOSE #i
2120   WINDOW 512,256,0,0 : PAPER 0 : CLS
2130   WINDOW 448,200,32,16 : PAPER 2 : CLS : CSIZE 0,0 : INK 7
2140   WINDOW #2, 448,200,32,16
2150   PAPER #2, 2 : CLS #2 : CSIZE #2, 0,0 : INK #2, 7
2160   WINDOW #0, 448,40,32,216 : PAPER #0,0 : CLS #0 : CSIZE #0,0,0
2170   INK #0,7
2180 END DEFine no
2190 REMark                                                BARAJAR
2200 DEFine PROCedure barajar
2210   CLS #3
2220   FOR i=0 TO 3
2230     FOR j=0 TO 6
2240       tabla$(i,j)=tira$(RND(1 TO 95)) : tacha%(i,j)=2
2250       AT #3, i,j : PRINT #3, tabla$(i,j)
2260     END FOR j
2270   END FOR i
2280   quedan=20 : primera=1
2290 END DEFine barajar
2300 REMark                                                EXAMEN
2310 DEFine PROCedure examen
2320   jugada=0 : k=0
2330   REMark +
2340   REPeat letra
2350     k=k+1
2360     FOR i=0 TO 3
2370       FOR j=0 TO 6
2380         p=CODE(palabra$(k))-97 : q=CODE(tabla$(i,j))-65
2390         IF (p=q OR (p=40 AND q=104)) AND tacha%(i,j)=2
2400           IF p=40 : p=10
2410           tacha%(i,j)=1 : jugada=jugada+inf_pun%(p)
2420           IF k=LEN(palabra$) : EXIT letra : ELSE : NEXT letra : END IF 
2430         END IF 
2440       END FOR j
2450     END FOR i
2460     jugada=0
2470     EXIT letra
2480   END REPeat letra
2490   REMark -
2500 END DEFine examen
2510 REMark                                                PONER
2520 DEFine PROCedure poner(k)
2530   IF k=1
2540     IF jugada>=record_hoy% : cambio_record
2550   END IF 
2560   AT 4,0 : CLS 3 : INK 6 : AT 4,4
2570   IF k=1
2580     IF primera : primera=0 : jugada=INT(jugada/2)
2590     final=jugada : PRINT "puntos: "; jugada : tono=2
2600   ELSE 
2610     final=fallo% : PRINT "puntos: -"; fallo% : tono=20
2620   END IF 
2630   FOR i=1 TO final
2640     PAUSE 5 : p=puntos(jug)
2650     IF pos(p)<>pos(p+k) : CLS #(2*jug+5)
2660     p=p+k
2670     IF pos(p)=5
2680       CLS : FLASH 1 : INK 6 : AT 1,3 : PRINT "DESBORDAMIENTO"
2690       FLASH 0 : INK 7 : AT 3,5 : PRINT "Pulsa TAB"
2700       REPeat pulsa_tab : IF CODE(INKEY$(-1))=9 : EXIT pulsa_tab
2710       otra
2720     END IF 
2730     AT #(2*jug+5),0,pos(p) : BEEP 160,tono : PRINT #(2*jug+5),p
2740     puntos(jug)=p
2750   END FOR i
2760   IF k=-1
2770     jug=jug-1 : barajar
2780   ELSE 
2790     quedan=0
2800     FOR i=0 TO 3
2810       FOR j=0 TO 6
2820         n=tacha%(i,j)
2830         SELect ON n
2840           =1 : AT #3, i,j : PRINT #3, " " : tacha%(i,j)=0
2850           =2 : quedan=quedan+1
2860         END SELect 
2870       END FOR j
2880     END FOR i
2890   END IF 
2900 END DEFine poner
2910 REMark                                                POS
2920 DEFine FuNction pos(q)
2930   SELect ON q
2940     =-99 TO -10 : RETurn 0
2950     =-9 TO -1 : RETurn 1
2960     =0 TO 9 : RETurn 2
2970     =10 TO 99 : RETurn 1
2980     =100 TO 999 : RETurn 0
2990     =REMAINDER : RETurn 5
3000   END SELect 
3010 END DEFine pos
3020 REMark                                                CAMBIO_COLOR
3030 DEFine PROCedure cambio_color(color)
3040   p=2*jug+4
3050   FOR q=p TO p+1
3060     BORDER #q, 2 : PAPER #q, color : CLS #q : BORDER #q, 5
3070   END FOR q
3080   IF color=2 : FLASH #p,1
3090   PRINT #p, nombre$(jug) : FLASH #p,0
3100   AT #(p+1), 0,pos(puntos(jug)) : PRINT #(p+1), puntos(jug)
3110 END DEFine cambio_color
3120 REMark                                                CAMBIO_BORDE
3130 DEFine PROCedure cambio_borde(color)
3140   p=i+3 : BORDER #p, 10,color : BORDER #p, 5,7 : BORDER #p, 15
3150 END DEFine cambio_borde
3160 REMark                                                CAMBIO_RECORD
3170 DEFine PROCedure cambio_record
3180   autor$=nombre$(jug) : record_hoy%=jugada : mejor$=palabra$
3190   IF jugada>=record
3200     OPEN #14, u$&fich_rec$
3210     REPeat lectura
3220       IF EOF(#14) : EXIT lectura
3230       INPUT #14, a$;a;a$;
3240     END REPeat lectura
3250     PRINT #14, autor$\jugada\mejor$ : CLOSE #14 : record=jugada
3260   END IF 
3270 END DEFine cambio_record
3280 REMark                                                OTRA
3290 DEFine PROCedure otra
3300   REPeat bucle_otra
3310     WINDOW 512,256,0,0 : PAPER 0 : CLS
3320     WINDOW 448,240,32,16 : BORDER 10,5 : CSIZE 2,0 : INK 5
3330     AT 3,5 : PRINT "F1  Puesta a cero"
3340     AT 5,5 : PRINT "F2  Cambiar parmetros"
3350     AT 7,5 : PRINT "F3  Continuar"
3360     AT 9,5 : PRINT "F4  Tabla de records"
3370     AT 11,5 : PRINT "F5  Terminar"
3380     INK 6 : AT 14,6 : PRINT "MEJOR JUGADA DE HOY"
3390     AT 16,2 : PRINT "Autor     puntos   Palabra"
3400     INK 7 : AT 18,2 : PRINT autor$; TO 14; record_hoy%; TO 21; mejor$
3410     BORDER 0,0
3420     REPeat tecla_otra
3430       n=CODE(INKEY$(-1))
3440       SELect ON n
3450         =232 : FOR i=0 TO 4 : puntos(i)=0
3460                jugar 0
3470         =236 : FOR i=0 TO 4 : puntos(i)=0
3480                datos : jugar 0
3490         =240 : jugar 1
3500         =244 : mostrar_records : NEXT bucle_otra
3510         =248 : STOP
3520         =REMAINDER : NEXT tecla_otra
3530       END SELect 
3540     END REPeat tecla_otra
3550   END REPeat bucle_otra
3560 END DEFine otra
3570 REMark                                                MOSTRAR_RECORDS
3580 DEFine PROCedure mostrar_records
3590   WINDOW 512,256,0,0 : PAPER 0 : CLS : WINDOW 448,200,32,16 : INK 6
3600   PAPER 2 : CLS : WINDOW #0, 448,20,32,236 : INK #0, 5
3610   OPEN #14, scr_ : WINDOW #14, 448,170,32,66
3620   PAPER #14, 2 : CLS #14 : CSIZE #14,2,0
3630   INK #14, 7 : AT 1,11 : PRINT "TABLA DE RECORDS"
3640   AT 3,2 : PRINT "Autor     puntos   Palabra"
3650   OPEN #15, u$&fich_rec$
3660   REPeat lista
3670     IF EOF(#15) : EXIT lista
3680     INPUT #15,a$,p,pal$ : PRINT #14, TO 2, a$; TO 14, p; TO 21, pal$
3690   END REPeat lista
3700   CLOSE #15 : CLOSE #14 : AT #0, 1,13 : PRINT #0, "Pulsa TAB"
3710   REPeat pulsa_tab : IF CODE(INKEY$(-1))=9 : EXIT pulsa_tab
3720 END DEFine mostrar_records
