¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [RM Ace] Rompecabezas el Dom Mar 02, 2014 6:01 pm

Reputación del mensaje :100% (2 votos)

Razor

avatar

ROMPECABEZAS
RPG Maker Ace
Un script bastante útil para agregarle personalidad y un poco de dificultad a tu juego. Me recuerda a los rompecabezas del Pokémon Oro/Plata. :’)
Sobre el Script:
Mini juego que consiste en mover bloques hasta concertar la imagen como es debida, un rompecabezas. Puede ser llamado desde cualquier momento en el juego por medio de eventos y la cantidad de bloques en que se dividirá la imagen es configurable.
Imágenes:
Imagen 1
Video:
Instrucciones:
Paso 1: Adiciona el script a tu juego [F11]
Paso 2: Configure el script, he traducido lo esencial.
Paso 3: Para ejecutarlo solo hace falta llamar script por medio de evento y poner: “slide_game(n)” (Donde “n” es el número del juego que modificó en el script)
Código:
Código:
module Lune_Sliding
Game = []
 
#=======================================================
# Sliding Puzzle Game
# Author: Raizen
#=======================================================
# Para llamar el script use el siguiente comando,
# Llamar Script: slide_game(n)
# donde n es el número del puzzle que puede ser configurado abajo.
 
# La velocidad con que se mueven los bloques
Speed = 10
 
# Sonido al mover
Sound_B = 'Wind7'
 
# Sonido en caso de resolucion del puzzle
Victory = 'Decision2'
 
# La cantidad de veces que es barajado, cuanto mas sea, mas demorara en cargar
Shuffle = 200
 
# Cree aqui los juegos que desea, basta seguir el siguiente patron:
# Game[n] = { Donde n es el número de juego.
 
# Todas las imagenes deben ir dentro de Graphics/Sliding
#==============================================================================
# Game 1 => Miku
#==============================================================================
Game[1] = {
'Background' => 'back1', # Imagen de fondo
'Image' => 'Miku', # Imagen de la cual se crearan los bloques
'Xaxis' => 3, # Cantidad de bloques en el eje X
'Yaxis' => 3, # Cantidad de bloques en el eje Y
'Escape?' => false, # Es posible salir en medio del puzzle?
'Switch' => 1, #Interruptor activado despues de completar el puzzle.
'Music' => 'Dungeon6', #música del puzzle
}
 
#==============================================================================
# Game 2 => Misa
#==============================================================================
Game[2] = {
'Background' => 'back1',
'Image' => 'Misa',
'Xaxis' => 4,
'Yaxis' => 5,
'Escape?' => true,
'Switch' => 1,
'Music' => 'Dungeon6',
}
end
 
#==============================================================================
# ** Scene_Panel
#------------------------------------------------------------------------------
#  Esta classe é a classe principal do mini-game.
#==============================================================================
 
class Scene_Panel < Scene_MenuBase
include Lune_Sliding
  #--------------------------------------------------------------------------
  # * Inicialização do processo
  #--------------------------------------------------------------------------
  def start
    @map_bgm = RPG::BGM.last
    @map_bgs = RPG::BGS.last
    RPG::BGS.stop
    @game = Game[$config_panel_game]
    super
    create_game_variables
    create_game_pictures
    shuffle_board
  end
  #--------------------------------------------------------------------------
  # * Criação das variáveis
  #--------------------------------------------------------------------------
  def create_game_variables
    @speed = Speed
    @cursor = 0
    @aux = []
    @move = 0
    @block = []
    @direction = 0
    @count = 10
    @victory = false
  end
  #--------------------------------------------------------------------------
  # * Criação das Imagens
  #--------------------------------------------------------------------------
  def create_game_pictures
    @back = Sprite.new
    @im = Array.new
    RPG::BGM.new(@game['Music']).play
    @back.bitmap = Cache.sliding(@game['Background'])
    @back.x = (Graphics.width - @back.bitmap.width)/2
    @back.x = (Graphics.height - @back.bitmap.height)/2
    @map = Array.new(@game['Xaxis'])
    for n in 0...@game['Xaxis']
      @im[n] = Array.new
      @map[n] = Array.new
    end
    for x in 0...@game['Xaxis']
      for y in 0...@game['Yaxis']
        @im[x][y] = Sprite.new
        @im[x][y].bitmap = Cache.sliding(@game['Image'])
        @im[x][y].x = (Graphics.width - @im[x][y].bitmap.width)/2 + x*@im[x][y].bitmap.width/@game['Xaxis']
        @im[x][y].y = (Graphics.height - @im[x][y].bitmap.height)/2 + y*@im[x][y].bitmap.height/@game['Yaxis']
        @im[x][y].src_rect.set(x*@im[x][y].bitmap.width/@game['Xaxis'], y*@im[x][y].bitmap.height/@game['Yaxis'], @im[x][y].bitmap.width/@game['Xaxis'], @im[x][y].bitmap.height/@game['Yaxis'])       
        @map[x][y] = [@im[x][y].x, @im[x][y].y]
        @im[x][y].bitmap = Cache.sliding('') if (x+1) == @game['Xaxis'] && (y+1) == @game['Yaxis']
        @map[x][y] = (x+1) + y*@game['Xaxis']
      end
    end
    @cursor = @game['Xaxis'] * @game['Yaxis']
  end
  #--------------------------------------------------------------------------
  # * Atualização da classe
  #--------------------------------------------------------------------------
  def update
    super
    if @victory
      return_scene if Input.trigger?(:B)
      return
    end
    return if block_moving?
    if Input.trigger?(:B)
      @game['Escape?'] ? return_scene : Sound.play_buzzer
    end
    move_block(Input.dir4)
  end
  #--------------------------------------------------------------------------
  # * Mover os quadros
  #--------------------------------------------------------------------------
  def block_moving?
    return false if @direction == 0
    x = @block[0]
    y = @block[1]
    case @direction
    when 8
      if @count < @speed
        @im[x][y].y -= (@im[x][y].bitmap.height/@game['Yaxis'])/@speed
      else
        @im[x][y].y -= @correctiony
      end
    when 6
      if @count < @speed
        @im[x][y].x += (@im[x][y].bitmap.width/@game['Xaxis'])/@speed
      else
        @im[x][y].x += @correctionx
      end
    when 4
      if @count < @speed
        @im[x][y].x -= (@im[x][y].bitmap.width/@game['Xaxis'])/@speed
      else
        @im[x][y].x -= @correctionx
      end
    when 2
      if @count < @speed
        @im[x][y].y += (@im[x][y].bitmap.height/@game['Yaxis'])/@speed
      else
        @im[x][y].y += @correctiony
      end
    end
    @count += 1
    if @count == (@speed + 1)
      @direction = 0
      if orded
        $game_switches[@game['Switch']] = true
        @victory = true
        RPG::SE.new(Victory).play
      end
    end
    true
  end
  #--------------------------------------------------------------------------
  # * Mover o bloco
  #--------------------------------------------------------------------------
  def move_block(dir)
  return if dir == 0
  @move = @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']]
  @aux = [(@move-1) % @game['Xaxis'],(@move-1)/@game['Xaxis']]
  @old_cursor = @cursor
  case dir
  when 8
    if @cursor + @game['Xaxis'] <= @game['Xaxis']*@game['Yaxis']
      @cursor += @game['Xaxis']
    else
      return
    end
  when 6
    if (@cursor - 1) % @game['Xaxis'] != 0
      @cursor -= 1
    else
      return
    end
  when 4
    if @cursor % @game['Xaxis'] != 0
      @cursor += 1
    else
      return
    end
  when 2
    if @cursor - @game['Xaxis'] > 0
      @cursor -= @game['Xaxis']
    else
      return
    end
  end
    RPG::SE.new(Sound_B).play
    @move = @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']]
    @block = [(@move-1) % @game['Xaxis'],(@move-1)/@game['Xaxis']]
    @old = @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']]
    @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']] = @map[(@old_cursor-1) % @game['Xaxis']][(@old_cursor-1)/@game['Xaxis']]
    @map[(@old_cursor-1) % @game['Xaxis']][(@old_cursor-1)/@game['Xaxis']] = @old
    @correctionx = @im[0][0].bitmap.width/@game['Xaxis'] % @speed
    @correctiony = @im[0][0].bitmap.height/@game['Yaxis'] % @speed
    @count = 0
    @direction = dir
  end
  #--------------------------------------------------------------------------
  # * Embaralhar o quadro
  #--------------------------------------------------------------------------
  def shuffle_board
    @count = 0
    while @count <= Shuffle
      move_shuffle
      block_shuffle
      @count+= 1
    end
    until @cursor == @game['Xaxis'] * @game['Yaxis']
      move_shuffle
      block_shuffle
    end
    @count = 0
  end
  #--------------------------------------------------------------------------
  # * Embaralhar os quadros
  #--------------------------------------------------------------------------
  def block_shuffle
    return false if @direction == 0
    x = @block[0]
    y = @block[1]
    case @direction
    when 8
      @im[x][y].y -= (@im[x][y].bitmap.height/@game['Yaxis'])
    when 6
      @im[x][y].x += (@im[x][y].bitmap.width/@game['Xaxis'])
    when 4
      @im[x][y].x -= (@im[x][y].bitmap.width/@game['Xaxis'])
    when 2
      @im[x][y].y += (@im[x][y].bitmap.height/@game['Yaxis'])
    end
    @direction = 0
    true
  end
  #--------------------------------------------------------------------------
  # * Embaralhar as variáveis
  #--------------------------------------------------------------------------
  def move_shuffle
  @move = @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']]
  @aux = [(@move-1) % @game['Xaxis'],(@move-1)/@game['Xaxis']]
  @old_cursor = @cursor
  dir = (rand(4)+1)*2
  p dir
  case dir
  when 8
    if @cursor + @game['Xaxis'] <= @game['Xaxis']*@game['Yaxis']
      @cursor += @game['Xaxis']
    else
      return
    end
  when 6
    if (@cursor - 1) % @game['Xaxis'] != 0
      @cursor -= 1
    else
      return
    end
  when 4
    if @cursor % @game['Xaxis'] != 0
      @cursor += 1
    else
      return
    end
  when 2
    if @cursor - @game['Xaxis'] > 0
      @cursor -= @game['Xaxis']
    else
      return
    end
  end
    @move = @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']]
    @block = [(@move-1) % @game['Xaxis'],(@move-1)/@game['Xaxis']]
    @old = @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']]
    @map[(@cursor-1) % @game['Xaxis']][(@cursor-1)/@game['Xaxis']] = @map[(@old_cursor-1) % @game['Xaxis']][(@old_cursor-1)/@game['Xaxis']]
    @map[(@old_cursor-1) % @game['Xaxis']][(@old_cursor-1)/@game['Xaxis']] = @old
    @direction = dir
  end
  #--------------------------------------------------------------------------
  # * Verificação de vitória
  #--------------------------------------------------------------------------
  def orded
    for x in 0...@game['Xaxis']
      for y in 0...@game['Yaxis']
        return false unless @map[x][y] == (y*@game['Xaxis']+x+1)
      end
    end
    true
  end
  #--------------------------------------------------------------------------
  # * Retornar para cena anterior
  #--------------------------------------------------------------------------
  def return_scene
    super
    Sound.play_cancel
    @map_bgm.replay
    @map_bgs.replay
    for x in 0...@game['Xaxis']
      for y in 0...@game['Yaxis']
        @im[x][y].bitmap.dispose
        @im[x][y].dispose
        @back.dispose
      end
    end
  end
end
 
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  Um interpretador para executar os comandos de evento. Esta classe é usada
# internamente pelas classes Game_Map, Game_Troop e Game_Event.
#==============================================================================
 
class Game_Interpreter
  #--------------------------------------------------------------------------
  # * Inicialização do objeto
  #    depth : profundidade
  #--------------------------------------------------------------------------
  def slide_game(index)
    $config_panel_game = index
    SceneManager.call(Scene_Panel)
  end
end
 
#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
#  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
# Para acelerar o carregamento e preservar memória, este módulo matém o
# objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
# pré-existentes quando mesmo Bitmap é requerido novamente.
#==============================================================================
 
 
module Cache
  #--------------------------------------------------------------------------
  # * Carregamento dos gráficos de batalha (piso)
  #    filename : nome do arquivo
  #    hue      : informações da alteração de tonalidade
  #--------------------------------------------------------------------------
  def self.sliding(filename)
    load_bitmap("Graphics/Sliding/", filename)
  end
end
Créditos:
Raizen





Todos mis aportes por Mediafire tienen contraseña, esa es: www.universomaker.net
Esto es para evitar plagio, asegúrense de copiar y pegar la contraseña.

#2 Re: [RM Ace] Rompecabezas el Dom Mar 02, 2014 6:51 pm

~thekiller

avatar
En lo personal nunca me gustaron los rompecabezas como mini juegos, o algo así, pero estos pueden tener buena utilidad fuera de ser un simple rompe cabezas, solo hay que ser creativos y utilizar las imagenes correctas. O al menos que sean imagenes relacionadas al juego...

#3 Re: [RM Ace] Rompecabezas el Lun Jun 23, 2014 10:53 pm

Bleur

avatar
Oye... puse el rompecabezas como alli pone y si funciono Rolling Eyes 
pero a la hora de añadir mas rompecabezas me salia con que habia un error Crying or Very sad 
en una parte del script y francamente no le entiendo nada scratch 

#4 Re: [RM Ace] Rompecabezas el Mar Jun 24, 2014 1:12 pm

Tomate

avatar
Me parece algo divertido y entretenido  cheers 

Bleur ¿Pusiste las imágenes en la carpeta "Graphics/Sliding"? O a lo mejor las imágenes deben tener el mismo tamaño de las imágenes de muestra.
También puede ser alguna línea del script donde olvidaste configurar el número del rompecabezas o con el código de llamar script “slide_game(n)”.  Ópalo Sonriente

#5 Re: [RM Ace] Rompecabezas el Sáb Jun 28, 2014 10:48 pm

Bleur

avatar
 :o  No, todo esta bien pero me sale con un error
con el script principal  Crying or Very sad y... me da meyo editarlo  affraid 

#6 Re: [RM Ace] Rompecabezas el Sáb Jun 28, 2014 11:12 pm

Tomate

avatar
Lamentablemente no tengo idea sobre los scripts...no podré ayudarte a resolver este inconveniente  Ópalo Triste .

Me queda una última idea, a lo mejor lo estás probando en tu proyecto el cual tiene varios scripts instalados y eso causa cierta incompatibilidad. Prueba ver si anda perfecto en un proyecto sin scripts...y si no funciona, no sabré decirte que más hacer.  scratch

#7 Re: [RM Ace] Rompecabezas el Miér Ago 20, 2014 1:48 am

Bleur

avatar
Ya me fije y.... Rolling Eyes 
habia un espacio ( ) entre lineas y daba error Shocked 
¡DIOS, SOY UN IDIOTA! cow 
Perdonen las molestias cheers 

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.