Está en la página 1de 48

Juego tipo “Laberinto”

Un Inicio Simple
Nosotros crearemos un juego en el cual el jugador simplemente avance para encontrar la salida.
Para realizar esto necesitamos tres ingredientes importantes: el jugador, la pared y la salida.
Nosotros necesitaremos un sprite y un objeto para cada uno de ellos. TODOS LOS RECURSOS SE
ENCUENTRAN EN LA CARPETA RESOURCES DENTRO DE LA CARPETA MAZE

Los objetos
Crearemos los tres sprites de la forma que ya sabemos y los llamaremos spr_wall , spr_goal y
spr_person, los archivos de imágenes son wall, goal y person

Ahora crearemos los tres objetos. Primero realizaremos el objeto wall, utilizaremos el sprite
spr_wall como imagen y llamaremos al objeto obj_wall, no debemos olvidar marcar la caja de
chequeo de Solid para indicar que el objeto será sólido. Esto hará imposible que otros objetos, en
particular la persona, penetre la pared.

4
Una vez ya definido el objeto obj_wall, vamos a construir el objeto meta, lo llamaremos obj_goal.
Este objeto es el que debe alcanzar el jugador. Este no es un objeto sólido. Decidimos emplear una
bandera de meta spr_goal para dejarle claro al jugador que es a ese lugar donde debe de dirigirse.
Cuando una persona colisiona con él debemos enviarlo al siguiente room (en este momento no
existe el objeto obj_person, es necesario que lo crees, asigna solo el nombre obj_person y su
imagen spr_person). Pero como nosotros estamos iniciando y en esta primera fase sólo tenemos
un room debemos contemplar que si hay otro room If next room exists, esta acción se encuentra
en la pestaña main1 se diriga al nuevo room Go to next room, acción dentro de la pestaña main1
y en caso contrario que el juego termine Restart the game. El objeto queda definido como:

5
Finalmente necesitamos crear el objeto persona que será controlado por el jugador, lo llamaremos
obj_person y la imagen que vamos a asociar es spr_person. En este objeto debemos contemplar
que pasa si colisiona con la pared y todo el manejo del objeto empleando las teclas de flecha de
movimiento. Mover el objeto persona a través del room se puede realizar de diferentes formas, la
forma más sencilla es mover una celda a la vez en la dirección de la flecha presionada. Una
segunda forma, que será la que vamos a utilizar , es mover el objeto en la dirección de la flecha
presionada mientras la flecha esté presionada.

Nosotros necesitaremos acciones para las flechas de movimiento. Estas acciones son simples ya
que marcan la dirección de movimiento, hay que usar una velocidad (Speed) de 4. Para parar
cuando el jugador deje de oprimir la tecla de movimiento usaremos el evento de teclado <no key>
aquí pararemos el movimiento.

Nosotros queremos mantener al objeto persona obj_person alineado con las celdas que
conforman la cuadrícula del laberinto. Para realizar esto utilizamos la acción Check Grid que se
encuentra en la pestaña control, nosotros utilizaremos como parámetros 32 porque es el tamaño
de nuestra cuadrícula en el laberinto. Si el objeto colisiona con la pared debemos parar el
movimiento.

6
Para la flecha izquierda (Left)

7
Realiza lo mismo para las otras teclas de movimiento, sólo marca la dirección de movimiento
correcto en la acción Move Fixed.

Construyendo el Room
Crea dos rooms que luzcan similar a un laberinto, en la pestaña de Settings especificar Width 480
Height 480. En cada room coloca el objeto meta obj_goal en el lugar de término del laberinto y el
objeto persona obj_person en el lugar de arranque. Ejem.

GRABA tu juego como Laberinto_1. Tu primera versión del juego ya está terminada, Juega
cambiando la velocidad de la persona, crea más niveles, cambia las imágenes, etc..

8
Versión 2. Juego tipo “Laberinto”

Retoma el archivo Laberinto_1 y genera un nuevo archivo con el nombre Laberinto_2, para hacer
esto emplea la opción Save As…

Recolectando Diamantes
La meta de nuestro juego es coleccionar diamantes. Los diamantes no representan problema.
¿Pero cómo asegurarse que el jugador no salga del room cuando no ha recolectado todos los
diamantes? Para este fin nosotros añadimos un objeto puerta. El objeto puerta, dará la imagen de
formar parte de la pared y será visible mientras existan diamantes en el room en el momento en
que el jugador recolecte todos los diamantes desaparecerá.

Vamos a añadir algunos sonidos que permitirán que nuestro juego sea más atractivo, los sonidos
que requerimos son:
Archivo Proporciona el nombre de:

Diamond sound_diamond
Door sound_door
Goal sound_goal
Background sound_background

Hay que añadir dos sprites más con sus respectivos objetos: el diamante (diamond) y la puerta
(door).

Ahora hay que construir sus respectivos objetos, el diamante es un objeto en extremo sencillo. La
única acción que necesita es que se destruya cuando el jugador colisiona con él. Por lo tanto en el
evento de la colisión colocamos una acción para borrarlo. Y en el evento Destroy incrementamos
el score en 5 y ejecutamos el sonido del diamante sound_diamond.

9
10
La definición del objeto puerta obj_door es crucial para asegurarnos de que todos los diamantes
sean recolectados, debe bloquear la salida (llegar a la meta), recuerde que la puerta debe ser
sólida para que no se pueda atravesar. En el evento Step nosotros debemos checar que el número
de diamantes sea igual a 0, si es así, ejecutamos un sonido (abrir la puerta, sound_door) y
destruimos la instancia.

Hacerlo un poco más agradable

Ya están colocadas las piezas clave, es momento de preocuparnos un poco por el aspecto

Las paredes no lucen muy bien. Por lo tanto requerimos tres objetos más, uno para la esquina, uno
para las paredes laterales y uno para las paredes horizontales. Construye los respectivos sprites
(archivos wall_corner, wall_horizontal, wall_vertical) y no olvides especificar en los objetos que
son sólidos. Con la aplicación de estas imágenes podemos hacer que los rooms luzcan un poco
mejor y si damos una imagen de background con seguridad mejoraremos sustancialmente el
aspecto.

11
Debemos especificar la colisión de la persona obj_person con las paredes, hay una técnica muy
sencilla en Game Maker, al definir los objetos especificamos en Parent un objeto base en nuestro
caso el objeto esquina y ya en automático los objetos tendrán el mismo comportamiento,
nosotros lo haremos en las paredes vertical y horizontal. En el objeto obj_person añadir la colisión
con el objeto obj_wall_corner, recuerda que la acción es Move Fixed no movimiento, Speed de 8.

Score

Debemos permitir que el jugador visualice su progreso. Por cada diamante destruido le daremos 5
puntos. Por lo tanto en el evento Destroy del diamante nosotros añadiremos 5 puntos al score.
Finalmente al terminar el nivel le daremos 40 puntos al score, esto hay que hacerlo en el evento
de colisión de la meta con la persona.

Cuando el jugador alcanza el último room se mostrará la tabla de los altos scores. Para lograr esto
requerimos realizar cambios al objeto obj_goal, los cuales se muestran a continuación:

12
Crearemos ahora un objeto que no requiere sprite al cual llamaremos controller_main, este
objeto lo colocaremos en todos los rooms. Este objeto manejará todos los controles globales, por
el momento sólo desplegamos el score. En el evento Draw nosotros estableceremos, la letra y el
color y la acción para dibujar el score. Hay que crear una font, dar click en el menú de la izquierda
a la sección Font- Create Font, establecer el tipo y tamaño de la letra, llamar al font score_font.

13
Pantalla de Inicio

Es agradable iniciar con una pantalla que muestre el nombre del juego. Para esto nosotros usamos
un primer room. Nosotros creamos un background con una imagen bonita, puedes utilizar el
archivo start, especifica su nombre como back_start. Este background lo utilizaremos para el
primer room). Un objeto controlador de inicio (invisible) es creado, éste simplemente espera hasta
que el usuario presione una tecla y te mueve al siguiente room. (El objeto controlador
controller_start también establece a 0 el score, ejecuta una música de fondo sound_background y
se asegura que el score no se muestre en el caption). Este objeto controller_start sólo se utiliza en
el room de arranque. En el menú de la izquierda, mover este room al inicio en la sección de
rooms. Ya que se inician a ejecutar en el orden en que están.

14
Creando rooms

Ahora nosotros creamos algunos rooms con diamantes. Los rooms que ya tenemos (sin
diamantes) lo podemos dejar, ya que introducen al jugador al sentido de movimiento buscando la
bandera de salida, después utiliza un room con diamantes. Sé creativo diseña un room
interesante. Un ejemplo:

GRABA tu juego, es tiempo de probarlo !! Hemos terminado la versión 2 de nuestro juego


Laberinto_2.

15
Versión 3. Juego tipo “Laberinto”
Retoma el archivo Laberinto_2 y genera un nuevo archivo con el nombre Laberinto_3, para hacer
esto emplea la opción Save As…

Monstruos y otras cosas


Nosotros necesitamos añadir algo de acción y lo haremos añadiendo monstruos, bombas y blocks
movibles.

Monstruos

Nosotros crearemos tres diferentes monstruos: uno que se mueva a la izquierda o a la a derecha,
uno que se mueva arriba o abajo y uno que se mueva en las cuatro direcciones. Añadir un
monstruo es fácil. El objeto inicia a moverse y cambia de dirección cuando choca con una pared.
Cuando la persona choca con un monstruo, muere, es decir el nivel se reinicializa y el jugador
pierde una vida. Nosotros le daremos tres vidas a la persona cuando arranque el juego.

Primero crearemos el monstruo que se mueve de izquierda a derecha. Nosotros usaremos un


sprite para esto y su respectivo objeto. El archivo es monster1 .

16
Objeto monster_lr

17
El segundo monstruo es exactamente igual pero su movimiento es arriba o abajo, cuando choque
con la pared, nosotros le damos una dirección vertical de reversa. El archivo de la imagen es
monster2, no olvides crear el sprite y su objeto, para el objeto puedes duplicar el objeto
monster_lr y cambiar lo necesario, el sprite se debe llamar sprite_monster2 y el objeto
monster_ud.

18
El tercer monstruo es ligeramente más complicado. Crea el sprite, debe ser el archivo monster3,
al objeto proporciónale el nombre de monster_all. El inicia a moverse en dirección horizontal o en
vertical. Cuando choca con la pared debe checar si puede moverse a la izquierda o a la derecha. Si
ambas fallan toma la dirección reversa.

Para evitar problemas con monstruos que son muy pequeños, nosotros desmarcamos la caja de
chequeo precise collision y modificamos la máscara donde establecemos en bounding box full
image.

19
Dar de alta el sonido dead, y nómbralo sound_dead.

Cuando la persona colisiona con un monstruo, nosotros tenemos que hacer algo de ruido, esperar
un poco, decrementar el número de vidas en uno y reinicializar el room. (NOTA. El orden es
crucial. Una vez que reinicializamos el room, ya no se ejecutan las acciones que se encuentren
después).

Realiza lo mismo para cada uno de los monstruos, monster_ud, monster_all.

En el objeto controlador controller_main en el evento No more lives debemos mostrar la lista de


los altos scores y reinicializar el juego.

20
Vidas

Da de alta la imagen person como un sprite sprites_lives.


Nosotros usamos el mecanismo de vidas de Game Maker para proporcionarle al jugador tres vidas.
Hay que mostrar las vidas de una forma agradable a la vista. El objeto controlador puede hacer
esto de la misma forma que con el score. Es recomendable usar pequeñas imágenes para mostrar
las vidas. La acción para esto se encuentra en la pestaña score. Así que modifica este evento en el
objeto controller_main. Añadir al objeto controller_start el arranque con tres vidas Set lives to 3.

21
Bombas

Vamos a añadir bombas y triggers (disparadores). La idea es que cuando el jugador tenga un
trigger, todas las bombas exploten, destruyendo cada cosa en su vecindario. Esto puede ser usado
para crear hoyos en las paredes y para destruir a los monstruos. Nosotros necesitamos tres
objetos nuevos: un trigger, una bomba y una explosión. Para cada uno necesitamos un sprite
adecuado, utiliza los archivos bomb, trigger y explosión_strip16.

La bomba es extremadamente sencilla. El objeto bomba obj_bomb, no lleva eventos, ni acciones

22
El objeto explosión sólo muestra la animación. Después de la animación se destruye. (Tú tienes
que ser cuidadoso de que el Origin de la explosión esté en el lugar correcto). El objeto también
destruye cualquier cosa que toque. Esto requiere un poco de trabajo. Nosotros usaremos acciones
para destruir todas las instancias que se encuentren cerca de la posición antigua de la explosión.
Finalmente nosotros colocamos la explosión en el lugar original.

23
24
Dar de alta el sonido de la explosión, el archivo se llama explode y proporciónele el nombre
sound_explode. El trigger también es sencillo. El objeto se debe llamar obj_trigger, en el evento
colision con la persona, nosotros ejecutaremos el sonido de la explosión, cambiaremos la
instancia de la bomba por la explosión y finalmente destruiremos la instancia.

Bloques y hoyos

Vamos a crear algo que nos permita complicar más el rompecabezas. Nosotros creamos bloques
que puedan ser empujados por el jugador. Nosotros también haremos hoyos para que el jugador
no pueda cruzar pero él puede obstruir con bloques y crear nuevos pasajes. Esto nos da muchas
posibilidades. Los bloques pueden ser empujados en un modo particular para crear pasajes. Y el
jugador puede atrapar a los monstruos usando bloques.

Hay que crear el sprite y el objeto del bloque. También hay que dar de alta el sonido push, darle el
nombre sound_push. El bloque es un objeto sólido. El problema principal es que tiene que seguir

25
el movimiento de la persona cuando lo empuje. Cuando colisiona con la persona nosotros
tenemos que seguir las siguientes acciones.

26
Y en el objeto de la persona obj_person, añadir un evento de colisión con el block donde la acción
sea comment que se encuentra dentro de la pestaña control.
Para el objeto hoyo necesitamos un sonido apropiado hole, coloca como nombre sound_hole,
crea el sprite, utiliza el archivo hole, el nombre sugerido para el sprite es sprite_hole

Las acciones para este objeto son:

Con los bloques y los hoyos podemos crear muy diferentes rooms. Sin embargo podemos
encontrarnos atrapados en el room, por lo cual creamos un camino para reinicializar el room
sacrificando una vida, esto lo haremos al oprimir la letra R. Por lo cual se requiere ir al objeto
controller_main y añadir el evento de teclado de la tecla R

27
28
Construye nuevos rooms donde incluyas los diferentes monstruos, bombas, hoyos y triggers.
Estos son algunos ejemplo de romos, sin embargo USA TU CREATIVIDAD, para CREAR NUEVOS
DISEÑOS:

GRABA tu trabajo la versión 3 de nuestro Laberinto está completa, tenemos nuestro juego
Laberinto_3.

29
Versión4. Juego tipo “Laberinto”
Retoma el archivo Laberinto_3 y genera un nuevo archivo con el nombre Laberinto_4, para hacer
esto emplea la opción Save As…

Mejorar gráficos
Cambiar la imagen de la persona, para hacer que la persona se vea que avanza en la dirección
seleccionada. Lo más fácil que podemos hacer es seleccionar una imagen conformada por cuatro
subimágenes, una para cada dirección, el nombre del archivo es person_nice_strip4., también
actualice el sprite de las vidas spr_lives, para que luzca la misma imagen.

Al tener una subimagen para cada dirección, necesitamos controlarlas para que la imagen coincida
con la flecha de movimiento que se seleccione. Este sprite en particular sus subimágenes son:

0 Abajo

1 Arriba

2 Derecha

3 Izquierda

Por lo tanto requerimos realizar algunos cambios en el objeto de la persona obj_person, hay que
añadir un evento Create y dentro de él la acción Change Sprite (esta acción se encuentra en la
pestaña Main1 del menú de la derecha) aquí hay que especificar la subimagen con la que nos
conviene que arranque, en todos los casos colocar la velocidad en 0, después hay que añadir esta
acción en cada uno de las teclas de flechas.

30
Aquí se muestra las modificaciones para la tecla de flecha Left (Izquierda), realizar lo necesario
para las otras teclas de movimiento (Up, Right y Down)

Lo mismo sucede con los monstruos, los archivos que utilizaremos son: monster1_nice_strip4,
monster2_nice_strip4, monster3_nice_strip4 , para cada uno hay que añadir el evento Step-End
Step y ahí las acciones que vamos a colocar es para evaluar la dirección que tiene el monstruo para
poder seleccionar la subimagen adecuada.

Iniciamos con el objeto monster_lr, observar los ajustes que se requieren realizar:

31
Para el objeto monster_ud

32
Para el objeto monster_all, añadir el evento Step y el Step-End Step

33
Bonos
Vamos a añadir dos tipos de bonos: uno que permita ganar 100 puntos y otro que le dé una vida
extra. Ambos son extremadamente simples. Cuando colisionan con la persona ejecutan un sonido,
se destruyen a sí mismos y dan puntos o una vida más esto es todo.

Genera dos nuevos sprites:

Sprite Archivo Imagen


spr_bonus bonus_strip17
spr_heart live_strip5
Y sus respectivos objetos obj_bonus y obj_heart, añadir el sonido life darle como nombre
snd_life, lo utilizaremos cuando ganemos una vida, cuando ganemos puntos ejecutaremos el
sonido snd_diamond

34
Calles de un solo sentido
Para crear niveles más complicados, añadiremos calles de un solo sentido. Necesitamos cuatro
sprites con las imágenes de las flechas

Sprite Archivo Imagen


spr_up up
spr_down down
spr_left left
spr_right right
Ahora añadiremos sus respectivos objetos: obj_move_up, obj_move_down, obj_move_left,
obj_move_right, el objeto no lleva ninguna especificación sólo la asociación con la imagen, las
acciones las realizaremos en el objeto persona obj_person.

Ejemplo del objeto obj_move_up, y así quedan los otros objetos (obj_move_down,
obj_move_left, obj_move_right)

En el objeto obj_person, añadir el evento Step y dentro de él, las acciones que realizaremos son:
checar que la persona esté alineada con el grid en la forma correcta y que se mueva en la dirección
correcta la velocidad que utilizaremos es de 8.

35
36
Monstruos asustados
Para crear niveles similares al Pacman, necesitamos una variable llamada afraid. Nosotros lo
haremos en el objeto monster_all. Primero hay que dar de alta un sprite para el anillo y otro para
el monstruo asustado (traslúcido) llamarlo como spr_ring y spr_monster3_afraid. También dar de
alta el sonido monster proporcionarle el nombre snd_monster. Ya con esto listo damos de alta el
objeto del anillo, le daremos como nombre obj_ring y lo asociamos con la imagen correspondiente
spr_ring, creamos un evento de colisión con la persona y las acciones dentro de él son : Ejecutar el
sonido de diamante, destruir la instancia, cambiar el sprite de los objetos monster_all por el sprite
spr_monster_afraid, Establecer la variable afraid para todos los objetos monster_all a true,
establecer una alarma a 300 pasos e incrementar el score en 20 puntos. Cuando el monstruo esté
traslúcido lo podremos colisionar y nos ganaremos puntos.

37
Ahora selecciona el objeto monster_all y hay que añadir dos acciones al evento Create y crear el
evento Alarm0. En el evento Create estableceremos la variable afraid a 0 (false) y estableceremos
una variable para la velocidad de la imagen image_speed a 0. En el evento Alarm0
Estableceremos la variable afraid a false y cambiaremos el sprite.

38
Las acciones para el evento Alarm 0 son:

Y por último en el objeto persona obj_person, hay que modificar el evento de colisión con el
monster_all

39
40
Aspectos Finales
Es muy importante al diseñar juegos por niveles, que inicien de los niveles más fáciles a los más
difíciles, Al inicio incluir pocos objetos y conforme avanza ir incrementando la dificultad. Piensa en
el público al que va dirigido es muy diferente diseñar un juego para niños que para adultos.

Un juego necesita documentación. En Game Maker podemos añadir documentación usando el


Game information, ejemplo de texto:

Los jugadores probablemente no lo puedan jugar todo en un momento dado por lo cual
necesitamos un mecanismo para cargar y guardar el avance del juego actual. Afortunadamente
esto es fácil en Game Maker, ya que cuenta con un mecanismo interconstruido para ello F5 graba
el juego actual, mientras que F6 carga el último juego guardado. No olvides mencionar esto en tu
documentación.

Recuerda que es importante crear romos diversos, utiliza tu creatividad yo te propongo 20 rooms,
pero eso no implica que tú los tengas que copiar, utiliza tu CREATIVIDAD y CREA diversos romos,
donde tu INGENIO se pueda ver.

41
42
43
44
45
46
47
48
49
50
51

También podría gustarte