PICO-8 es una consola virtual dishttps://amzn.to/4dSlvwheñada para la creación de videojuegos retro con gráficos de 8 bits y un estilo simplificado. Es muy popular entre los entusiastas de los videojuegos debido a su simplicidad y portabilidad. En este tutorial, te mostraremos cómo crear un juego tipo «Whack-a-Mole» en PICO-8, donde los jugadores deben golpear topos que aparecen aleatoriamente en pantalla. Este tutorial te guiará paso a paso para crear el juego, desde la configuración básica hasta el código del juego.
1. Configuración de PICO-8
Antes de comenzar, necesitas descargar PICO-8 desde su sitio web oficial. Una vez que lo hayas instalado y abierto, estarás listo para comenzar a crear tu juego.
2. Concepto del Juego
En un juego clásico de Whack-a-Mole, los topos aparecen en varios agujeros de la pantalla de manera aleatoria. El jugador debe reaccionar rápidamente para golpear los topos antes de que desaparezcan. Nuestro juego tendrá los siguientes elementos clave:
- Un martillo controlado por el jugador.
- Agujeros donde los topos aparecerán de manera aleatoria.
- Un temporizador que limita el tiempo en el que los topos permanecen visibles.
- Un sistema de puntuación basado en los topos golpeados.
3. Esqueleto Básico del Juego
En PICO-8, los juegos se desarrollan utilizando Lua, un lenguaje de programación simple y ligero. Para empezar, vamos a crear el esqueleto básico del juego, que consistirá en dos funciones: init()
para inicializar variables y update()
para manejar la lógica del juego en cada cuadro.
Función de inicialización
Vamos a crear algunas variables para controlar los topos y el martillo:
function init()
-- Coordenadas de los agujeros de los topos
moles = {
{x=32, y=32, visible=false, timer=0},
{x=96, y=32, visible=false, timer=0},
{x=32, y=96, visible=false, timer=0},
{x=96, y=96, visible=false, timer=0}
}
-- Martillo
hammer = {x=64, y=64}
-- Puntuación
score = 0
-- Tiempo entre la aparición de topos
mole_interval = 60
mole_timer = 0
-- Iniciar el juego
game_over = false
end
4. Dibujando los Elementos del Juego
En PICO-8, los gráficos se pueden dibujar utilizando sprites. Vamos a dibujar los agujeros de los topos, los topos mismos y el martillo.
Función de dibujo
function draw()
cls() -- Limpia la pantalla
-- Dibujar agujeros y topos
for mole in all(moles) do
circfill(mole.x, mole.y, 10, 5) -- Dibuja los agujeros
if mole.visible then
spr(1, mole.x - 8, mole.y - 8) -- Dibuja el topo si es visible
end
end
-- Dibujar el martillo
spr(2, hammer.x - 8, hammer.y - 8)
-- Dibujar la puntuación
print("Score: "..score, 1, 1, 7)
end
5. Lógica del Juego
En esta sección, manejaremos el control del martillo, la aparición de los topos, y la lógica para golpear a los topos.
Control del martillo
El martillo debe seguir el movimiento del jugador. Podemos usar las teclas de flecha para mover el martillo y las coordenadas x
e y
se actualizarán de acuerdo.
function update()
-- Movimiento del martillo
if btn(0) then hammer.x -= 2 end -- Izquierda
if btn(1) then hammer.x += 2 end -- Derecha
if btn(2) then hammer.y -= 2 end -- Arriba
if btn(3) then hammer.y += 2 end -- Abajo
-- Mantener el martillo dentro de los límites de la pantalla
hammer.x = mid(0, hammer.x, 128)
hammer.y = mid(0, hammer.y, 128)
-- Lógica de aparición de topos
mole_timer += 1
if mole_timer >= mole_interval then
spawn_mole()
mole_timer = 0
end
-- Golpear topos
if btnp(4) then -- Botón Z
hit_mole()
end
-- Actualizar temporizadores de los topos
update_moles()
end
Aparición de topos
Cada cierto tiempo, queremos que un topo aparezca aleatoriamente en uno de los agujeros. La función spawn_mole()
se encargará de hacer esto:
function spawn_mole()
local mole = moles[flr(rnd(#moles)) + 1]
mole.visible = true
mole.timer = 30 -- Tiempo que el topo estará visible
end
Golpear a los topos
Cuando el jugador presiona el botón de golpear (Z), verificamos si el martillo está sobre un topo visible. Si lo está, aumentamos la puntuación y hacemos que el topo desaparezca.
function hit_mole()
for mole in all(moles) do
if mole.visible and abs(mole.x - hammer.x) < 8 and abs(mole.y - hammer.y) < 8 then
mole.visible = false
score += 1
end
end
end
Actualización de topos
Los topos no deben permanecer visibles indefinidamente. Después de un tiempo, deben desaparecer. Actualizaremos los temporizadores de los topos en cada cuadro.
function update_moles()
for mole in all(moles) do
if mole.visible then
mole.timer -= 1
if mole.timer <= 0 then
mole.visible = false
end
end
end
end
6. Pantalla de Game Over
Es importante agregar una condición para finalizar el juego, como un temporizador global o un número máximo de topos golpeados. En este caso, terminaremos el juego cuando el jugador alcance una puntuación objetivo.
function check_game_over()
if score >= 10 then
game_over = true
end
end
Y también podemos mostrar una pantalla de Game Over cuando el jugador gane:
function draw_game_over()
cls()
print("Game Over!", 48, 60, 7)
print("Score: "..score, 48, 70, 7)
end
7. Integración Final
Finalmente, integramos todas las funciones. En el ciclo principal, verificamos si el juego está activo o si se debe mostrar la pantalla de Game Over.
function _init()
init()
end
function _update()
if not game_over then
update()
check_game_over()
end
end
function _draw()
if game_over then
draw_game_over()
else
draw()
end
end
8. Mejoras y Extensiones
Una vez que hayas implementado la versión básica del juego, puedes agregar funciones adicionales para mejorar la jugabilidad:
- Ajustar la dificultad: Hacer que los topos aparezcan y desaparezcan más rápido a medida que el jugador aumenta su puntuación.
- Sonidos: Añadir efectos de sonido cuando el martillo golpee un topo o cuando el jugador falle.
- Más agujeros: Agregar más agujeros para que aparezcan los topos, aumentando el desafío.
- Tiempo límite: Implementar un temporizador global que haga que el juego termine cuando se acabe el tiempo.
Conclusión
Este juego tipo «Whack-a-Mole» en PICO-8 es un excelente punto de partida para aprender a usar la consola virtual y familiarizarte con la programación de juegos retro. Con la estructura básica en su lugar, puedes personalizar el juego a tu gusto y explorar más funciones de PICO-8, como animaciones, efectos de sonido y más niveles. ¡Diviértete creando!