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
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
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:
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
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
Iniciado por akane159
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
Iniciado por Buzzo
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 ^^