Retour au parcours BASES

Programmer un jeu de casse briques en 120 lignes de code

A la fin de cet atelier de formation, accessible aux débutants, vous aurez créé votre premier jeu vidéo, basé sur un principe universel imaginé par Atari en 1976 sous le nom de Breakout.  Et ceci en 120 lignes de code seulement et en partant de zéro.

Voici les fonctionnalités que vous allez mettre en place :

  • Une raquette qui se déplace avec les mouvements de votre souris
  • Une balle que l’on lance en cliquant
  • Celle-ci va ensuite rebondir sur les murs, les briques, et la raquette
  • Lorsqu’une brique est touchée, elle est détruite et la balle inverse sa course

La mécanique du casse brique a été popularisée par Atari en 1976 avec le jeu Breakout, lui-même étant une évolution du célèbre Pong. Plus tard, c’est Arkanoid qui remettra le genre sur le devant de la scène. Mais également de nombreux autres clones pour ordinateurs personnels. Mon favori étant Crystal Hammer, sur Amiga.

La mécanique, à la base, est très simple et ne nécessite aucune expertise mathématique. Le code que je vais vous enseigner est volontairement le plus simple possible, afin d’éviter de vous faire aborder des concepts inutiles à ce stade de votre apprentissage.

Pour suivre cet atelier, vous devez avoir suivi l’atelier « Les bases de la programmation » en Lua avec Love2D.

Nombre de vidéos: 7
Durée totale des vidéos: 1h30
Langage(s): Lua
Framework(s) / Moteur(s): Love2D

 

Adhérez aujourd'hui

Gamecodeur c’est à partir de 8 € / mois (facturé annuellement)

Comments (71)

Badge 3 Terminé.
Sur cet atelier Casse Brique mon objectif était de le faire en pratiquant le code.
A chaque vidéo, je la regarde et j’essaie de la reproduire, pour ensuite à la fin refaire l’atelier entièrement sans aide.
J’y suis presque arrivé, ma seule erreur fut la variable « bx = bx + brique.largeur » que j’ai mis dans la boucle if et non dans la boucle « for c.. ».
En faisant cette erreur cela efface les briques dans l’ordre et non la brique touchée par la balle.

Mon erreur:
local bx,by = 0,0
local l,c
for l = 1,6 do
bx = 0
for c = 1,15 do
if niveau[l][c] == 1 then
love.graphics.rectangle( « fill » , bx +1 , by +1 , brique.largeur -2 , brique.hauteur -2)
bx = bx + brique.largeur
end
end
by = by + brique.hauteur
end

Merci David

Génial, bravo pour ta détermination l’ami.
Je viens de finir l’atelier en le suivant pas à pas. Je vais aussi tenter de le refaire par moi-même avant de passer au suivant.

C’est ce que j’ai fais avec le Lander, j’ai pris l’atelier point par point j’ai refais, et j’ai comme ça réussi à le faire, il n’y à eut que les détails pour le faire avancer qui m’ont donné du fil à retordre.

Bon courage pour le prochain atelier

J’ai essayé de faire une partie gauche et droite sur le pad pour influencer la direction de la balle en fonction de son point de contact avec la barre ( pad) mais ce n’est pas encore ça 😉

Bonjour David, bonjour à tous
j’ai travaillé autour de ces leçons avec un tableau sous cette forme
niveau {{,1,1,1,1,1,1,1,…},{2,2,2,2,2,2,2,..}} avec la mise en place de briques en couleur (brique.png) , une raquette (pad.png).
j’ai testé les rebonds sur la raquette avec des changements de direction en fonction de la position de la balle sur la raquette, mais cela est resté très aléatoire, si vous avez une solution, une idée.
Merci, à bientôt

Je suis à la fin de l’atelier, le casse brique est censé fonctionner sauf qu’il ne réagit pas avec les 1ères briques (uniquement la 1er colonne ne partant du haut) et du coup au lieu de supprimer 1 seule brique il supprime la colonne entière. j’ai vérifie et revérifié que

if l >= 1 and l = 1 and c <= 15 then
if niveau [l][c] == 1 then
balle.vy = 0 – balle.vy
niveau[l][c] = 0

soit biens comme dans la video mais rien n'y fait il n'y a aucune collision avec la brique. Quelqu'un pourrais t'il m'éclairer;

J’ai passé pas mal de temps à refaire les deux derniers ateliers . J’ai réécrit plusieurs fois les codes avec des erreurs . En fait quand tu reprends une copie blanche la vraie difficulté c’est la logique de programmation que j’ai du mal à intégrer . Bien souvent le code au début on le refait de mémoire mais ça ne suffit pas .
En tout cas merci David , beaucoup « d’info » à digérer rien que dans ce premier parcours ça promet …
@+

Bonjour David, bonjour à toutes et à tous,

Comme cela est dit plus haut, partir d’une feuille blanche et arriver un code sans bugs et qui fonctionne bien demande pas mal de temps et de réflexion…

j’ai passé une bonne demi-heure sur un écran bleu de love2D qui m’affichait 128 attempt to index a nil value.
La ligne 128 était if niveau[l][c] == 1 then : pas de mauvaise frappe dans les variables ni le chiffre 1 à la place du l.

Mon erreur : fouiller dans un tableau qui n’a pas été construit : la fonction démarre a bien été déclarée avec la construction du tableau, mais j’ai tout simplement oublié de l’appeler dans mon code et ça se passait 56 lignes plus haut !!!

Bon code.

Bond51

bonjour,
j’ai un souci avec l’atelier casse brique – la balle. Malgré ‘avoir lu plusieurs fois il reste bloqué à 74% et ne se valide pas.
Sinon j’ai constaté que la raquette rentrait dans les murs. Je vais essayer de coder une solution comme exercice

bonjour,
donc pour que la raquette ne sorte pas de motié de l’écran j’ai trouvé comme solution :
function love.update(dt)
— la raquette doit suivre la souris
pad.x = love.mouse.getX()
if pad.x == 0 then
pad.x = pad.largeur/2
elseif pad.x == largeur – 1 then
pad.x = (largeur – 1) – pad.largeur/2
end
— le reste du code
end
j’ai pas mal galéré pour la largeur parce que j’ai utilisé instinctivement largeur mais en fait il faut prendre largeur – 1 : oubli d’une information trivial du système de coordonnées de l’écran

Tiens, je l’ai fait aussi, mais codé différemment :

if pad.x + 40 > largeur then
pad.x = largeur – 40
end — (faudrait trouver une variable pour ce 0 moche)
if pad.x – 40 < 0 then
pad.x = 0 + 40
end

La largeur du pad est de 80, et son X est au milieu, donc 40, c'est la moitié de sa largeur
Doit y avoir moyen de faire ça plus conscit avec math.abs mais je vérrai plus tard

Un Severus un peu plus expérimenté revient pour vous dire : FAITES PAS COMME CA, FAITES COMME GILLES.

Nan nan, sérieux. Je sais que je gueule et tout, mais c’est vrai
Parce que dans mon code si je change la taille de pad (disons 100), ben le +40, ça sera pas la moitié. Et faudra cahanger tous les « 40 » pour des « 50 »

Alors largeur/2 ça fait bizarre, mais même si ça varie, le code restera bon.

Bonsoir à tous,
Je passe un moment sur cet atelier que j’ai essayé de refaire plusieurs fois en partant d’une page vi
C’est vrai qu’après plusieurs tentatives les concepts de la programmation me semble plus clairs mais c’est la logique qui me manque dans le process d’organiser mon code.
Bref j’ai réussi à changer le pad et mettre un pad de couleur pris sur une spritesheet, idem pour les briques. Par contre je bloque vraiment sur les tableaux.
Je souhaiterai par exemple pouvoir afficher 1 brique sur 2 d’une autre couleur.
Je n’arrive pas à comprendre comment écrire ce code pour afficher cela?
Merci par avance

A ce stade c’est normal. Tu en es au tout début, tu manques de pratique, ton esprit n’est pas entrainé pour déduire de nouveaux concepts de programmation.
Pourtant, si je te le dis, tu verras que tu as toutes les connaissances pour gérer des couleurs. C’est juste que tu manques de pratique. Je te conseille de passer aux ateliers suivants.
Je te donne tout de même une piste : tu désignes les briques par un 1, et l’absence de brique par le 0… rien ne t’empêche de décider que 1 c’est une couleur, et 2 une autre.
Ensuite, tu as juste à utiliser les « if » au bon endroit, notamment au moment de l’affichage pour dire « si c’est 1 alors c’est bleu, sinon si c’est 2 c’est rouge, etc. ». Mais aussi de considérer que 2 est une valeur acceptable pour détecter une collision avec la balle… etc. Mais encore une fois, tout ça est peut être un peu trop tôt pour toi.

Bonjour, je suis face à un étrange problème : lors de l’étape pour faire rebondir la balle sur le pad, je n’arrive tout simplement pas à la faire. Ou plutôt : le programme n’arrive pas à le faire. J’ai décidé de copier littéralement sur le tutoriel, j’ai télécharger la version finie du programme, rien n’y fait. J’ai vérifié tout ce qui était possible dans toutes les lignes de codes, je n’ai rien trouvé. En plus, ne m’indique pas « Erreur » lorsque je le lance, il fait le programme normalement, mais sans faire rebondir la balle sur le pad. J’ai donc décide recommencer depuis le début, j’ai supprimé le programme (ce qui n’était pas une bonne idée je l’avoue) et je suis reparti de zéro. Je fait un premier test pour tester le dessin du rectangle, et sans aucun code qu’il le demande, le rectangle se met à suivre ma souris. C’est à ce demander si c’est pas mon PC qui a un problème. Pourriez vous-me guidez s’il vous plaît ?

Merci d’avance.

J’ai oublié de préciser, que Love m’indique une erreur sur « cos » à la ligne 63 qui a une valeur « nil » quand je lance clique alors que le programme est lancé que j’ai recommencé, alors qu’il ne fait qu’une quinzaine de ligne. C’est comme si ZeroBrane avait oublié que j’ai avait effacé le programme…

De toute évidence tu n’as pas fixé le répertoire de travail de ZB (menu projet / répertoire de projet ».
Pour le rebond, vu que tu ne testais sûrement pas le bon projet, j’attend que tu ai configuré correctement pour te répondre.

pfiouu enfin fini,
le cerveau a un peu chauffé

par contre je me demandais
dans la ligne pour en
« `lua
if l 0 and c >= 1 and c = 1 and c <=15 est reellement necéssaire?
ca marche tres bien sans

Bon…
Va clairement falloir que je passe du tout sur les boucles parce que c’est très flou pour moi. L’array je vois comment ça se passe, la double boucle de draw je m’entirai si je disai tout comprendre.

Ok, demain on relit tout ça, on comprends et on le retape sans autre aide que le wiki.

Merci David

Je me demandais s’il était possible avec love de contrôler la vitesse du pad ou plutôt de pouvoir contrôler la vitesse de la souris (du déplacement du curseur dans la fenêtre de jeu) pour le coup.

Je demande peut être un truc qui demande un niveau plus évolué en programmation pour le coup, mais je trouverais ça intéressant de pouvoir faire varier la vitesse du pad selon le niveau de difficulté ou bien selon qu’on ai ramassé un item de boost.

Par exemple au début du jeu le pad bouge au maximum de tant de pixel par seconde mais au fur et a mesure qu’on avance dans les niveau le pad a une vitesse max moins élevée pour augmenter la difficulté

Ou bien le pad vas a une vitesse normale de base mais grâce a un item boost qu’on peut ramasser alors on a un pad qui peux aller plus vite ou au contraire avec un item de malus on a un pad qui vas plus lentement.

Comme le pad est lié au déplacement de la souris, il faudrait alors diminuer la sensibilité de la souris pour que son déplacement soit plus lent (ou plus rapide).

Peut-être que c’est faisable en bricolant avec les fonctions de love.mouse et love.mousemoved (voir LOVE wiki pour tous les paramètres de ces fonctions).

Sinon une autre solution, serait d’utiliser les touches « left » et « right » pour le déplacement horizontal du pad. Dans ce cas tu pourrais facilement contrôler la vitesse de ton pad.

En passant la progression de la 3e vidéo « Love2D – Casse brique – La balle » bloque à 74% (même si on a visionné la totalité de la vidéo) puisque la vidéo affiche une durée de 6 min et 58 sec, mais dans les faits, elle ne dure qu’environ 5 minutes.

Fini ce premier chapitre, j’ai ajouté les images du pack fourni dans la source, c’est à dire pour les briques, la raquette et les murs, j’ai donc modifié un peu le code pour intégrer l’épaisseur des murs et du « plafond » lors des rebonds de la balle … Hâte de découvrir le prochain atelier …

En exercice, premièrement je me suis amusé à reproduire les bases de ce casse-brique sans regarder le code de David, jusqu’à l’étape ou on ajoute les briques. Et étonnamment j’ai réussis sans erreur ! Ce que je n’avais pas réussis a faire sur l’atelier précédent. Faut croire que la logique de la programmation commence à rentrer.

A partir de là, je suis partis sur autre chose. J’ai créé une plate-forme qui se déplace de gauche à droite sur l’écran et qui change de direction quand elle arrive au bout de l’écran. Elle fait rebondir la balle quand cette dernière rentre en collision avec elle.

Ensuite j’ai créé un vaisseau qui se déplace également de gauche à droite derrière la plate-forme qu’il faut réussir à toucher avec la balle. Quand le vaisseau est touché il est détruit. Enfin pas réellement, je sais juste faire en sorte qu’il disparaisse et ne s’affiche plus (comme avec les moteurs du vaisseau de l’atelier de lunar lander).

Dans l’ensemble tout à l’air de fonctionner même si le code n’est surement pas optimisé.

Bonjour à tous.
Je viens de terminer ce 1er atelier.
C’est vraiment passionnant d’arriver à un tel résultat avec si peu de ligne de code.
Je vais m’exercer à le modifier poir voir ce que je peux faire avant de commencer un autre atelier.
Merci à David et à toute l’équipe.

Bonjour à tous,

Après avoir terminé cet atelier, je me suis lancé comme défi d’ajouter toutes les pistes d’amélioration suggérées par David (voir la fin de la vidéo).
J’ai donc ajouté les modifications suivantes:
– Légère amélioration/optimisation du code d’origine (définition de la taille d’une brique en fonction de la taille de l’écran et du nombre de briques voulues par ligne/colonne, remplacement des chiffres dans les diverses boucles par des paramètres afin d’automatiser le code si l’on décide de changer le nombre de briques par ligne/colonne)
– Ajouter différent type de briques (Normal, incassable, ajoutant des bonus) avec différentes couleurs
– Ajouter des effets bonus (taille du pad augmenté, vitesse augmentée)
– Ajouter une vie à la brique (nombre de fois à toucher avant de la faire disparaître, pouvant être unique à chaque brique)
– Nouveau système de collision avec le pad (intégrant une gestion de l’angle de sortie)
– Nouveau système de collision avec les briques (intégrant le même comportement qu’un vrai casse brique)

Si jamais vous essayez de faire des modifications similaires et que vous êtes bloqué, n’hésitez pas à me poser des questions.

Bon courage à tous pour la suite et bon code 🙂

Pour la gestion du ball.vx de sortie après collision avec le pad j’ai codé ça :

`function angle(balleX, padX)
local vx = 800 * (balleX-padX)/pad.largeur
return vx
end`

J’étais parti sur du cosinus comme suggéré mais ça se simplifiait en math.acos(math.cos(truc)) donc truc.

Reste à ajouter plein de petites options. Ca me rappelle mes heures passées sur Alpha Bounce de Motion Twin.

Bonsoir, bon Atelier terminé

je progresse, après la première vidéo, j’ai réussi à coder et utiliser les touches de déplacement gauche / droite au lieu de la souris. Désolé, David, l’icone de la souris me perturbait, et à chaque fois que tu sors de l’écran de love tu perds le contact avec le pad. donc, retour au bon vieux système !

J’ai des petites idées qui se bousculent pour retrouver des sensations que j’avais lorsque je jouais à ce jeu dans les années 80…

Mais bon j’ai encore beaucoup de boulot à faire !
Mais tes explications sont claires pour comprendre ce que l’on fait.
Ah oui..autre chose apprise : le « l » et le « 1 »…ouais ! vachement important à ne pas confondre … j’ai bugger (Moi, pas mon PC ;-)) lorsque j’ai lancé le jeu et qu’à la place d’avoir une brique éliminée, j’ai eu une colonne complète qui a disparu… Mais j’y suis arrivé !

Encore merci !

Je n’ai pas encore finit l’atelier mais j’ai bien l’impression que la fonction love.mousepressed() n’est plus du tout d’actualitée. C’est love.mouse.isDown() maintenant, ça serait pas mal de mettre un petit mot à propos de ça au dessus de la vidéo.

Heu tu confonds la fonction système love.mousepressed et l’API love.mouse.isDown().
L’un est une fonction comme love.load / update / draw / keypressed et l’autre est une fonction de l’API qui s’appelle depuis update et renvoie un résultat.

Ah my bad, love.mousepressed n’ayant jamais marché chez moi, je suis passé sur love.mouse.isDown(). Mais j’ai du faire une erreur quelque part qui empêchait le fonctionnement de mousepressed je suppose.

Bonjour,

C’est marrant comme ce qui vous parait pas évident un jour peux vous sembler plus accessible le lendemain. C’est une bonne phrase pour résumer mon sentiment sur cette atelier.
Persévérence est mère de réussite.
Mon but étant d’être capable de refaire l’atelier en y ajoutant quelques modifications mais sans revenir sur le cours. Objectif « presque » atteint.
bon allez, atelier suivant.

Bonjour à tous,
Je ne suis qu’à la vidéo 2 de cet atelier, et j’ai un peu de mal à intégrer le fait que cette ligne de code place le point de départ du rectangle au centre, comme David le dit.
love.graphics.rectangle(« fill », pad.x – (pad.largeur /2) , pad.y – (pad.hauteur /2 ), pad.largeur, pad.hauteur )

La doc Love2D dit bien que :
Synopsis

love.graphics.rectangle( mode, x, y, width, height )

Arguments

DrawMode mode
How to draw the rectangle.
number x
The position of top-left corner along the x-axis.
number y
The position of top-left corner along the y-axis.
number width
Width of the rectangle.
number height
Height of the rectangle.

Donc le 2ème et 3ème nombre est bien la position de départ du rectangle.
love.graphics.rectangle
(« fill », 1 – (40 /2) , 200 – (20 /2 ), 40, 20 )
(« fill », 1 – (20) , 200 – (10 ), 40, 20 )
(« fill », -19 , 199, 40, 20 )

Humm en fait en détaillant le calcul, j’ai compris!!
En fait c’est une petite illusion de centrage..
En fait je ne comprenais pas comment en déplaçant la souris, sur les bords gauches et droits, j’arrivais toujours au maximum jusqu’au centre du rectangle.
En fait, love2D ne prend en compte les mouvements de la souris que pour une valeur comprise entre 0 et hauteurFenetre (ou largeurFenetre).
Du coup voila tout s’explique.
Au final, on ne dessine pas un rectangle à partir du centre de celui-ci mais on décale l’origine du rectangle pour donner l’illusion que le centre a changer.
C’était plus un post. sur un raisonnement, je le post au cas ou ca pourrait aider d’autres.

Super cet ateleir

heheheh…notre imagination est notre seule limite

ça y est je suis accro a gameCodeur

Maintenant j’aborde C#

En attendant amusez vous bien avec mon jeu inspiré des mouvements sociaux à paris

Cet atelier est super,

J’ai décidé de reprendre le casse brique tout et peut-être ajouter certaines idées. En plus cela m’a donné une idée d’un jeu que je pourrais faire.

Merci de votre aide

Bonjour à tous,

J’ai un souci, quand je mets le « brique.x = 0 » et « brique.y = 0 » en début de code avec « local brique = {} » je suis quand même obligé de les remettre dans la fonction « love.draw » pour faire afficher les briques, pourquoi?

Merci!

Bonjour,

J’allais poster exactement la même question que Codecodecodette. Ça me tourmente depuis hier où j’ai travaillé sur ce point de l’atelier. Je me dis que ça doit concerner la portée des variables mais pourtant on arrive quand même a accéder à pad.x, etc …. sans les déclarer de nouveaux dans le draw.

Codement,
Killian

Bonjour à tous

Concernant l’exercice.

J’essaie de faire bouger ma raquette ( image png ) avec la souris et «  » img = love.mouse.getX() » » mais cela ne fonctionne pas. Dans la function love.draw(), love se lance avec love.graphics.rectangle mais cela fonctionne mais pas avec love.graphics.draw(img etc…)du coup je ne peut pas faire bouger mon image !

Pourriez vous m’aidez ?

Merci par avance de votre aide.. ça fait 4 h que je suis dessus !

Voici mon petit code de débutant :

io.stdout:setvbuf(‘no’)

local img
img = love.graphics.newImage(« images/barre.png »)

if arg[#arg] == « -debug » then require(« mobdebug »).start() end

function love.load()

local largeur = love.graphics.getWidth()
local hauteur = love.graphics.getHeight()

print(« Largeur = », largeur)
print(« Hauteur = », hauteur)

end

function love.update(dt)

img = love.mouse.getX() —>>> si cette ligne est présente, love crash ! —-

end

function love.draw()

love.graphics.draw(img,80,20,0,1,1,0,0,0,0)

end

Revise tes fondamentaux (ateliers précédents).
1) tu passes a draw des coordonnées fixés donc normal que rien ne bouge
2) tu attribue une valeur numérique (getX) a ton image ce qui prouve que tu ne sais pas vraiment ce que tu fais
Tu as commencé cet atelier sans avoir compris et pratiqué les ateliers précédents. Si tu avais correctement pratiqué l’atelier lunar lander tu saurais positionner une image a une coordonnée
Au travail ! 🙂

C’est ce que j’ai fais avec le Lander, j’ai pris l’atelier point par point j’ai refais, et j’ai comme ça réussi à le faire, il n’y à eut que les détails pour le faire avancer qui m’ont donné du fil à retordre.

Bon courage pour le prochain atelier

Salut,

J’ai recodé une grande partie du jeu, en orientant la détection de collision et le déplacement de la balle en coordonnées polaires, ce qui donne plus de fiabilité au gameplay.
J’ai une fonction de mesure d’angle balle-brique ou balle-paddle et la vitesse se donne en module de vecteur et non en vx vy, utile si plus tard on veut implémenter un bonus qui change la vitesse.
J’ai pu ainsi implémenter le changement d’angle au rebond sur le paddle, le rebond latéral et supérieur sur les briques.
J’ai aussi ajouté un menu succinct avec « start » « continue » et « game over ».
Il y a aussi un mode pause.
Je n’ai pas encore consacré de temps à l’infographie (couleurs, images, etc) car c’est assez long pour peu de résultats en terme de progression en codage.
Je n’ai consacré environ que 10-15 heures à LUA, la progression est donc très rapide et motivante.

La suite au prochain atelier..; 🙂

A.C.

Bonjour,

Concernant le bug de la 4e vidéo (Love2D – Casse brique – Lancé et rebond sur les murs).

N’est-ce pas plus simple de soustraire le rayon de la balle à la condition?
De sorte à ce que la balle ne sort pas de l’écran du tout?

Au lieu de :

if balle.x > largeur then
balle.vx = 0 – balle.vx
balle.x = largeur
end

J’ai mis :

if balle.x > (largeur – balle.rayon) then
balle.vx = 0 – balle.vx
end

Avec la solution proposée dans la vidéo, la balle quitte à moitié l’écran avant d’être redirigée, tandis qu’en soustrayant son rayon, elle cogne pile le bord.

Désolé si je me trompe. 😀

Quelques galères dans cet atelier que j’ai terminé récemment. Je n’ai pas organisé mon code correctement et il faudra à l’avenir que je preine des notes dans mon code (« —Une note ») afin de m’y retrouver plus facilement. Je passe donc à l’atelier suivant en me souvenant de cela !

Pour ma parts, j’ai essayé d’implanter un déplacement vertical à la barre, modifier les textures de la balle, des briques et du pad. je suis assez content du résultat même si c’est sobre.
J’ai même pris le temps d’implanter deux sons, un restart et un sortie.

J’aimerai avoir vos avis sur le sujet.

https://www.dropbox.com/sh/9cr7lcvuy2u90eb/AACfQGfuNFZbeZDeOVpAE3psa?dl=0

Je vous remercie pour vos retours

cordialement.
Fangi

Malin. Mais en programmation la clé n’est pas d’économiser mais de raconter une histoire.
Math.floor + 1 raconte qu’on prend une valeur entière et que l’on se décale de 1 pour s’adapter au système d’indexation de Lua.

Bonjour David :).

Excellent atelier pour finir sur les bases LUA LOve 2D avant de passer à la suite plus poussée, bravo ! 😀

En revanche, en petit exercice supplémentaire, tu peux recommander de faire en sorte que la raquette ne sorte pas du décor, je l’ai fait, c’est assez sympa pour se creuser les méninges et accessible :). Là si tu regardes bien, avec ton code, la raquette sort à moitié de l’écran ^^.

C’est un bon exercice complémentaire ;).

Merci encore pour l’atelier, les explications claires, vraiment très agréable. A bientôt ;).

Lucowlmes

J’avance doucement dans ce TP, mais j’ai un dysfonctionnement étrange ! (je précise que je suis sur Mac/ZeroBrane)
Je dépose donc ici un extrait de code, c’est étrange qu’il y ait un changement de comportement en fonction de la case

Error

main.lua:24: bad argument #2 to ‘rectangle’ (number expected, got nil)
Traceback
[C]: in function ‘rectangle’
main.lua:24: in function ‘draw’
[C]: in function ‘xpcall’

ceci ne fonctionne pas

pad = {}
pad.hauteur = 20
pad.largeur = 80
pad.x = 0
pad.y = 0

love.graphics.rectangle("fill", pad.X, pad.Y, pad.largeur, pad.hauteur)

ceci fonctionne !

pad = {}
pad.hauteur = 20
pad.largeur = 80
pad.X = 0
pad.Y = 0

love.graphics.rectangle("fill", pad.X, pad.Y, pad.largeur, pad.hauteur)

bonjour a tous du coup j’ai rajouter de la couleur et du son pour finir mon casse brick sa fonctionne Nikel j’aimerai juste trouver le moyen de faire des cassade de couleur dans les briques

[Code source supprimé – Ne pas poster le projet complet SVP]

Bonjour ! est-ce que si je retire la ligne pad.y = hauteur – (pad.hauteur / 2) et que je met ma hauteur a moi dans le pad.x et pad.y ça va quand même marcher pour la suite du cours?

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.