Assets:
Primero descargaremos los siguientes assets para este proyectohttps://opengameart.org/content/pong-programmer-art
https://opengameart.org/content/pong-sfx
https://www.dafont.com/es/squarefont.font
Creamos una carpeta que nombraremos "pong" y unas sub-carpetas llamadas "sprites" , "sonidos" , "fuentes" y añadimos cada archivo en su respectiva carpeta.
conf.lua
Crearemos un archivo y lo llamaremos conf.lua, en él añadiremos el siguiente código para configurar el proyecto:function love.conf(t)
t.window.title = "Pong - made in Love2D by Deybis Melendez"
t.window.width = 800
t.window.height = 600
end
main.lua
love.load()
En el love.load vamos a declarar las variables para la bola, la barra izquierda y barra derecha, la imagen de background y los sonidos que utilizaremos:function love.load()
bola = {}
bola.velocidad = 300
bola.movX, bola.movY = -bola.velocidad , bola.velocidad
bola.sprite = love.graphics.newImage("sprites/fancy-ball.png") -- El sprite mide 32x32
bola.x , bola.y = love.graphics.getWidth()/2 - 16 , love.graphics.getHeight()/2 - 16
barra1 = {}
barra1.sprite = love.graphics.newImage("sprites/fancy-paddle-blue.png")
barra1.x , barra1.y = 32, love.graphics.getHeight()/2 - 64 -- La barra mide 32x128
barra2 = {}
barra2.sprite = love.graphics.newImage("sprites/fancy-paddle-green.png")
barra2.x , barra2.y = love.graphics.getWidth() - 64 , love.graphics.getHeight()/2 - 64
background = love.graphics.newImage("sprites/fancy-court.png")
fuente = love.graphics.newFont("fuentes/Square.ttf", 32)
pop = love.audio.newSource("sonidos/Pop.ogg", "static")
score = love.audio.newSource("sonidos/Score.ogg", "static")
velocidadBarra = 300
puntaje1 , puntaje2 = 0 , 0
end
love.draw()
Ahora dibujaremos todo el juego en pantalla:function love.draw()
love.graphics.draw(background, 0, 0)
love.graphics.draw(bola.sprite, bola.x, bola.y)
love.graphics.draw(barra1.sprite, barra1.x, barra1.y)
love.graphics.draw(barra2.sprite, barra2.x, barra2.y)
love.graphics.setFont(fuente)
love.graphics.print(puntaje1, love.graphics.getWidth() * 1/3 , 32)
love.graphics.print(puntaje2, love.graphics.getWidth() * 2/3 , 32)
end
Funciones
Vamos a añadir 2 funciones para no repetir el código:
function clamp(min, val, max) -- Nos retorna un rango de valor, desde un mínimo a un máximo
return math.max(min, math.min(val, max))
end
function reiniciar() -- Reiniciamos la partida si la bola sale de pantalla
bola.x , bola. y = love.graphics.getWidth()/2 - 16 , love.graphics.getHeight()/2 - 16
bola.movX = - bola.movX
bola.movY = - bola.movY
play(score)
end
function play(sonido) -- Un simple control de sonido.
if sonido:isPlaying() then
love.audio.stop()
love.audio.play(sonido)
else
love.audio.play(sonido)
end
love.update(dt)
En el update, añadiremos el movimiento de la bola:--Movimiento de la bola
bola.x = bola.x + bola.movX * dt
bola.y = bola.y + bola.movY * dt
Luego añadimos el código para el rebote desde arriba y abajo:
-- Rebote de la bola desde arriba hacia abajo
if bola.y < 0 then
bola.movY = bola.velocidad
play(pop)
elseif bola.y > love.graphics.getHeight() - 32 then
bola.movY = - bola.velocidad
play(pop)
end
Ahora el en caso de que la bola salga de la pantalla por los lados:
-- Si la bola sale de pantalla reinicia su posición y da puntajes
if bola.x < -16 then
reiniciar()
puntaje2 = puntaje2 + 1
elseif bola.x > love.graphics.getWidth() then
reiniciar()
puntaje1 = puntaje1 + 1
end
Ahora añadimos el movimiento de las barras, el control del juego:
-- Control del juego
if love.keyboard.isDown("a") then
barra1.y = barra1.y - velocidadBarra * dt
elseif love.keyboard.isDown("z") then
barra1.y = barra1.y + velocidadBarra * dt
end
if love.keyboard.isDown("up") then
barra2.y = barra2.y - velocidadBarra * dt
elseif love.keyboard.isDown("down") then
barra2.y = barra2.y + velocidadBarra * dt
end
Ahora limitamos el movimiento de las barras para que no salga de la pantalla:
barra1.y = clamp(0, barra1.y, love.graphics.getHeight() - 128) -- 128 píxeles mide el alto de la barra
barra2.y = clamp(0, barra2.y, love.graphics.getHeight() - 128)
Ahora añadimos el código que controla el rebote de la bola en las barras:
--Rebote de la bola cuando golpea las barras
if bola.x <= barra1.x + 32 and bola.x >= barra1.x and bola.y >= barra1.y and bola.y + 32 <= barra1.y + 128 then
bola.movX = bola.velocidad
play(pop)
elseif bola.x + 32 >= barra2.x and bola.x <= barra2.x and bola.y >= barra2.y and bola.y + 32 <= barra2.y + 128 then
bola.movX = - bola.velocidad
play(pop)
end
Ahora ya puedes jugar.
Puedes encontrar el proyecto en mi Github: https://github.com/DeybisMelendez/Love2DBlog/tree/master/pong
Tambien puedes jugar el juego en Itch.io: https://damv.itch.io/pong
No hay comentarios:
Publicar un comentario