Info and instructions copied from Informatica Y Programacion Paso A Paso, Book 4 [#ID: 2001633] =============================================================================================== SOLITARIO para SPECTRUM Este último programa del tomo es un juego de cartas que sólo sirve para el SPECTRUM, aunque aparecerá para el resto de los ordenadores en tomos sucesivos. Con este programa podremos pasar nuestros ratos de ocio sin compañía de nadie, pues se trata de un solitario. Debido a la gran cantidad de juegos de este tupo que hay, se hace necesario explicar las instrucciones, no solo las de uso del programa, sino también las del juego. Empezaremos con las de uso del programa. Una vez que hayas metido el programa en tu SPECTRUM y hayas hecho RUN, la pantalla del ordenador se volverá blanca y al rato aparecerá un mensaje en FLASH que te indicará que el programa está barajando las cartas. Tras unos segundos aparecerá un mensaje que te dice que cortes y unos números que se suceden a gran velocidad. En este momento tienes que pulsar una tecla para que el programa corte el barajeo de las cartas. Una vez llegados a este punto, aparecerá en pantalla el tablero con las cartas. A partir de este momento puedes empezar a jugar. Si no te acuerdas de todas las teclas que puedes utilizar en el programa, pulsa la tecla "H" y te aparecerá un resumen de ellas por pantalla. El objetivo del juego es formar cada palo desde el AS hasta el REY. Al principio del juego, y después de cortar, te aparecerán las cartas en la pantalla de arriba a abajo y de izquierda a derecha. Las cartas sobrantes formarán el mazo. La forma de jugar es la siguiente: 1- Se reordenan las cartas que inicialmente están en la mesa. Con las teclas 5 y 8 se mueve el cursor superior (5 = izquierda, 8 = derecha). El cursor apunta a una columna y, en esta columna, a la carta situada más abajo. Para coger carta tienes que pulsar el cero (0), después de mover el cursor hasta la columna deseada y pulsar la tecla 1 para soltar la carta. Si quieres dejar la carta donde estaba tienes que pulsar el 1 con el cursor en la misma columna. La carta se puede mover de una a otra columna si la carta de la columna inicial es de distinto palo que la carta de la columna final. Además, la carta inicial debe ser un punto más baja que la final. Es decir, que si la carta inicial es un 7 y la final una SOTA (J), podrás poner el 7 sobre la sota. 2- Robar del mazo pulsando la "R". La carta superior del mazo se levantará pudiendo hacer con ella lo siguiente: a) Pasarla a la mesa pulsando 1 y controlando con 5 y 8 el cursor. Pulsar 1 para dejar la carta. b) Pasarla al palo correspondiente pulsando O (oros), C (copas), E (espadas) o B (bastos), según sea el palo de la carta. Si no hay ninguna carta en el palo, la primera tiene que ser un AS. c) Pasarla al montón pulsando M. El montón está formado por las cartas que, o bien no podemos poner en la mesa, o bien no nos convence ponerla en la mesa. 3- Pasar carta de la mesa al palo correspondiente situando el cursor en la columna donde está la carta y pulsar la tecla O, C, E o B según sea el palo de la carta. Las cartas hay que pasarlas al mazo por orden, no pudiendo poner, por ejemplo, el 5 de copas si no está el 4 de copas. 4- Pasar carta del montón al: a) Palo pulsando N y después O, C, E o B. b) A la mesa, pulsando N primero y después de I situar el cursor en la columna deseada y pulsar 1 para sol- tarla. 5- Pasar del palo a la mesa pulsando primero P y después O, C, E o B para situar la carta, si es posible, en la posición del cursor en la mesa. La tecla Q nos servirá para rendirse y empezar de nuevo. Cuando la carta superior de cada palo sea el rey, entonces habrás terminado con éxito la partida. ------------------------------------------------------------------------------------------------- LISTADO BASIC: 1 REM *********************** 2 REM * SOLITARIO * 3 REM *********************** 4 REM *FOR J. GARCIA LUENGO * 5 REM *********************** 6 REM *(c)Ed. Siglo Cultural* 7 REM *(c)1987 * 8 REM *********************** 9 REM 10 CLEAR : DIM A$(11,5,2): DIM B$(40,2): DIM C$(40,2): DIM E$(11,2): DIM O$(11,2): DIM R$(11,2): DIM S$(11,2): DIM M$(30,2): LET R=1: LET O=1: LET E=1: LET S=1: LET M=1: LET C=0 12 RESTORE 5900: FOR A=5E4 TO 50011: READ B: POKE A,B: NEXT A: RESTORE 5910: FOR A=50100 TO 50111: READ B: POKE A,B: NEXT A 15 POKE 23658,8 20 FOR A=1 TO 10: LET C=C+1: RESTORE 90: IF C=8 THEN LET C=10 30 FOR B=1 TO 4 40 LET B$(A*4-4+B,1)=(STR$ C AND C<8 AND C>1)+("A" AND C=1)+("J" AND C=10)+("Q" AND C=11)+("K" AND C=12) 50 READ P$ 60 LET B$(A*4-4+B,2)=P$ 70 NEXT B 80 NEXT A 90 DATA "O","C","E","B" 100 REM BARAJEO 110 CLS : PRINT FLASH 1;AT 11,11;"BARAJANDO" 120 FOR A=1 TO 100 130 LET ORDEN1=INT (RND*40)+1 140 LET ORDEN2=INT (RND*40)+1 150 IF ORDEN2=ORDEN1 THEN GO TO 140 160 LET P$=B$(ORDEN1) 170 LET B$(ORDEN1)=B$(ORDEN2) 180 LET B$(ORDEN2)=P$ 190 NEXT A 200 REM CORTAR 210 PRINT FLASH 1;AT 11,11;" CORTA " 220 FOR A=1 TO 40 230 BEEP .01,30: PRINT AT 13,13;" ";A;" " 240 IF INKEY$<>"" THEN GO TO 260 250 NEXT A: GO TO 200 260 FOR B=1 TO 40 270 LET C$(B)=B$(A) 280 LET A=A+1: IF A=41 THEN LET A=1 290 NEXT B 300 FOR A=1 TO 40 310 LET B$(A)=C$(A) 320 NEXT A 330 REM CREA LA MESA 335 CLS 340 LET C=40 350 LET D=6 360 FOR B=1 TO 5 370 LET A=1 380 LET D=D-1 390 LET A$(B,A)=B$(C) 400 LET C=C-1 410 LET A=A+1 420 IF A<=D THEN GO TO 390 430 NEXT B 440 LET D=7 450 FOR B=0 TO 4 460 LET A=1 470 LET D=D-1 480 PRINT AT A*2,B*3+2;A$(A,B+1) 490 LET A=A+1 500 IF A<>D THEN GO TO 480 510 NEXT B 520 PRINT AT 1,19;"OROS";AT 3,19;R$(R) 530 PRINT AT 1,25;"COPAS";AT 3,25;O$(O) 540 PRINT AT 6,19;"ESPADAS";AT 8,19;E$(E) 550 PRINT AT 9,24;"BASTOS";AT 11,24;S$(S) 560 PRINT AT 13,19;"MAZO";: GO SUB 3960 570 PRINT AT 16,24;"MONTON";AT 18,24;M$(M) 580 PRINT AT 20,20; BRIGHT 1;"H=AYUDA"; BRIGHT 0 590 LET CX=0 600 GO SUB 800 610 GO SUB 900 615 IF C=0 AND M=1 THEN IF R=11 AND O=11 AND E=11 AND S=11 THEN GO TO 1600 620 IF INKEY$="0" THEN GO SUB 1000 630 IF INKEY$="O" OR INKEY$="C" OR INKEY$="E" OR INKEY$="B" THEN GO SUB 2000 640 IF INKEY$="P" THEN GO TO 3000 650 IF INKEY$="R" THEN IF C<>0 THEN PRINT AT 13,19; FLASH 1;"MAZO"; FLASH 0: GO SUB 4000 660 IF INKEY$="N" THEN IF M<>1 THEN PRINT AT 16,24; FLASH 1;"MONTON"; FLASH 0: GO SUB 5000 670 IF INKEY$="Q" THEN GO TO 970 680 IF INKEY$="H" THEN GO SUB 5600 690 GO TO 600 700 PRINT AT A*2,CXF*3+2;A$(A,CXF+1) 710 RETURN 750 PRINT AT FILAB*2,CXB*3+2;" " 760 RETURN 800 IF INKEY$="8" THEN PRINT AT 0,CX*3+2;" ": BEEP .01,40: LET CX=CX+(1 AND CX<>4) 810 IF INKEY$="5" THEN PRINT AT 0,CX*3+2;" ": BEEP .01,40: LET CX=CX+(-1 AND CX<>0) 820 RETURN 900 PRINT AT 0,CX*3+2; BRIGHT 1;"\/"; BRIGHT 0 910 RETURN 950 PRINT AT 0,CXB*3+2;" " 960 RETURN 970 PRINT AT 21,0;"SI ESTAS SEGURO PULSA 'C'" 975 LET K$=INKEY$ 980 IF K$="C" THEN GO TO 10 990 IF K$="" OR K$="Q" THEN GO TO 975 995 PRINT AT 21,0;" ": GO TO 600 1000 LET CXB=CX 1010 GO SUB 900 1020 PRINT AT 0,CXB*3+2;"\/" 1030 GO SUB 800 1040 IF INKEY$<>"1" THEN GO TO 1010 1050 LET CXF=CX 1060 LET X=CXB 1070 GO SUB 1500 1075 IF A=1 THEN GO SUB 950: RETURN 1080 LET FILAB=A-1 1090 LET X=CXF 1095 GO SUB 1500: IF A=1 THEN GO SUB 950: GO TO 1210 1100 IF A=11 THEN IF A$(A,X+1)<>" " THEN RETURN 1105 IF A$(A,CXF+1)=" " THEN IF A=1 THEN GO TO 1210 1110 GO SUB 1200 1120 GO SUB 950 1130 RETURN 1200 IF A=1 THEN GO TO 1210 1205 GO SUB 1300: IF A$(A-1,CXF+1,2)=A$(FILAB,CXB+1,2) OR FINAL<=BASE OR FINAL<>BASE+1 THEN RETURN 1210 LET A$(A,CXF+1)=A$(FILAB,CXB+1) 1220 LET A$(FILAB,CXB+1)=" " 1230 GO SUB 750 1235 GO SUB 700 1290 RETURN 1300 LET P$=A$(FILAB,CXB+1,1) 1310 GO SUB 1400 1315 LET BASE=FINAL 1320 LET P$=A$(A-1,CXF+1,1) 1330 GO SUB 1400 1340 RETURN 1400 LET FINAL=(1 AND P$="A")+(2 AND P$="2")+(3 AND P$="3")+(4 AND P$="4")+(5 AND P$="5")+(6 AND P$="6")+(7 AND P$="7")+(8 AND P$="J")+(9 AND P$="Q")+(10 AND P$="K") 1410 RETURN 1500 FOR A=1 TO 10 1510 IF A$(A,X+1)=" " THEN RETURN 1520 NEXT A 1530 RETURN 1600 PRINT AT 21,0; FLASH 1;"L O C O N S E G U I S T E . . ."; FLASH 0 1610 FOR A=-40 TO 40: BEEP .01,A 1620 IF INKEY$<>"" THEN GO TO 1630 1625 NEXT A: IF INKEY$="" THEN GO TO 1610 1630 PAUSE 0 1640 CLS 1650 GO TO 100 2000 IF INKEY$="O" THEN GO TO 2200 2010 IF INKEY$="C" THEN GO TO 2400 2020 IF INKEY$="E" THEN GO TO 2600 2030 IF INKEY$="B" THEN GO TO 2800 2040 GO TO 2000 2200 LET X=CX 2210 GO SUB 1500 2220 IF A<>1 THEN LET A=A-1 2230 IF R$(R)=" " THEN IF A$(A,CX+1,1)="A" THEN GO SUB 2310 2240 IF R$(R)=" " THEN IF A$(A,CX+1,1)<>"A" THEN RETURN 2250 LET P$=R$(R,1) 2260 GO SUB 1400 2270 LET BASE=FINAL 2280 LET P$=A$(A,CX+1,1) 2290 GO SUB 1400 2300 IF BASE<>FINAL-1 THEN RETURN 2310 LET R=R+1: GO SUB 2350 2320 RETURN 2350 LET R$(R)=A$(A,CX+1): IF R$(R,2)<>"0" THEN LET R$(R)=" ": LET R=R-1: RETURN 2360 GO SUB 2370: LET A$(A,CX+1)=" ": RETURN 2370 PRINT AT 3,19;R$(R) 2380 LET FILAB=A: LET CXB=CX: GO SUB 750 2390 RETURN 2400 LET X=CX 2410 GO SUB 1500 2420 IF A<>1 THEN LET A=A-1 2430 IF O$(O)=" " THEN IF A$(A,CX+1,1)="A" THEN GO TO 2510 2440 IF O$(O)=" " THEN IF A$(A,CX+1,1)<>"A" THEN RETURN 2450 LET P$=O$(O,1) 2460 GO SUB 1400 2470 LET BASE=FINAL 2480 LET P$=A$(A,CX+1,1) 2490 GO SUB 1400 2500 IF BASE<>FINAL-1 THEN RETURN 2510 LET O=O+1: GO SUB 2550 2520 RETURN 2550 LET O$(O)=A$(A,CX+1): IF O$(O,2)<>"C" THEN LET O=O-1: RETURN 2560 GO SUB 2570: LET A$(A,CX+1)=" ": RETURN 2570 PRINT AT 3,25;O$(O) 2580 LET FILAB=A: LET CXB=CX: GO SUB 750 2590 RETURN 2600 LET X=CX 2610 GO SUB 1500 2620 IF A<>1 THEN LET A=A-1 2630 IF E$(E)=" " THEN IF A$(A,CX+1,1)="A" THEN GO TO 2710 2640 IF E$(E)=" " THEN IF A$(A,CX+1,1)<>"A" THEN RETURN 2650 LET P$=E$(E,1) 2660 GO SUB 1400 2670 LET BASE=FINAL 2680 LET P$=A$(A,CX+1,1) 2690 GO SUB 1400 2700 IF BASE<>FINAL-1 THEN RETURN 2710 LET E=E+1: GO SUB 2750 2720 RETURN 2750 LET E$(E)=A$(A,CX+1): IF E$(E,2)<>"E" THEN LET E=E-1: RETURN 2760 GO SUB 2770: LET A$(A,CX+1)=" ": RETURN 2770 PRINT AT 8,19;E$(E) 2780 LET FILAB=A: LET CXB=CX: GO SUB 750 2790 RETURN 2800 LET X=CX 2810 GO SUB 1500 2820 IF A<>1 THEN LET A=A-1 2830 IF S$(S)=" " THEN IF A$(A,CX+1,1)="A" THEN GO TO 2910 2840 IF S$(S)=" " THEN IF A$(A,CX+1,1)<>"A" THEN RETURN 2850 LET P$=S$(S,1) 2860 GO SUB 1400 2870 LET BASE=FINAL 2880 LET P$=A$(A,CX+1,1) 2890 GO SUB 1400 2900 IF BASE<>FINAL-1 THEN RETURN 2910 LET S=S+1: GO SUB 2950 2920 RETURN 2950 LET S$(S)=A$(A,CX+1): IF S$(S,2)<>"B" THEN LET S=S-1: RETURN 2960 GO SUB 2970: LET A$(A,CX+1)=" ": RETURN 2970 PRINT AT 11,24;S$(S) 2980 LET FILAB=A: LET CXB=CX: GO SUB 750 2990 RETURN 3000 REM PALO A MESA 3010 IF INKEY$="O" THEN GO TO 3100 3020 IF INKEY$="C" THEN GO TO 3250 3030 IF INKEY$="E" THEN GO TO 3400 3040 IF INKEY$="B" THEN GO TO 3550 3050 GO TO 3000 3100 IF R$(R)=" " THEN GO TO 600 3110 LET X=CX 3120 GO SUB 1500: IF A=11 THEN IF A$(A-1,CX+1)<>" " THEN GO TO 600 3125 IF A=1 THEN GO TO 3150 3130 LET P$=R$(R) 3140 GO SUB 3900 3150 LET A$(A,CX+1)=R$(R) 3160 LET R$(R)=" " 3170 IF R<>1 THEN LET R=R-1 3180 LET CXF=CX 3190 GO SUB 700 3200 PRINT AT 3,19;R$(R) 3210 GO TO 600 3250 IF O$(O)=" " THEN GO TO 600 3260 LET X=CX 3270 GO SUB 1500: IF A=11 THEN IF A$(A-1,CX+1)<>" " THEN GO TO 600 3275 IF A=1 THEN GO TO 3300 3280 LET P$=O$(O) 3290 GO SUB 3900 3300 LET A$(A,CX+1)=O$(O) 3310 LET O$(O)=" " 3320 IF O<>1 THEN LET O=O-1 3330 LET CXF=CX 3340 GO SUB 700 3350 PRINT AT 3,25;O$(O) 3360 GO TO 600 3400 IF E$(E)=" " THEN GO TO 600 3410 LET X=CX 3420 GO SUB 1500: IF A=11 THEN IF A$(A-1,CX+1)<>" " THEN GO TO 600 3425 IF A=1 THEN GO TO 3450 3430 LET P$=E$(E) 3440 GO SUB 3900 3450 LET A$(A,CX+1)=E$(E) 3460 LET E$(E)=" " 3470 IF E<>1 THEN LET E=E-1 3480 LET CXF=CX 3490 GO SUB 700 3500 PRINT AT 8,19;E$(E) 3510 GO TO 600 3550 IF S$(S)=" " THEN GO TO 600 3560 LET X=CX 3570 GO SUB 1500: IF A=11 THEN IF A$(A-1,CX+1)<>" " THEN GO TO 600 3575 IF A=1 THEN GO TO 3600 3580 LET P$=S$(S) 3590 GO SUB 3900 3600 LET A$(A,CX+1)=S$(S) 3610 LET S$(S)=" " 3620 IF S<>1 THEN LET S=S-1 3630 LET CXF=CX 3640 GO SUB 700 3650 PRINT AT 11,24;S$(S) 3660 GO TO 600 3700 PRINT AT 1,19;"OROS";AT 1,25;"COPAS";AT 6,19;"ESPADAS";AT 9,24;"BASTOS" 3710 RETURN 3900 IF A$(A-1,CX+1,2)=P$(2) THEN GO TO 600 3905 LET P$=P$(1) 3910 GO SUB 1400 3915 LET BASE=FINAL 3920 LET P$=A$(A-1,CX+1,1) 3930 GO SUB 1400 3940 IF FINAL<>BASE+1 THEN GO TO 600 3950 RETURN 3960 PRINT AT 15,19;"##"; OVER 1;CHR$ 8;CHR$ 8;"__" 3970 PRINT AT 13,19;"MAZO= ";C;" " 3980 RETURN 4000 PRINT AT 15,19;B$(C) 4010 IF INKEY$="M" THEN GO TO 4100 4020 IF INKEY$="T" THEN GO SUB 4200: IF A$(A,CX+1)=B$(C+1) THEN RETURN 4030 IF INKEY$="O" OR INKEY$="C" OR INKEY$="E" OR INKEY$="B" THEN GO TO 4300 4040 GO TO 4000 4100 LET M$(M)=B$(C) 4110 PRINT AT 18,24;M$(M) 4120 LET M=M+1 4130 LET C=C-1 4140 GO SUB 3960 4150 RETURN 4200 GO SUB 900: GO SUB 800 4210 IF INKEY$<>"1" THEN GO TO 4200 4220 LET X=CX 4230 GO SUB 1500: LET A$(A,CX+1)=B$(C): IF A=11 THEN IF A$(A,CX+1)<>" " THEN RETURN 4235 IF A=1 THEN GO TO 4250 4240 GO SUB 4500: IF BASE>=FINAL OR BASE<>FINAL-1 OR A$(A,CX+1,2)=A$(A-1,CX+1,2) THEN LET A$(A,CX+1)=" ": RETURN 4250 LET C=C-1 4260 LET CXF=CX 4270 GO SUB 700 4280 GO SUB 3960 4290 RETURN 4300 IF INKEY$="O" OR INKEY$="C" OR INKEY$="E" OR INKEY$="B" THEN GO TO 4320 4310 GO TO 4300 4320 LET X=CX 4330 GO SUB 1500: IF A=11 THEN IF A$(A,CX+1)<>" " THEN RETURN 4340 LET A$(A,CX+1)=B$(C) 4350 GO SUB 2000 4360 IF R$(R)=B$(C) OR O$(O)=B$(C) OR E$(E)=B$(C) OR S$(S)=B$(C) THEN LET C=C-1: GO SUB 3980: RETURN 4370 LET A$(A,CX+1)=" " 4380 GO TO 4000 4500 LET A$(A,CX+1)=B$(C) 4510 LET FILAB=A 4520 LET CXF=CX 4530 LET CXB=CX 4540 GO SUB 1300 4550 RETURN 5000 IF INKEY$="T" THEN GO TO 5100 5010 IF INKEY$="O" OR INKEY$="C" OR INKEY$="E" OR INKEY$="B" THEN GO TO 5200 5020 GO TO 5000 5100 GO SUB 900 5110 GO SUB 800 5120 IF INKEY$<>"1" THEN GO TO 5100 5130 LET X=CX 5140 GO SUB 1500: IF A=11 AND A$(A,CX+1)<>" " THEN PRINT AT 16,24;"MONTON": RETURN 5150 IF A=1 THEN LET A$(A,CX+1)=M$(M-1): GO TO 5160 5155 GO SUB 5500: IF BASE>=FINAL OR BASE<>FINAL-1 OR A$(A,CX+1,2)=A$(A-1,CX+1,2) THEN LET A$(A,CX+1)=" ": GO TO 5320 5160 LET M=M-1 5170 LET CXF=CX 5180 GO SUB 700 5190 GO TO 5300 5200 IF INKEY$="O" OR INKEY$="C" OR INKEY$="E" OR INKEY$="B" THEN GO TO 5220 5210 GO TO 5200 5220 LET X=CX 5230 GO SUB 1500 5240 LET A$(A,CX+1)=M$(M-1) 5250 GO SUB 2000 5260 IF R$(R)=M$(M-1) OR O$(O)=M$(M-1) OR E$(E)=M$(M-1) OR S$(S)=M$(M-1) THEN LET M=M-1: LET A$(A,CX+1)=" ": GO TO 5300 5270 GO TO 5320: LET A$(A,CX+1)=" " 5280 RETURN 5300 LET M$(M)=" ": IF M=1 THEN PRINT AT 18,24;" ": GO TO 5320 5310 PRINT AT 18,24;M$(M-1) 5320 PRINT AT 16,24;"MONTON" 5330 RETURN 5500 LET A$(A,CX+1)=M$(M-1) 5510 GO TO 4510 5600 RANDOMIZE USR 5E4: CLS 5610 PRINT AT 0,0;"5..........CURSOR A LA IZQUIERDA" 5620 PRINT "6..........CURSOR A LA DERECHA" 5630 PRINT "0..........COGER UNA CARTA" 5640 PRINT "1..........SOLTAR UNA CARTA" 5650 PRINT "R..........ROBAR CARTA DEL MAZO" 5660 PRINT " M.........PASAR CARTA AL MONTON" 5670 PRINT " T.........PASAR CARTA A LA MESA" 5680 PRINT " 1........SOLTAR CARTA EN MESA" 5690 PRINT " O,C,E,B...PASAR CARTA AL PALO" 5700 PRINT "N..........PASA CARTA DEL MONTON" 5710 PRINT " T.........A LA MESA" 5720 PRINT " 1........SOLTAR CARTA EN MESA" 5730 PRINT " O,C,E,B...AL PALO" 5740 PRINT "P..........PASA CARTA DEL PALO" 5750 PRINT " T.........A LA MESA" 5760 PRINT " 1........SOLTAR CARTA EN MESA" 5770 PRINT "Q..........RENDIRSE" 5780 PRINT AT 21,0; FLASH 1;"PULSA UNA TECLA PARA SEGUIR."; FLASH 0 5790 PAUSE 0 5800 RANDOMIZE USR 50100 5810 RETURN 5900 DATA 33,0,64,17,214,216,1,0,27,237,176,201 5910 DATA 33,214,216,17,0,64,1,0,27,237,176,201