[RPGXP] Script de combinaciones

Avisos

Like Tree7Gracias
  • 4 Post By PolectronElMagnifico
  • 1 Post By InmortalKaktus
  • 1 Post By Kazeasdf
  • 1 Post By Xabier2012
Respuesta
 
Herramientas Desplegado
  #1  
05/07/2013
Predeterminado Script de combinaciones
Script de patrones de teclas

Vista previa de como queda:

Vídeo





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


Código 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"].99999
     
@overlay3=@sprites["overlay3"].bitmap
     
@sprites["overlay3"].zoom_x=1
     
@sprites["overlay3"].zoom_y=1
     
@sprites["overlay3"].bitmap.clear
     
@baseColor=Color.new(255255255# 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
= []
    
$game_variables[119]
    
$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 #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==# Read
            
break
          
end
        end
        
else
          while 
count #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 == #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
  #2  
05/07/2013
Predeterminado Respuesta: Script de combinaciones
: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!

Región de Shui

  #3  
05/07/2013
Predeterminado Respuesta: Script de combinaciones
Muy buen script, aunque es poco aplicable al fin de cuentas útil gato =3
Gracias si en algún momento lo ocupe ya sé donde está :3
  #4  
05/07/2013
Predeterminado Respuesta: Script de combinaciones
si me funciono , 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

MIRA ASI LO TENGO EL EVENTO


ASI ESTA EL PRIMERO


Y SE SUPONE Q ESTE TIENE Q ACTIVARSE

  #5  
05/07/2013
Predeterminado Respuesta: Script de combinaciones
Dicho por akane159 Ver mensaje
si me funciono , 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
  #6  
05/07/2013
Predeterminado Respuesta: Script de combinaciones
Dicho por Buzzo Ver mensaje
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

ASI ESTA EL EVENTO


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)
  #7  
06/07/2013
Predeterminado Respuesta: Script de combinaciones
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 ^^
  #8  
06/07/2013
Predeterminado Respuesta: Script de combinaciones
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.
Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 14:15.