Déplacer la balle !
Passons à notre balle maintenant.
Pour savoir si la balle doit suivre la raquette ou se déplacer, il va nous falloir une variable. Une variable de type booléen fera parfaitement l’affaire.
Nous lui donnerons une Vélocitée en X et une Vélocitée en Y.
Ainsi qu’une variable vitesse.
- On nommera notre variable booléenne isGlue.
- Ajouter les variables de vélocités, vx et vy.
- Ajouter la variable speed.
local balle = {x=0, y=0, w=40, h=40, isGlue=true, vx=-1, vy=-1, speed=300}il faut aussi modifier l’update de la balle pour savoir si elle doit suivre la raquette ou bien etre en mouvement avec ses vélocités :
function love.update(dt)
-- la balle suit la raquette si isGlue est a true
if balle.isGlue == true then
balle.x = raquette.x + ((raquette.w / 2) - (balle.w / 2))
balle.y = raquette.y - (balle.h + 2)
else
balle.x = balle.x + (balle.vx * balle.speed * dt)
balle.y = balle.y + (balle.vy * balle.speed * dt)
end
endTout comme la raquette il faut limiter la balle a la fenêtre du jeu, mais nous voulons qu’elle change de direction aussi.
- Bord gauche : Replacer x et Changer de direction vx
- Bord Droite : Replacer x et Changer de direction vx
- Bord Haut : Replacer y et Changer de direction vy
- Bord Bas : Remettre isGlue à true et réinitialisés les valeurs de vx et vy à leurs valeurs initiales
function love.update(dt)
-- la balle suit la raquette si isGlue est a true
if balle.isGlue == true then
balle.x = raquette.x + ((raquette.w / 2) - (balle.w / 2))
balle.y = raquette.y - (balle.h + 2)
elseif balle.isGlue == false then
balle.x = balle.x + (balle.vx * balle.speed * dt)
balle.y = balle.y + (balle.vy * balle.speed * dt)
end
-- la balle rebondi sur le bord droit ou gauche
if balle.x < 0 then
balle.x = 0
balle.vx = 0 - balle.vx
elseif balle.x + balle.w > 800 then
balle.x = 800 - balle.w
balle.vx = 0 - balle.vx
end
-- la balle rebondi sur le bord en haut
if balle.y < 0 then
balle.y = 0
balle.vy = 0 - balle.vy
end
-- la balle est perdue si elle a touchee le bord en bas
if balle.y + balle.h > 600 then
balle.isGlue = true
balle.vy = -1
balle.vx = -1
end
endMaintenant, il nous faut créer un événement déclencheur pour que notre balle change son booléen isGLue à false.
On utilisera l’événement suivant :
Si on presse la touche espace et que balle.siGlue est bien a true Alors balle.isGlue vaudra false Fin
function love.keypressed(key)
if key == "space" and balle.isGlue == true then
balle.isGlue = false
end
endDésormais votre balle doit rebondir sur les murs et revenir sur la raquette lorsqu’elle touche le bord bas de l’écran.
Voici le code complet :
love.window.setTitle("Casse Brique")
local raquette = {x=300, y=555, w=200, h=40, speed=250}
local balle = {x=0, y=0, w=40, h=40, isGlue=true, vx=-1, vy=-1, speed=300}
local briques = {} -- nos briques
-- creation des briques
for ligne=1, 5 do
briques[ligne] = {}
for colonne=1, 6 do
briques[ligne][colonne] = 1
end
end
--
function love.update(dt)
if balle.isGlue == true then
balle.x = raquette.x + ((raquette.w / 2) - (balle.w / 2))
balle.y = raquette.y - (balle.h + 2)
elseif balle.isGlue == false then
balle.x = balle.x + (balle.vx * balle.speed * dt)
balle.y = balle.y + (balle.vy * balle.speed * dt)
end
-- la balle rebondi sur le bord droit ou gauche
if balle.x < 0 then
balle.x = 0
balle.vx = 0 - balle.vx
elseif balle.x + balle.w > 800 then
balle.x = 800 - balle.w
balle.vx = 0 - balle.vx
end
-- la balle rebondi sur le bord en haut
if balle.y < 0 then
balle.y = 0
balle.vy = 0 - balle.vy
end
-- la balle est perdue si elle a touchee le bord en bas
if balle.y + balle.h > 600 then
balle.isGlue = true
balle.vy = -1
balle.vx = -1
end
-- deplacement de la raquette Droite ou Gauche
if love.keyboard.isDown("left") then
raquette.x = raquette.x - (raquette.speed * dt)
elseif love.keyboard.isDown("right") then
raquette.x = raquette.x + (raquette.speed * dt)
end
-- limiter le deplacement de la raquette a la fenetre du jeu
if raquette.x < 0 then
raquette.x = 0
elseif raquette.x + raquette.w > 800 then
raquette.x = 800 - raquette.w
end
end
--
function love.draw()
-- notre raquette
love.graphics.rectangle("fill", raquette.x, raquette.y, raquette.w, raquette.h)
-- notre balle
love.graphics.rectangle("fill", balle.x, balle.y, balle.w, balle.h)
local x, y, w, h -- nos variables briques
x = 0
y = 0
w = 800 / 6
h = 30
for ligne=1, 5 do
for colonne=1, 6 do
love.graphics.rectangle("fill", x+1, y+1, w-2, h-2)
x = x + w -- a chaque colonne on decale notre variable x de la largeur d une brique
end
x = 0 -- on remets la position x pour la ligne suivante
y = y + h -- on decalle la position y pour la ligne suivante
end
end
function love.keypressed(key)
if key == "space" and balle.isGlue == true then
balle.isGlue = false
end
endIl ne nous reste plus que les collisions à gérer.
- Collision entre la balle et la raquette
- Collision entre la balle et les briques