Registrarse

[RPGXP] Script de combinaciones

Script de patrones de teclas

Vista previa de como queda:

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

PHP:
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[i] = 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

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:

song= [["UP","UP","UP","UP","UP","UP"],["DOWN","DOWN","DOWN","DOWN","DOWN","DOWN"]]
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 -> hakome.com/download.php?f=v6ImuHW2L74BEb27HvEc

Eso es todo cualquier duda no dudéis, valga la redundancia, en preguntádmela :3
 

Kaktus

Miembro insignia
Miembro insignia
:O gran tutorial tio, que bien que haya gente trabajando, a diferencia de en GENERAL toda wah, muhcísimas grácias, a lo mejor lo uso en mi proyecto.

Att ¡Neón Kaktus!
 
si me funciono :D, ahora tengo un problema , esq no se como hacer para q despues de q acierte la secuencia ocurra algo :s hic lo q digiste pero no pasa nada, solo sale el mensag de q "combinacion correcta ^^" y luego no pasa nada :S

ASI ESTA EL PRIMERO


Y SE SUPONE Q ESTE TIENE Q ACTIVARSE
 
si me funciono :D, ahora tengo un problema , esq no se como hacer para q despues de q acierte la secuencia ocurra algo :s hic lo q dijiste pero no pasa nada, solo sale el mensag de q "combinacion correcta ^^" y luego no pasa nada :S
Me alegro de que hayas seguido las indicaciones y te haya funcionado ^^, temía que no se me entendiese.

¿Hiciste un evento que se active cuando el interruptor que indicaste se activase?
Si no es así es normal que no pasase nada XD
También comprueba que pusiste bien el numero del interruptor
 
Me alegro de que hayas seguido las indicaciones y te haya funcionado ^^, temía que no se me entendiese.

¿Hiciste un evento que se active cuando el interruptor que indicaste se activase?
Si no es así es normal que no pasase nada XD
También comprueba que pusiste bien el numero del interruptor

si mira asi lo tengo

Este es el evento 1


Y este es el q se debe activar


(el ultimo dice lo intente en pulsar aceptar, inicio aturomatico, proceso paralelo, y nada :S)
 
Primero de todo decir que el problema de akane159 ya está solucionado ^^
También actualicé el post principal poniendo un video en el que se demuestra el funcionamiento del script ^^
 

Xabier2012

Usuario mítico
Muy bien! Gran aporte!
Los has explicado todo bien, y la verdad es que el script es muy útil y fácil de usar.

Yo tengo uno parecido, que es también de darle con las flechas...Después si me da tiempo subo un video para enseñaros.

pd: Esto me está animando a mí a hacer también tutoriales.
 
Arriba