====== TETRIS ====== {{:otros:Tetris_p1.jpg?690|}} ===== Ficha ===== ^ Autor | ??????? | ^ Computadora | Amstrad PCW 8256 / 8512 / 9512 | ^ Año | ???? | ^ Género | Estrategia | ^ Controles | Teclado | ^ Lenguajes | Inglés | ^ Estado | [[preservado|Preservado]] | ===== Capturas ===== {{:otros:Tetris_basic_screenshot01.png?220}} {{:otros:Tetris_basic_screenshot02.png?220}} {{:otros:Tetris_basic_screenshot03.png?220}} {{:otros:Tetris_basic_screenshot04.png?220}} ===== Descripción ===== El objetivo del juego es colocar las diversas fichas con formas diferentes evitando la acumulación de huecos. Como caen, puedes mover bloques a izquierda o derecha o incluso rotarlas con las teclas de cursor. Cuando se completa una capa, ésta desaparece y se añadirán puntos. Esto a la vez, nos ayuda para acceder a espacios dejados anteriormente en el juego. Si llenamos el marco entero entonces el juego terminará. La ventana inferior derecha da una vista previa del bloque que caerá a continuación del que tenemos en pantalla. Cuanto mejores resultados obtengamos, más rápido se ejecutará el juego, y la puntuación será mejor también. Podremos presionar exit en cualquier momento del juego para abandonar el mismo. Para comenzar el juego veremos un indicador que parpadea donde se elige el nivel de juego (1 a 9). Los puntuajes se actualizan continuamente en la pantalla. Podremos guardar el record en el disco junto con el nombre del jugador y posteriormente se mostrará en la pantalla en los juegos futuros con la posición reajustada. ===== Listado ===== * **__Listado 1 - TETRIS.BAS__** 10 DIM b(8,10):h!=HIMEM:MEMORY &HBFFE:FOR x=&HC070 TO &HC098:READ pk:POKE x,pk:NEXT x 20 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41 30 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201 40 CHAR=248:count=8:ch=CHAR:WHILE char * **__Listado 2 - TETRIS.SCR__** 10 OPTION RUN 12 h!=HIMEM:MEMORY,10000 20 ee$=CHR$(27):con$=ee$+"e":cof$=ee$+"f":PRINT cof$ 30 ul$=ee$+"r":nul$=ee$+"u" 40 DEF FNat$(x,y)=ee$+"Y"+CHR$(32+x)+CHR$(32+y) 50 DEF FNd$(h,g)=STRING$(h,249+g) 60 c$=ee$+"E":PRINT c$ ee$ "0" 70 rev$=ee$+"p":rof$=ee$+"q" 80 RANDOMIZE(PEEK(64504!)) 90 DEFINT a-z:DEFSTR a,b,c,e,k 100 er=CHR$(248)+" " 110 DIM z(22,15),E(19),A(19),B(19),L(20),N$(12),s(12) 120 FOR x=0 TO 20:FOR y=0 TO 11 STEP 11:z(x,y)=1:NEXT:NEXT:FOR y=0 TO 11:z(21,y)=1:NEXT 130 FOR i=0 TO 6:x(i)=i:NEXT 140 TOP=1:GOSUB 450 150 n=(RND*19):IF n=0 THEN 150 160 GOSUB 1030 170 PRINT rev$ FNat$(7,31)" "CHR$(150)+STRING$(24,154)+CHR$(156)" " 180 FOR x=8 TO 30:PRINT FNat(x,31)" "CHR$(149)CHR$(149)" "ROF$:FOR y=35 TO 57 STEP 2:PRINT FNat$(x,y)ER:NEXT:PRINT FNat$(X,55)REV$ " "CHR$(149)CHR$(149)" ":NEXT 190 PRINT rev$ FNat$(8,33)CHR$(150)+CHR$(154)ul$+STRING$(20,154)+nul$+CHR$(154)+CHR$(156) 200 PRINT FNat$(29,33)CHR$(147)+STRING$(22,154)+CHR$(153) 210 PRINT FNat$(30,31)" "CHR$(147)+STRING$(24,154)+CHR$(153)" " 220 PRINT rof$ FNAT$(5,0)CHR$(134)+STRING$(10,138)+CHR$(140)" "CHR$(134)+STRING$(3,138)+CHR$(140) 230 PRINT FNat$(6,0)CHR$(133)" "CHR$(133)" "CHR$(133)" "CHR$(133) 240 PRINT FNAT$(7,0)CHR$(131)+STRING$(10,138)+CHR$(137)" "CHR$(131)+STRING$(3,138)+CHR$(137) 250 PRINT FNat$(8,0)rof$"TOTAL SCORE LEVEL" 260 PRINT FNAT$(24,67)CHR$(134)+STRING$(20,138)+CHR$(140) 270 PRINT FNAT$(5,67)CHR$(134)+STRING$(20,138)+CHR$(140) 280 PRINT FNat$(6,68)" PREVIOUS HI-SCORES" 290 FOR x=25 TO 29:PRINT FNat$(x,67)CHR$(133)" "er er er er er er er er er " " CHR$(133):NEXT 300 FOR x=6 TO 20:FOR y=67 TO 88 STEP 21:PRINT FNat$(x,y)CHR$(133):NEXT:NEXT 310 PRINT FNAT$(30,67)CHR$(131)+STRING$(20,138)+CHR$(137) 320 PRINT FNAT$(21,67)CHR$(131)+STRING$(20,138)+CHR$(137) 330 PRINT FNAT$(9,0)CHR$(134)+STRING$(20,138)+CHR$(140) 340 FOR x=10 TO 29:FOR y=0 TO 21 STEP 21:PRINT FNat$(x,y)CHR$(133):NEXT:NEXT 350 PRINT FNAT$(30,0)CHR$(131)+STRING$(20,138)+CHR$(137) 360 PRINT FNat$(10,2)B(1) 370 PRINT FNat$(13,2)B(2) 380 PRINT FNat$(15,2)B(4) 390 PRINT FNat$(18,2)B(8) 400 PRINT FNat$(21,2)B(12) 410 PRINT FNat$(24,2)B(16) 420 PRINT FNat$(27,4)B(18) 430 'PRINT FNat$(26,75) b(n) 440 MEMORY h!:RUN "TETRIS.OVL 450 c1=STRING$(2,8)+CHR$(10):c2=STRING$(4,8)+CHR$(10):c3=STRING$(6,8)+CHR$(10):b(1)=FNd$(4,0)+c2+FNd$(4,0) 460 a(1)=er+er+c2+er+er 470 e(1)=er+er 480 b(2)=FNd$(8,1) 490 a(2)=er+er+er+er 500 e(2)=er+er+er+er 510 b(3)=FNd$(2,1)+C1+FNd$(2,1)+c1+FNd$(2,1)+c1+FND$(2,1) 520 a(3)=er+C1+er+c1+er+c1+er 530 e(3)=er 540 b(4)=FNd$(6,2)+c1+FNd$(2,2) 550 a(4)=er+er+er+c1+er 560 e(4)=er+er+er 570 b(5)=FNd$(2,2)+c1+FNd$(2,2)+c2+FNd$(4,2) 580 a(5)=er+c1+er+c2+er+er 590 e(5)=er+c1+c1+er 600 b(6)=FNd$(2,2)+c1+FNd$(6,2) 610 a(6)=er+c1+er+er+er 620 e(6)=er+CHR$(10)+er+er 630 b(7)=FNd$(4,2)+c2+FNd$(2,2)+C1+FNd$(2,2) 640 a(7)=er+er+c2+er+C1+er 650 e(7)=er+er 660 b(8)=FNd$(6,3)+c3+FNd$(2,3) 670 a(8)=er+er+er+c3+er 680 e(8)=er+er+er 690 b(9)=FNd$(4,3)+c1+FNd$(2,3)+C1+FNd$(2,3) 700 a(9)=er+er+c1+er+C1+er 710 e(9)=er+er 720 b(10)=FNd$(2,3)+c3+FNd$(6,3) 730 a(10)=er+c3+er+er+er 740 e(10)=er+c3+er+er 750 b(11)=FNd$(2,3)+c1+FNd$(2,3)+c1+FNd$(4,3) 760 a(11)=er+c1+er+c1+er+er 770 e(11)=er+STRING$(2,10)+er 780 b(12)=FNd$(6,4)+c2+FNd$(2,4) 790 a(12)=er+er+er+c2+er 800 e(12)=er+er+er 810 b(13)=FNd$(2,4)+c2+FNd$(4,4)+c1+FNd$(2,4) 820 a(13)=er+c2+er+er+c1+er 830 e(13)=er+c2+er 840 b(14)=FNd$(2,4)+c2+FNd$(6,4) 850 a(14)=er+c2+er+er+er 860 e(14)=er+c2+er+FNd$(2,4)+er 870 b(15)=FNd$(2,4)+c1+FNd$(4,4)+c2+FNd$(2,4) 880 a(15)=er+c1+er+er+c2+er 890 e(15)=er+CHR$(10)+er 900 b(16)=FNd$(4,5)+c1+FNd$(4,5) 910 a(16)=er+er+c1+er+er 920 e(16)=er+er+CHR$(10)+er 930 b(17)=FNd$(2,5)+c2+FNd$(4,5)+c2+FNd$(2,5) 940 a(17)=er+c2+er+er+c2+er 950 e(17)=er+c2+er 960 b(18)=FNd$(4,6)+c3+FNd$(4,6) 970 a(18)=er+er+c3+er+er 980 e(18)=er+er+c3+er 990 b(19)=FNd$(2,6)+c1+FNd$(4,6)+c1+FNd$(2,6) 1000 a(19)=er+c1+er+er+c1+er 1010 e(19)=er+CHR$(10)+er 1020 RETURN 1030 banner(1)=FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(2,x(1))+" "+FNd$(6,x(1)) 1040 banner(2)=" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2)) 1050 banner(3)=" "+FNd$(2,x(3))+" "+FNd$(4,x(3))+" "+FNd$(2,x(3))+" "+FNd$(5,X(3))+" "+FNd$(2,x(3))+" "+FNd$(6,x(3)) 1060 banner(4)=" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4)) 1070 banner(5)=" "+FNd$(2,x(5))+" "+FNd$(6,x(5))+" "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(6,x(5)) 1080 FOR x=5 TO 1 STEP -1:PRINT FNat$(x-1,26)banner(x):NEXT 1090 RETURN * **__Listado 3 - TETRIS.OVL__** 10 OPTION RUN:h!=HIMEM:MEMORY,10000 20 ee$=CHR$(27):con$=ee$+"e" 30 ul$=ee$+"r":nul$=ee$+"u" 40 DEF FNat$(x,y)=ee$+"Y"+CHR$(32+x)+CHR$(32+y) 50 DEF FNd$(h,g)=STRING$(h,249+g) 70 rev$=ee$+"p":rof$=ee$+"q" 80 RANDOMIZE(PEEK(64504!)) 90 DEFINT a-z:DEFSTR a,b,c,e,k 100 er=CHR$(248)+" " 110 DIM z(22,15),E(19),A(19),B(19),L(20),N$(12),s(12) 120 FOR x=0 TO 20:FOR y=0 TO 11 STEP 11:z(x,y)=1:NEXT:NEXT:FOR y=0 TO 11:z(21,y)=1:z(22,y)=1:NEXT 130 FOR i=0 TO 6:x(i)=i:NEXT 140 TOP=1:GOSUB 1760 150 n=(RND*19):IF n=0 THEN 150 440 GOSUB 2500 450 i=0:k="" 460 WHILE k="":k=INKEY$:GOSUB 2630:PRINT FNat$(6,18)" ":GOSUB 2630:PRINT FNat$(6,18)rev$" ? "rof$:WEND 470 IF INSTR("-.*=+",k)>0 THEN k="":GOTO 460 480 r=VAL(k):IF r=0 THEN r=5 490 PRINT FNat$(6,18)USING "*#*";r 500 x1=1:x=1:y1=4:y=4 510 PRINT FNat$(26,75)a(n) 520 p=t:t=n:n=RND*19 530 IF n=0 THEN n=2 540 PRINT FNat$(26,75)b(n) 550 GOSUB 1240 560 GOSUB 1550 570 ok=FRE(""):IF r<9 THEN FOR delay=1 TO 8191 STEP (2^(r*1.5)):NEXT 580 k=INKEY$:IF k="" THEN 590 ELSE I=INSTR(CHR$(1)+CHR$(6)+CHR$(31)+CHR$(30)+CHR$(27),k):IF I>0 THEN 610 590 k=INKEY$:x=x+1:GOSUB 1240:GOSUB 1280 600 GOTO 570 610 ON I GOTO 620,760,950,1200,2340 620 ON T GOTO 630,640,650,660,670,630,680,630,690,700,680,710,720,730,680,710,740,730,750 630 IF z(x,y-1) OR z(x+1,y-1) THEN 590 ELSE GOTO 1180 640 IF z(x,y-1) THEN 590 ELSE GOTO 1180 650 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y-1) OR z(x+3,y-1) THEN 590 ELSE GOTO 1180 660 IF z(x,y-1) OR z(x+1,y+1) THEN 590 ELSE GOTO 1180 670 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y-2) THEN 590 ELSE GOTO 1180 680 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y-1) THEN 590 ELSE GOTO 1180 690 IF z(x,y-1) OR z(x+1,y) OR z(x+2,y) THEN 590 ELSE 1180 700 IF z(x,y-1) OR z(x+1,y-3) THEN 590 ELSE 1180 710 IF z(x,y-1) OR z(x+1,y) THEN 590 ELSE 1180 720 IF z(x,y-1) OR z(x+1,y-2) OR z(x+2,y-1) THEN 590 ELSE 1180 730 IF z(x,y-1) OR z(x+1,y-2) THEN 590 ELSE 1180 740 IF z(x,y-1) OR z(x+1,y-2) OR z(x+2,y-2) THEN 590 ELSE 1180 750 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y) THEN 590 ELSE 1180 760 ON T GOTO 770,780,790,800,810,820,830,840,850,860,870,880,810,890,900,910,920,930,940 770 IF z(x,y+2) OR z(x+1,y+2) THEN 590 ELSE GOTO 1190 780 IF z(x,y+4) THEN 590 ELSE GOTO 1190 790 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y+1) OR z(x+3,y+1) THEN 590 ELSE GOTO 1190 800 IF z(x,y+3) OR z(x+1,y+3) THEN 590 ELSE GOTO 1190 810 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE GOTO 1190 820 IF z(x,y+1) OR z(x+1,y+3) THEN 590 ELSE GOTO 1190 830 IF z(x,y+2) OR z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE 1190 840 IF z(x,y+3) OR z(x+1,y+1) THEN 590 ELSE 1190 850 IF z(x,y+2) OR z(x+1,y+2) OR z(x+2,y+2) THEN 590 ELSE 1190 860 IF z(x,y+1) OR z(x+1,y+1) THEN 590 ELSE 1190 870 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y+2) THEN 590 ELSE 1190 880 IF z(x,y+3) OR z(x+1,y+2) THEN 590 ELSE 1190 890 IF z(x,y+1) OR z(x+1,y+2) THEN 590 ELSE 1190 900 IF z(x,y+1) OR z(x+1,y+2) OR z(x+2,y+1) THEN 590 ELSE GOTO 1190 910 IF z(x,y+2) OR z(x+1,y+3) THEN 590 ELSE 1190 920 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y) THEN 590 ELSE GOTO 1190 930 IF z(x,y+2) OR z(x+1,y+1) THEN 590 ELSE 1190 940 IF z(x,y+1) OR z(x+1,y+2) OR z(x+2,y+2) THEN 590 ELSE GOTO 1190 950 ON t GOTO 590,960,970,980,990,1000,1010,1020,1029,1040,1050,1060,1070,1080,1090,1100,1110,1120,1130:RETURN 960 IF z(x+1,y) OR z(x+2,y) OR z(x+3,y) THEN 590 ELSE p=t:t=3:GOTO 1140 970 IF z(x,y+1) OR z(x,y+2) OR z(x,y+3) THEN 590 ELSE p=t:t=2:GOTO 1140 980 IF z(x+1,y) OR z(x+2,y) OR z(x+2,y-1) THEN 590 ELSE p=t:t=5:GOTO 1140 990 IF z(x+1,y+1) OR z(x+2,y+2) THEN 590 ELSE p=t:t=6:GOTO 1140 1000 IF z(x,y+1) OR z(x+2,y) THEN 590 ELSE p=t:t=7:GOTO 1140 1010 IF z(x,y+2) OR z(x+1,y+2) THEN 590 ELSE p=t:t=4:GOTO 1140 1020 IF z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE p=t:t=9:GOTO 1140 1029 ' 1030 IF z(x+1,MAX(0,y-2)) OR z(x+1,y-1) OR z(x+1,y) THEN 590 ELSE p=t:t=10:GOTO 1140 1040 IF z(x+2,y) OR z(x+2,y+1) THEN 590 ELSE p=t:t=11:GOTO 1140 1050 IF z(x,y+2) OR z(x,y+3) THEN 590 ELSE p=t:t=8:GOTO 1140 1060 IF z(x+1,y-1) OR z(x+1,y) OR z(x+2,y) THEN 590 ELSE p=t:t=13:GOTO 1140 1070 IF z(x+1,y+1) THEN 590 ELSE p=t:t=14:GOTO 1140 1080 IF z(x+2,y) THEN 590 ELSE p=t:t=15:GOTO 1140 1090 IF z(x,y+1) OR z(x,y+2) THEN 590 ELSE p=t:t=12:GOTO 1140 1100 IF z(x+1,y) OR z(x+1,y-1) OR z(x+2,y-1) THEN 590 ELSE p=t:t=17:GOTO 1140 1110 IF z(x,y+1) OR z(x+1,y+1) OR z(x+1,y+2) THEN 590 ELSE p=t:t=16:GOTO 1140 1120 IF z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE p=t:t=19:GOTO 1140 1130 IF z(x+1,y-1) OR z(x,y+1) THEN 590 ELSE p=t:t=18:GOTO 1140 1140 PRINT FNat$(x+8,y*2+33) a(p) 1150 PRINT FNat$(x+8,y*2+33) b(t) 1160 GOSUB 1280 1170 GOTO 590 1180 PRINT FNat$(x+8,y*2+33)a(t):y=y-1:GOSUB 1250:GOSUB 1280:GOTO 590 1190 PRINT FNat$(x+8,y*2+33)a(t):y=y+1:GOSUB 1250:GOSUB 1280:GOTO 590 1200 drop=1:x=x+1:GOSUB 1280:IF landed=0 THEN GOTO 1200 1210 PRINT FNat$(x1+8,y1*2+33) a(t) 1220 PRINT FNat$(x+8,y*2+33) b(t) 1230 landed=0:GOSUB 1280 1240 PRINT FNat$(x1+8,y1*2+33)E(T) 1250 PRINT FNat$(x+8,y*2+33)B(T) 1260 x1=x:y1=y 1270 RETURN 1280 ON t GOSUB 1290,1300,1310,1320,1330,1340,1350,1360,1370,1380,1390,1400,1410,1420,1430,1440,1450,1460,1470:RETURN 1290 IF z(x+2,y) OR z(x+2,y+1) THEN z(x,y)=1:z(x,y+1)=1:z(x+1,y)=1:z(x+1,y+1)=1:GOTO 1480 ELSE RETURN 1300 IF z(x+1,y) OR z(x+1,y+1) OR z(x+1,y+2) OR z(x+1,y+3) THEN z(x,y)=2:z(x,y+1)=2:z(x,y+2)=2:z(x,y+3)=2:GOTO 1480 ELSE RETURN 1310 IF z(x+4,y) THEN z(x,y)=2:z(x+1,y)=2:z(x+2,y)=2:z(x+3,y)=2:GOTO 1480 ELSE RETURN 1320 IF z(x+1,y) OR z(x+1,y+1) OR z(x+2,y+2) THEN z(x,y)=3:z(x,y+1)=3:z(x,y+2)=3:z(x+1,y+2)=3:GOTO 1480 ELSE RETURN 1330 IF z(x+3,y-1) OR z(x+3,y) THEN z(x,y)=3:z(x+1,y)=3:z(x+2,y-1)=3:z(x+2,y)=3:GOTO 1480 ELSE RETURN 1340 IF z(x+2,y) OR z(x+2,y+1) OR z(x+2,y+2) THEN z(x,y)=3:z(x+1,y)=3:z(x+1,y+1)=3:z(x+1,y+2)=3:GOTO 1480 ELSE RETURN 1350 IF z(x+3,y) OR z(x+1,y+1) THEN z(x,y)=3:z(x,y+1)=3:z(x+1,y)=3:z(x+2,y)=3:GOTO 1480 ELSE RETURN 1360 IF z(x+2,y) OR z(x+1,y+1) OR z(x+1,y+2) THEN z(x,y)=4:z(x,y+1)=4:z(x,y+2)=4:z(x+1,y)=4:GOTO 1480 ELSE RETURN 1370 IF z(x+1,y) OR z(x+3,y+1) THEN z(x,y)=4:z(x,y+1)=4:z(x+1,y+1)=4:z(x+2,y+1)=4:GOTO 1480 ELSE RETURN 1380 IF z(x+2,y-2) OR z(x+2,y-1) OR z(x+2,y) THEN z(x,y)=4:z(x+1,y-2)=4:z(x+1,y-1)=4:z(x+1,y)=4:GOTO 1480 ELSE RETURN 1390 IF z(x+3,y) OR z(x+3,y+1) THEN z(x,y)=4:z(x+1,y)=4:z(x+2,y)=4:z(x+2,y+1)=4:GOTO 1480 ELSE RETURN 1400 IF z(x+1,y) OR z(x+2,y+1) OR z(x+1,y+2) THEN z(x,y)=5:z(x,y+1)=5:z(x,y+2)=5:z(x+1,y+1)=5:GOTO 1480 ELSE RETURN 1410 IF z(x+2,y-1) OR z(x+3,y) THEN z(x,y)=5:z(x+1,y-1)=5:z(x+1,y)=5:z(x+2,y)=5:GOTO 1480 ELSE RETURN 1420 IF z(x+2,y-1) OR z(x+2,y) OR z(x+2,y+1) THEN z(x,y)=5:z(x+1,y-1)=5:z(x+1,y)=5:z(x+1,y+1)=5:GOTO 1480 ELSE RETURN 1430 IF z(x+3,y) OR z(x+2,y+1) THEN z(x,y)=5:z(x+1,y)=5:z(x+1,y+1)=5:z(x+2,y)=5:GOTO 1480 ELSE RETURN 1440 IF z(x+1,y) OR z(x+2,y+1) OR z(x+2,y+2) THEN z(x,y)=6:z(x,y+1)=6:z(x+1,y+1)=6:z(x+1,y+2)=6:GOTO 1480 ELSE RETURN 1450 IF z(x+3,y-1) OR z(x+2,y) THEN z(x,y)=6:z(x+1,y-1)=6:z(x+1,y)=6:z(x+2,y-1)=6:GOTO 1480 ELSE RETURN 1460 IF z(x+2,y-1) OR z(x+2,y) OR z(x+1,y+1) THEN z(x,y)=7:z(x,y+1)=7:z(x+1,y-1)=7:z(x+1,y)=7:GOTO 1480 ELSE RETURN 1470 IF z(x+2,y) OR z(x+3,y+1) THEN z(x,y)=7:z(x+1,y)=7:z(x+1,y+1)=7:z(x+2,y+1)=7:GOTO 1480 ELSE RETURN 1480 IF x<3 THEN k=INKEYS$:k=INKEY$:GOTO 2340 1490 IF drop THEN drop=0:landed=1:RETURN 1500 TOP=MIN(TOP,x):FOR xx=x TO 20:l(xx)=0:FOR yy=1 TO 10 1510 IF z(xx,yy) THEN l(xx)=l(xx)+1 1520 NEXT:NEXT 1530 FOR XX=x TO 20:IF L(xx)=10 THEN PRINT CHR$(7):GOSUB 1700 1540 NEXT:GOTO 500 1550 ON t GOSUB 1630,1640,1640,1650,1650,1650,1650,1660,1660,1660,1660,1670,1670,1670,1670,1680,1680,1690,1690:d(8)=d(8)+1:PRINT FNat$(29,14) USING "####";d(8):PRINT FNat$(6,2) USING "#######";s 1560 IF s>500 AND r<2 THEN r=2 1570 IF s>1000 AND r<3 THEN r=3 1572 IF s>1250 AND r<4 THEN r=4 1580 IF s>1500 AND r<5 THEN r=5 1582 IF s>1750 AND r<6 THEN r=6 1590 IF s>2000 AND r<7 THEN r=7 1592 IF s>2500 AND r<8 THEN r=8 1600 IF s>3000 AND r<9 THEN r=9 1610 PRINT FNat$(6,18) USING "*#*";r 1620 RETURN 1630 s=s+15+(r/2):d(1)=d(1)+1:PRINT FNat$(11,15) USING "###";d(1):RETURN 1640 s=s+15+(r/2):d(2)=d(2)+1:PRINT FNat$(13,15) USING "###";d(2):RETURN 1650 s=s+17+(r/2):d(3)=d(3)+1:PRINT FNat$(15,15) USING "###";d(3):RETURN 1660 s=s+17+(r/2):d(4)=d(4)+1:PRINT FNat$(18,15) USING "###";d(4):RETURN 1670 s=s+19+(r/2):d(5)=d(5)+1:PRINT FNat$(21,15) USING "###";d(5):RETURN 1680 s=s+19+(r/2):d(6)=d(6)+1:PRINT FNat$(24,15) USING "###";d(6):RETURN 1690 s=s+19+(r/2):d(7)=d(7)+1:PRINT FNat$(27,15) USING "###";d(7):RETURN 1700 FOR ya=1 TO 10:FOR xa=xx TO TOP STEP -1 1710 IF z(xa,ya)=z(xa-1,ya) THEN 1740 1720 z(xa,ya)=z(xa-1,ya) 1730 IF z(xa,ya) THEN PRINT FNat$(xa+8,ya*2+33) FNd$(2,(z(xa,ya)-1)) ELSE PRINT FNat$(xa+8,ya*2+33)er 1740 NEXT:NEXT 1750 TOP=TOP+1:s=s+(r*4):PRINT FNat$(6,2) USING "#######";s :RETURN 1760 c1=STRING$(2,8)+CHR$(10):c2=STRING$(4,8)+CHR$(10):c3=STRING$(6,8)+CHR$(10):b(1)=FNd$(4,0)+c2+FNd$(4,0) 1770 a(1)=er+er+c2+er+er 1780 e(1)=er+er 1790 b(2)=FNd$(8,1) 1800 a(2)=er+er+er+er 1810 e(2)=er+er+er+er 1820 b(3)=FNd$(2,1)+C1+FNd$(2,1)+c1+FNd$(2,1)+c1+FND$(2,1) 1830 a(3)=er+C1+er+c1+er+c1+er 1840 e(3)=er 1850 b(4)=FNd$(6,2)+c1+FNd$(2,2) 1860 a(4)=er+er+er+c1+er 1870 e(4)=er+er+er 1880 b(5)=FNd$(2,2)+c1+FNd$(2,2)+c2+FNd$(4,2) 1890 a(5)=er+c1+er+c2+er+er 1900 e(5)=er+c1+c1+er 1910 b(6)=FNd$(2,2)+c1+FNd$(6,2) 1920 a(6)=er+c1+er+er+er 1930 e(6)=er+CHR$(10)+er+er 1940 b(7)=FNd$(4,2)+c2+FNd$(2,2)+C1+FNd$(2,2) 1950 a(7)=er+er+c2+er+C1+er 1960 e(7)=er+er 1970 b(8)=FNd$(6,3)+c3+FNd$(2,3) 1980 a(8)=er+er+er+c3+er 1990 e(8)=er+er+er 2000 b(9)=FNd$(4,3)+c1+FNd$(2,3)+C1+FNd$(2,3) 2010 a(9)=er+er+c1+er+C1+er 2020 e(9)=er+er 2030 b(10)=FNd$(2,3)+c3+FNd$(6,3) 2040 a(10)=er+c3+er+er+er 2050 e(10)=er+c3+er+er 2060 b(11)=FNd$(2,3)+c1+FNd$(2,3)+c1+FNd$(4,3) 2070 a(11)=er+c1+er+c1+er+er 2080 e(11)=er+STRING$(2,10)+er 2090 b(12)=FNd$(6,4)+c2+FNd$(2,4) 2100 a(12)=er+er+er+c2+er 2110 e(12)=er+er+er 2120 b(13)=FNd$(2,4)+c2+FNd$(4,4)+c1+FNd$(2,4) 2130 a(13)=er+c2+er+er+c1+er 2140 e(13)=er+c2+er 2150 b(14)=FNd$(2,4)+c2+FNd$(6,4) 2160 a(14)=er+c2+er+er+er 2170 e(14)=er+c2+er+FNd$(2,4)+er 2180 b(15)=FNd$(2,4)+c1+FNd$(4,4)+c2+FNd$(2,4) 2190 a(15)=er+c1+er+er+c2+er 2200 e(15)=er+CHR$(10)+er 2210 b(16)=FNd$(4,5)+c1+FNd$(4,5) 2220 a(16)=er+er+c1+er+er 2230 e(16)=er+er+CHR$(10)+er 2240 b(17)=FNd$(2,5)+c2+FNd$(4,5)+c2+FNd$(2,5) 2250 a(17)=er+c2+er+er+c2+er 2260 e(17)=er+c2+er 2270 b(18)=FNd$(4,6)+c3+FNd$(4,6) 2280 a(18)=er+er+c3+er+er 2290 e(18)=er+er+c3+er 2300 b(19)=FNd$(2,6)+c1+FNd$(4,6)+c1+FNd$(2,6) 2310 a(19)=er+c1+er+er+c1+er 2320 e(19)=er+CHR$(10)+er 2330 RETURN 2340 FOR q=1 TO 12:IF s>s(q) THEN 2360 2350 NEXT:GOTO 2410 2360 PRINT FNat$(20,68)" PLEASE INSERT NAME" 2370 FOR qq=12 TO q+1 STEP -1:n$(qq)=n$(qq-1):s(qq)=s(qq-1):NEXT:n$(q)=" ":s(q)=s 2380 FOR qq=1 TO 12:PRINT FNat$(7+qq,70) n$(qq) :PRINT FNat$(7+qq,81) USING "#####";s(qq):NEXT 2390 PRINT FNat$(q+7,70);:INPUT"",n$(q):n$(q)=UPPER$(LEFT$(n$(q),10)) 2400 PRINT FNat$(7+q,70) n$(q)+SPACE$(11-LEN(n$(q))):PRINT FNat$(7+q,81) USING "#####";s(q) 2410 PRINT FNat$(20,68)" PLAY AGAIN Y/N? " 2420 k=UPPER$(INPUT$(1)):PRINT FNat$(20,68)" ":IF k="Y" THEN ERASE z,e,b,l,d:GOTO 2560 2430 IF k="N" THEN PRINT CHR$(7) ELSE GOTO 2410 2440 OPEN "O",#1,"TETRIS.REC" 2450 FOR q=1 TO 12 2460 WRITE #1, n$(q),s(q) 2470 NEXT 2480 CLOSE 2490 MEMORY h!:end 2500 IF FIND$("TETRIS.REC")<>"" THEN OPEN "I",#1,"TETRIS.REC" ELSE PRINT FNat$(8,70)"NO RECORDS YET":GOTO 2550 2510 FOR q=1 TO 12 2520 INPUT #1, n$(q),s(q) 2530 PRINT FNat$(7+q,70) n$(q) FNat$(7+q,81) USING "#####";s(q):NEXT 2540 CLOSE 2550 RETURN 2560 DIM z(22,15),E(19),B(19),L(20) 2570 FOR x=1 TO 20 2580 PRINT FNat$(x+8,35)er er er er er er er er er er 2590 PRINT FNat$(x+9,10)" " 2600 NEXT:s=0 2610 FOR x=0 TO 20:FOR y=0 TO 11 STEP 11:z(x,y)=1:NEXT:NEXT:FOR y=0 TO 11:z(21,y)=1:NEXT 2620 GOSUB 1760:GOTO 450 2630 SWAP x(1),x(2):SWAP x(2),x(3):SWAP x(3),x(4):SWAP x(4),x(5):SWAP x(5),X(6):SWAP x(6),x(7) 2640 banner(1)=FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(2,x(1))+" "+FNd$(6,x(1)) 2650 banner(2)=" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2)) 2660 banner(3)=" "+FNd$(2,x(3))+" "+FNd$(4,x(3))+" "+FNd$(2,x(3))+" "+FNd$(5,X(3))+" "+FNd$(2,x(3))+" "+FNd$(6,x(3)) 2670 banner(4)=" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4))+" "+FNd$(2,x(4)) 2680 banner(5)=" "+FNd$(2,x(5))+" "+FNd$(6,x(5))+" "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(6,x(5)) 2690 FOR x=5 TO 1 STEP -1:PRINT FNat$(x-1,26)banner(x):NEXT 2700 RETURN ===== Controles ===== ↑ = ROTAR FICHA ↓ = ACELERAR CAÍDA → = DERECHA ← = IZQUIERDA EXIT = ABANDONAR PARTIDA ===== Carga del programa ===== 1.- Introducir el disco CP/M por la cara 2 2.- Escribir BASIC y esperar a que cargue 3.- Retirar el disco CP/M e introducir el disco que contiene el juego Tetris 4.- Teclear run "Tetris" y pulsar la tecla "ENTER" ===== Descarga ===== * {{:otros:Tetris (Basic).zip|Tetris }}(juego en formato dsk, comprimido con zip)