Author Id: 25870 Author Name: Polectron Post Content: Script de patrones de teclas Vista previa de como queda: [spoiler='Vídeo'] [URL=http://www.youtube.com/watch?v=MIdmzMOQUl8]YouTube Video[/URL] [/spoiler] Como estos días de comienzo de verano me aburría mucho y no tenía nada que hacer decidí continuar un poco con mi RPG y crear un script que tenía ya bastantes ganas de hacer. El script consiste en que el jugador introduzca un patrón o código usando las flechas de dirección y que se compruebe si el código introducido coincide con el código correcto. Este script puede tener varías aplicaciones ^^, en mi caso se usa como contraseña para desactivar diferentes “sistemas de seguridad”, con un par de modificaciones se podría usar incluso a modo de ocarina del tiempo *O* Tras la descripción pasemos a ver el código: AVISO SUPER IMPORTANTE: COMPROBAD QUE LAS VARIABLES 119 Y 120 ESTÁN VACÍAS EN TU JUEGO [spoiler] class Flute def pbStartScene @sprites={} @viewport=Viewport.new(0,0,Graphics.width,Graphics.height) @viewport.z=99999 @sprites["menubg"]=Sprite.new(@viewport) @sprites["menubg"].bitmap=RPG::Cache.picture("flute") @sprites["menubg"].x=0 @sprites["menubg"].z=0 pbInitRafaTextSystem textos3=[] #textos3.push([_INTL("asdf"),300,10,false,@baseColor,@shadowColor]) #textos3.push([_INTL("TEXTO"),X,Y,false,baseColor,shadowColor]) pbDrawTextPositions(@overlay3,textos3) # LO IMPRIME EN PANTALLA pbSEPlay("menu") end def pbInitRafaTextSystem # INICIA EL SISTEMA DE TEXTOS @sprites["overlay3"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport) @sprites["overlay3"].z = 99999 @overlay3=@sprites["overlay3"].bitmap @sprites["overlay3"].zoom_x=1 @sprites["overlay3"].zoom_y=1 @sprites["overlay3"].bitmap.clear @baseColor=Color.new(255, 255, 255) # COLOR DE FONT @shadowColor=Color.new(0,0,0) # COLOR DE SOMBRA pbSetSystemFont(@sprites["overlay3"].bitmap) end def pbEndScene # CUANDO TERMINA... pbDisposeSpriteHash(@sprites) @viewport.dispose if @viewport end def pbUpdate @xcount=0 @posible1=0 @posible2=0 @posible3=0 total = 0 count = 0 correct = 0 play= [] n = $game_variables[119] i = $game_variables[120] #'dígitos'/respuestas posibles: UP, DOWN, LEFT, RIGHT song= [["UP","UP","UP","UP","UP","UP"],["DOWN","DOWN","DOWN","DOWN","DOWN","DOWN"]] #lista de combinaciones loop do Graphics.update Input.update #FUNCIONES AQUÍ# if total < 6 #cantidad de 'dígitos' por combinación, con un par de cambios se podría hacer que cada combinación tuviese una longitud diferente if Input.trigger?(Input::UP)#lo que pasa si pulsamos UP play[total] = 'UP' total += 1 @sprites[total]=Sprite.new(@viewport) @sprites[total].bitmap=RPG::Cache.picture("key_UP") @sprites[total].x=60*total @sprites[total].y=180 @sprites[total].z=1 end if Input.trigger?(Input::DOWN)#lo que pasa si pulsamos DOWN play[total] = 'DOWN' total += 1 @sprites[total]=Sprite.new(@viewport) @sprites[total].bitmap=RPG::Cache.picture("key_DOWN") @sprites[total].x=60*total @sprites[total].y=180 @sprites[total].z=1 end if Input.trigger?(Input::LEFT)#lo que pasa si pulsamos LEFT play[total] = 'LEFT' total += 1 @sprites[total]=Sprite.new(@viewport) @sprites[total].bitmap=RPG::Cache.picture("key_LEFT") @sprites[total].x=60*total @sprites[total].y=180 @sprites[total].z=1 end if Input.trigger?(Input::RIGHT)#lo que pasa si pulsamos RIGHT play[total] = 'RIGHT' total += 1 @sprites[total]=Sprite.new(@viewport) @sprites[total].bitmap=RPG::Cache.picture("key_RIGHT") @sprites[total].x=60*total @sprites[total].y=180 @sprites[total].z=1 end if Input.trigger?(Input::B)#si pulsamos la X nos pregunta si queremos salir command=Kernel.pbMessage(_INTL("¿Quieres salir?"),[ _INTL("Sí") ],-1) if command==0 # Read break end end else while count < 6 #se recorre la lista de 'dígitos' en la respuesta y el patrón para comprobar que es correcto if play[count] == song[n][count] correct += 1 end count += 1 end if correct == 6 #cuando acaba el búcle, si el número de aciertos(correct) es igual al número de 'dígitos' la respuesta es correcta Kernel.pbMessage(_INTL("Patrón correcto ^^")) $game_switches = true break else #sino la respuesta es incorrecta Kernel.pbMessage(_INTL("Patrón incorrecto D:")) break end end end end ################ end #CIERRA LA CLASE class FluteScene def initialize(scene) @scene=scene end def pbStartScreen @scene.pbStartScene @scene.pbUpdate @scene.pbEndScene end end def pbCallFlute(n,i) #se llama al script, 'n' e 'i' son valores numéricos $game_variables[119] = n $game_variables[120] = i scene=Flute.new screen=FluteScene.new(scene) screen.pbStartScreen end [/spoiler] Bien, ahora que tenemos el código, que hay que meterlo en la ventana de scripts encima de main con el nombre que queráis, vamos a pasar al engine que hace falta para que el código funcione ^^ Lo primero de todo es crear un evento que se inicie al pulsar aceptar, en el llamamos al script ‘pbCallFlute(n,i)’. Luego llamaremos a otro evento pero eso lo explicaremos más adelante ^^ Esta parte es importante, ‘n’ e ‘i’ son valores numéricos que tendremos que reemplazar según estas indicaciones: Primero expliquemos la ‘n’ Si volvéis a mirar el script veréis que hay una parte en la que se puede ver lo siguiente: [QUOTE]song= [["UP","UP","UP","UP","UP","UP"],["DOWN","DOWN","DOWN","DOWN","DOWN","DOWN"]][/QUOTE] Esto es un ‘array’, una lista con las combinaciones que vamos a usar, vienen dos de forma predeterminada, cortesía del autor ;D #EXPLICACIÓN SOBRE ARRAYS# Esta lista funciona de la siguiente forma, vacía sería algo como esto: song= [] ahora para meterle una nueva combinación, siempre de 6 caracteres a no ser que modifiquéis el código, haríamos lo siguiente haríamos una lista como esta: [“X”,”X”,”X”,”X”,”X”,”X”] Esa lista la meteríamos dentro de song, quedando algo así: song = [[“X”,”X”,”X”,”X”,”X”,”X”]] y ahora reemplazamos las X por los valores que queramos de entre: UP, DOWN, LEFT, RIGHT -> !Siempre en mayúsculas! Si quisiéramos añadir otra combinación más crearíamos otra lista de 6 ‘dígitos’ y la separaríamos con una coma de la anterior, quedando algo así: song = [[“X”,”X”,”X”,”X”,”X”,”X”],[“Y”,”Y”,”Y”,”Y”,”Y”,”Y”]] #FIN DE EXPLICACIÓN SOBRE ARRAYS# Bien, ahora que todo el mundo entendió lo que es un array vamos a seguir explicando con que hay que reemplazar esa ‘n’. A las listas de un array se las llama mediante índices la ‘n’ será el índice de la lista que queremos usar, SE EMPIEZA A CONTAR DESDE 0 así que la primera combinación tendrá el índice 0 y la siguiente el 1 y así progresivamente ^^ Así que si queremos usar la primera combinación escribiremos: pbCallFlute(0,i) Ahora nos queda por explicar que es esa ‘i’ ^^ Recordemos que antes creamos un proceso evento que se iniciaba al pulsar aceptar y ejecutaba este script, pues ahora toca activar un interruptor para que suceda algo al acertar con la combinación ^^ Así que crearemos un nuevo evento, el tipo que sea lo dejo ya a vuestra elección ^^, podéis hacer que sea un evento de proceso paralelo que haga desaparecer cierto objeto que antes estorbaba en el camino. Lo importante es que el evento solo se ejecute cuando un interruptor nuevo esté activo. Así que coged un nuevo interruptor ponedle el nombre que queráis y quedaros con su número. Ahora volved al evento que llama al script y donde tenias: pbCallFlute(0,i) Reemplaza la ‘i’ por el número del interruptor, en mi caso el 233 y acepta. Ahora te quedará algo así: pbCallFlute(0,233) Ahora guárdalo todo y comprueba que el sistema funcione, si no va probablemente hayas hecho mal los eventos o te hayas confundido al reemplazar la ‘n’ o la ‘i’ o incluso puede que hayas hecho mal la lista de caracteres. Ah, también adjunto las imágenes que debéis incluir en vuestra carpeta pictures, no les cambiéis el nombre o se jode XD Enlace -> [URL="hakome.com/download.php?f=v6ImuHW2L74BEb27HvEc"]hakome.com/download.php?f=v6ImuHW2L74BEb27HvEc[/URL] Eso es todo cualquier duda no dudéis, valga la redundancia, en preguntádmela :3