' ' 浜様様様様様様様様様様様様様様様様様様様様様様様様様 ' ' 浜様様様様様様様様様様様様様様様様様様様様 ' ' ' T E T R I S ' ' ' ' H E C H O E N R O N D A ' ' F5 >> Empezar ' ' 藩様様様様様様様様様様様様様様様様様様様様 ' es.geocities.com/jm00092 ' 藩様様様様様様様様様様様様様様様様様様様様様様様様様 ' ' ' ' ' DECLARE SUB letras (X!, Y!, TEXT$, escl!, clrs!, ang!, ancho!, relleno!) DECLARE SUB digital (h!, v!, num!, l!, C1!, C2!, B!) DECLARE SUB lineas (h!, v!, l!, puntos!, nivel!, retardo!) DECLARE SUB boton (h!, v!, l!, a!, sol!, sombra!, cara!, borde!) DECLARE SUB pieza (h!, v!, n!, c!) DECLARE SUB cargarformas (forma$) DECLARE FUNCTION ocupado! (h!, v!, n!) DIM SHARED forma$(1 TO 40) cargarformas forma$ RANDOMIZE TIMER SCREEN 12 PALETTE 12, 63 PALETTE 7, 0 PALETTE 8, 0 PALETTE 1, 0 COLOR 15: LOCATE 30, 29: PRINT "Tetris -- Hecho en Ronda"; FOR v = 20 TO 480 STEP 20 FOR h = -10 TO 640 STEP 20 boton h, v, 19, 19, 7, 0, 8, 0 NEXT NEXT boton 180, 30, 80, 420, 15, 4, 12, 0 LOCATE 1, 1: COLOR 1: PRINT "Tetris" FOR h = 46 TO 0 STEP -1 FOR v = 2 TO 11 IF POINT(h, v) = 1 THEN LINE (v * 3 + 201, 181 - (h * 2))-STEP(2, 1), 0, B LINE (v * 3 + 200, 180 - (h * 2))-STEP(2, 1), 14, B END IF NEXT NEXT FOR h = -10 TO 640 STEP 20 boton h, 0, 19, 19, 7, 0, 8, 0 NEXT PALETTE PALETTE 12, 63 boton 260, 30, 200, 420, 15, 8, 7, 0 boton 267, 37, 186, 406, 8, 15, 7, 7 boton 195, 245, 52, 52, 8, 15, 0, 7 digital 200, 320, 0, 3, 10, 8, 1 digital 200, 370, 0, 3, 10, 8, 1 letras 194, 428, "hecho en", 6, 4, 0, 1, 1 letras 197, 439, "ronda", 8, 4, 0, 2, 1 letras 193, 427, "hecho en", 6, 14, 0, 1, 1 letras 196, 438, "ronda", 8, 14, 0, 2, 1 letras 270, 275, "Siguiente pieza", 8, 0, 0, 2, 1 letras 270, 335, "Lneas", 8, 0, 0, 2, 1 letras 270, 385, "Nivel", 8, 0, 0, 2, 1 letras 270, 275, "Siguiente pieza", 8, 12, 0, 1, 1 letras 270, 335, "Lneas", 8, 12, 0, 1, 1 letras 270, 385, "Nivel", 8, 12, 0, 1, 1 letras 285, 430, "Pulsa cualquier tecla para empezar", 4, 0, 0, 1, 1 boton 280, 100, 53, 20, 15, 8, 7, 0 letras 281, 112, "ARRIBA", 8, 0, 0, 2, 1 letras 335, 112, "GIRAR", 8, 0, 0, 2, 1 letras 335, 112, "GIRAR", 8, 1, 0, 1, 1 boton 280, 125, 53, 20, 15, 8, 7, 0 letras 281, 137, "Abajo", 8, 0, 0, 2, 1 letras 335, 137, "bajar rpido", 8, 0, 0, 2, 1 letras 335, 137, "bajar rpido", 8, 1, 0, 1, 1 boton 280, 150, 53, 20, 15, 8, 7, 0 letras 281, 162, "izqda.", 8, 0, 0, 2, 1 letras 335, 162, "mover izqda.", 8, 0, 0, 2, 1 letras 335, 162, "mover izqda.", 8, 1, 0, 1, 1 boton 280, 175, 53, 20, 15, 8, 7, 0 letras 281, 187, "drcha.", 8, 0, 0, 2, 1 letras 335, 187, "mover drcha.", 8, 0, 0, 2, 1 letras 335, 187, "mover drcha.", 8, 1, 0, 1, 1 boton 280, 200, 53, 20, 15, 8, 7, 0 letras 281, 212, "esc", 8, 0, 0, 2, 1 letras 335, 212, "salir", 8, 0, 0, 2, 1 letras 335, 212, "salir", 8, 1, 0, 1, 1 siguiente = (INT(RND * 10) + 1) * (INT(RND * 4) + 1) X = 0 FOR vv = 252 TO 282 STEP 10 FOR hh = 202 TO 232 STEP 10 X = X + 1 IF MID$(forma$(siguiente), X, 1) = "1" THEN LINE (hh, vv)-STEP(8, 8), 8, B LINE (hh, vv)-STEP(7, 7), 15, B LINE (hh + 1, vv + 1)-STEP(6, 6), 7, BF END IF NEXT NEXT WHILE INKEY$ <> "": WEND DO: LOOP WHILE INKEY$ = "" nivel = 1 retardo = 2502 digital 200, 370, nivel, 3, 10, 8, 1 boton 267, 37, 186, 406, 8, 15, 0, 7 DO h = 330 v = 40 LINE (198, 248)-STEP(46, 46), 0, BF tipo = siguiente siguiente = (INT(RND * 10) + 1) * (INT(RND * 4) + 1) X = 0 FOR vv = 252 TO 282 STEP 10 FOR hh = 202 TO 232 STEP 10 X = X + 1 IF MID$(forma$(siguiente), X, 1) = "1" THEN LINE (hh, vv)-STEP(8, 8), 8, B LINE (hh, vv)-STEP(7, 7), 15, B LINE (hh + 1, vv + 1)-STEP(6, 6), 7, BF END IF NEXT NEXT IF ocupado(h, v, tipo) = 0 THEN pieza h, v, tipo, 1 DO ret = 0 DO kbd$ = INKEY$ ret = ret + 1 LOOP WHILE kbd$ = "" AND ret < retardo ah = h av = v SELECT CASE kbd$ CASE CHR$(0) + "H" atipo = tipo tipo = tipo + 10 IF tipo > 40 THEN tipo = tipo - 40 pieza h, v, atipo, 0 IF ocupado(h, v, tipo) = 0 THEN pieza h, v, tipo, 30 ELSE tipo = atipo pieza h, v, tipo, 30 SOUND 3000, 1 END IF CASE CHR$(0) + "P": v = v + 20 CASE CHR$(0) + "K": h = h - 20 CASE CHR$(0) + "M": h = h + 20 CASE "": v = v + 20 CASE CHR$(27) llegado = 1 terminado = 1 END SELECT pieza ah, av, tipo, 0 IF ocupado(h, v, tipo) = 0 THEN pieza h, v, tipo, 30 ELSE pieza ah, av, tipo, 30 IF v <> av THEN llegado = 1 ELSE h = ah v = av SOUND 3000, 1 END IF END IF IF llegado = 0 AND ret = retardo THEN IF soni = 1 THEN soni = 0 SOUND 1500, .6 ELSE soni = 1 SOUND 1200, .6 END IF END IF LOOP WHILE llegado = 0 llegado = 0 FOR n = 800 TO 1200 STEP 100 SOUND n, .2 NEXT lineas 270, 420, 9, puntos, nivel, retardo ELSE terminado = 1 END IF LOOP WHILE terminado = 0 boton 290, 380, 140, 40, 15, 6, 14, 0 letras 292, 402, "JUEGO TERMINADO", 8, 4, 0, 2, 1 letras 292, 402, "JUEGO TERMINADO", 8, 12, 0, 1, 1 FOR n = 300 TO 40 STEP -10 SOUND n, 2 NEXT boton 290, 380, 140, 40, 15, 8, 7, 0 letras 292, 398, "JUEGO TERMINADO", 8, 4, 0, 2, 1 letras 292, 398, "JUEGO TERMINADO", 8, 12, 0, 1, 1 letras 305, 410, "pulsa una tecla para salir", 4, 0, 0, 1, 1 WHILE INKEY$ <> "": WEND DO: LOOP WHILE INKEY$ = "" CLS COLOR 12 LOCATE 16, 24: PRINT "J.M.G.B. Ronda Febrero 1999" COLOR 0 SUB boton (h, v, l, a, sol, sombra, cara, borde) LINE (h + 3, v + 3)-STEP(l - 6, a - 6), cara, BF LINE (h, v)-STEP(l, a), borde, B LINE (h + 1, v + 1)-STEP(l - 2, a - 2), sol, B LINE (h + 2, v + 2)-STEP(l - 3, a - 3), sombra, B LINE (h + 2, v + 2)-STEP(l - 4, a - 4), sol, B LINE (h + 3, v + 3)-STEP(l - 5, a - 5), sombra, B LINE (h + 3, v + 3)-STEP(l - 6, a - 6), cara, B END SUB SUB cargarformas (forma$) forma$(1) = "0100111000000000" forma$(11) = "0100110001000000" forma$(21) = "0000111001000000" forma$(31) = "0100011001000000" forma$(2) = "1000111000000000" forma$(12) = "0110010001000000" forma$(22) = "0000111000100000" forma$(32) = "0100010011000000" forma$(3) = "0010111000000000" forma$(13) = "0100010001100000" forma$(23) = "0000111010000000" forma$(33) = "1100010001000000" forma$(4) = "0000111100000000" forma$(14) = "0010001000100010" forma$(24) = "0000000011110000" forma$(34) = "0100010001000100" forma$(5) = "1100011000000000" forma$(15) = "0010011001000000" forma$(25) = "0000110001100000" forma$(35) = "0100110010000000" forma$(6) = "0110110000000000" forma$(16) = "0100011000100000" forma$(26) = "0000011011000000" forma$(36) = "1000110001000000" forma$(7) = "1100110000000000" forma$(17) = "1100110000000000" forma$(27) = "1100110000000000" forma$(37) = "1100110000000000" forma$(8) = "1110101000000000" forma$(18) = "0110001001100000" forma$(28) = "0000101011100000" forma$(38) = "1100100011000000" forma$(9) = "1100100000000000" forma$(19) = "1100010000000000" forma$(29) = "0100110000000000" forma$(39) = "1000110000000000" forma$(10) = "1110000000000000" forma$(20) = "0100010001000000" forma$(30) = "1110000000000000" forma$(40) = "0100010001000000" END SUB SUB digital (h, v, num, l, C1, C2, B) IF B THEN boton h - 5, v - 5, ((15 * l + 7)), 32, 8, 15, 0, 7 IF (l - LEN(STR$(num))) > -1 THEN n$ = SPACE$(l - LEN(STR$(num))) + STR$(num) ELSE n$ = RIGHT$(STR$(num), LEN(STR$(num)) - 1) END IF ah = h FOR X = 1 TO LEN(n$) SELECT CASE UCASE$(MID$(n$, X, 1)) CASE "1": cadena$ = "0010010" CASE "2": cadena$ = "1011101" CASE "3": cadena$ = "1011011" CASE "4": cadena$ = "0111010" CASE "5": cadena$ = "1101011" CASE "6": cadena$ = "1101111" CASE "7": cadena$ = "1010010" CASE "8": cadena$ = "1111111" CASE "9": cadena$ = "1111011" CASE "0": cadena$ = "1110111" CASE "-": cadena$ = "0001000" CASE " ": cadena$ = "0000000" CASE ELSE: SOUND 1000, 1: cadena$ = "0000000" END SELECT IF MID$(cadena$, 1, 1) = "1" THEN : PSET (h, v), C1: DRAW "s4brr10gl8fr6": ELSE : PSET (h, v), C2: DRAW "s4brr10gl8fr6" IF MID$(cadena$, 2, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bdd9eu7fd5": ELSE : PSET (h, v), C2: : DRAW "s4bdd9eu7fd5" IF MID$(cadena$, 3, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bdbr12d9hu7gd5": ELSE : PSET (h, v), C2: : DRAW "s4bdbr12d9hu7gd5" IF MID$(cadena$, 4, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4br2bd10r8fl10fr8": ELSE : PSET (h, v), C2: : DRAW "s4br2bd10r8fl10fr8" IF MID$(cadena$, 5, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bd12d9eu7fd5": ELSE : PSET (h, v), C2: : DRAW "s4bd12d9eu7fd5" IF MID$(cadena$, 6, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4bd12br12d9hu7gd5": ELSE : PSET (h, v), C2: : DRAW "s4bd12br12d9hu7gd5" IF MID$(cadena$, 7, 1) = "1" THEN : PSET (h, v), C1: : DRAW "s4brbd22r10hl8er6": ELSE : PSET (h, v), C2: : DRAW "s4brbd22r10hl8er6" PSET (h, v), 0 h = h + 15 NEXT h = ah END SUB SUB letras (X, Y, TEXT$, escl, clrs, ang, ancho, relleno) IF relleno < 1 THEN : relleno = 1 FOR h = 1 TO ancho STEP relleno FOR v = 1 TO ancho STEP relleno ccc = POINT(X + h, Y + v) PSET (X + h, Y + v), ccc c$ = STR$(clrs) e$ = STR$(escl) a$ = STR$(ang) FOR a = 1 TO LEN(TEXT$) IF clrs > 255 THEN c$ = STR$(INT(RND * 15) + 1) DRAW "S" + e$ + "C" + c$ + "ta" + a$ SELECT CASE UCASE$(MID$(TEXT$, a, 1)) CASE "A": DRAW "br2 u2nnr2u2r2d4" CASE "B": DRAW "br2 u4r2dgnlfdnl2" CASE "C": DRAW "br2 bu4 nr2d4r2" CASE "D": DRAW "br2 u4rfd2glbr2" CASE "E": DRAW "br2 bu4 nr2d2nr2d2r2" CASE "F": DRAW "br2 bu4 nr2d2nr2d2br2" CASE "G": DRAW "br2 bu4 nr2d4r2unld" CASE "H": DRAW "br2 u2nu2r2nu2d2" CASE "I": DRAW "br2 nu4" CASE "J": DRAW "br2 nur2nu4" CASE "K": DRAW "br2 u2 nu2ne2f2" CASE "L": DRAW "br2 nu4r2" CASE "M": DRAW "br2 u4f2e2d4" CASE "N": DRAW "br2 u4f4nu4" CASE "": DRAW "br2 u3f3u3bunl3bd4" CASE "": DRAW "br2 u3f3u3bunl3bd4" CASE "O": DRAW "br2 bu4 nr2d4r2nu4" CASE "P": DRAW "br2 u2nnr2u2r2d2bd2" CASE "Q": DRAW "br2 bu4 nr2d4renu3blf" CASE "R": DRAW "br2 u4r2d2l2f2" CASE "S": DRAW "br2 r2u2l2u2r2BD4" CASE "T": DRAW "br2 BU4r2nd4r2bd4" CASE "U": DRAW "br2 nu4r2nu4" CASE "V": DRAW "br2 bunu3fenu3bd" CASE "W": DRAW "br2 bunu3fenu2fenu3bd" CASE "X": DRAW "br2 br2bu2ne2nf2ng2nh2br2bd2" CASE "Y": DRAW "br2 br2u2nh2ne2bd2br2" CASE "Z": DRAW "br2 bu4 r4g2nlnrg2r4" CASE "1": DRAW "br2 bu3ed4nlr" CASE "2": DRAW "br2 bu4 r2d2l2d2r2" CASE "3": DRAW "br2 bu4 r2d2nl2d2nl2" CASE "4": DRAW "br2 bu2 nu2r2nu2d2" CASE "5": DRAW "br2 bu4 nr2d2r2d2nl2" CASE "6": DRAW "br2 bu4 nr2d2nr2d2r2nu2" CASE "7": DRAW "br2 bu4 r2d4" CASE "8": DRAW "br2 u4r2d2nl2d2nl2" CASE "9": DRAW "br2 bu2 nr2u2r2d4" CASE "0": DRAW "br2 bu4 nr2d4r2nu4" CASE "*": DRAW "br2 br2 u2nl2nu2nr2nengnhfbf " CASE "+": DRAW "br2 br2 u2nl2nu2r2bd2" CASE "-": DRAW "br2 bu2r2bd2" CASE ".": DRAW "br2": PSET STEP(0, 0), clrs CASE ",": DRAW "br2 ng" CASE ";": DRAW "br2 ngbunuBD" CASE ":": DRAW "br2": PSET STEP(0, 0), clrs: PSET STEP(0, -2), clrs: DRAW "bd2" CASE "=": DRAW "br2 bunr2bu2r2bd3" CASE "": DRAW "br2 unr2u2rbunebdrd3" CASE "": DRAW "br2 bu3 rbunebdrl2d2nr2dr2" CASE "": DRAW "br2 u3bunebd4" CASE "": DRAW "br2 u3rbunebdrd3nl2" CASE "": DRAW "br2 u3brbunebdbrd3nl2" CASE "": DRAW "br2 unr2u2rbunebdrd3" CASE "": DRAW "br2 bu3 rbunebdrl2d2nr2dr2" CASE "": DRAW "br2 u3bunebd4" CASE "": DRAW "br2 u3rbunebdrd3nl2" CASE "": DRAW "br2 u3brbunebdbrd3nl2" CASE ELSE: DRAW "S" + e$ + "ta" + a$ + "BR4" END SELECT NEXT NEXT NEXT DRAW "s4ta0" END SUB SUB lineas (h, v, l, puntos, nivel, retardo) FOR vv = v TO 120 STEP -20 hay = 0 FOR hh = h TO h + ((l - 1) * 20) STEP 20 hay = hay + POINT(hh + 5, vv + 5) NEXT IF hay = l * 7 THEN SOUND 3000, 2 FOR hh = h TO h + ((l - 1) * 20) STEP 20 boton hh, vv, 20, 20, 15, 4, 12, 0 NEXT FOR hh = h TO h + ((l - 1) * 20) STEP 20 LINE (hh, vv)-STEP(20, 20), 0, BF SOUND (hh - h) + 900, .5 NEXT FOR vvv = vv TO 60 STEP -20 FOR hh = h TO h + ((l - 1) * 20) STEP 20 IF POINT(hh + 5, vvv - 15) AND POINT(hh + 5, vvv - 18) = 15 THEN LINE (hh, vvv - 20)-STEP(20, 20), 0, BF boton hh, vvv, 20, 20, 15, 8, 7, 0 SOUND ((hh - h) * 3) + 500, .7 END IF NEXT NEXT vv = vv + 20 puntos = puntos + 1 digital 200, 320, puntos, 3, 10, 8, 0 IF (puntos / 10) = INT(puntos / 10) THEN nivel = nivel + 1 digital 200, 370, nivel, 3, 10, 8, 0 boton 267, 37, 186, 406, 8, 15, 0, 7 IF nivel < 6 THEN retardo = 3000 - (nivel * 500) + 2 END IF END IF NEXT END SUB FUNCTION ocupado (h, v, n) ocu = 0 X = 0 FOR vv = v TO v + 60 STEP 20 FOR hh = h TO h + 60 STEP 20 X = X + 1 IF MID$(forma$(n), X, 1) = "1" THEN ocu = ocu + POINT(hh + 5, vv + 5) END IF NEXT NEXT ocupado = ocu END FUNCTION SUB pieza (h, v, n, c) X = 0 FOR vv = v TO v + 60 STEP 20 FOR hh = h TO h + 60 STEP 20 X = X + 1 IF MID$(forma$(n), X, 1) = "1" THEN IF c = 0 THEN LINE (hh, vv)-STEP(20, 20), c, BF ELSE boton hh, vv, 20, 20, 15, 8, 7, 0 END IF END IF NEXT NEXT END SUB