Animer et créer un mini-jeu
Un dessin animé, c'est une suite d'images qui changent très vite. Avec une toile, une boucle et une pause, CoddyRun fait la même chose !
Le principe d'une animation
À chaque tour de boucle :
- on efface la toile ;
- on dessine la scène à sa nouvelle position ;
- on affiche la toile ;
- on fait une courte pause.
t est une toile
dimension(t, 400, 150)
x est un nombre vaut 0
tant que x < 400
effacer(t)
remplir(t, #0D1117)
cercle(t, x, 75, 20, #FFD43B)
affiche t
x ajoute 5
pause 30
fin tant que
affiche 'Fin de l’animation.'
pause 30 attend 30 millisecondes. La durée d'une pause va de 30 à 3000 millisecondes (pause 1000 = une seconde).
Rebondir sur les bords
Pour que la balle rebondisse, on lui donne une vitesse qui change de signe quand elle touche un bord :
t est une toile
dimension(t, 400, 200)
x est un nombre vaut 50
y est un nombre vaut 50
vx est un nombre vaut 4
vy est un nombre vaut 3
répète 300 fois
x ajoute vx
y ajoute vy
si x < 15 ou x > 385 alors
vx vaut -vx
fin si
si y < 15 ou y > 185 alors
vy vaut -vy
fin si
effacer(t)
remplir(t, #0D1117)
cercle(t, x, y, 15, #4DABF7)
affiche t
pause 30
fin répète
Question : Que fait la ligne vx vaut -vx quand la balle touche le bord droit ? — Elle inverse le sens horizontal : la balle repart vers la gauche. vx passe de 4 à -4 : à chaque tour, x diminue au lieu d'augmenter.
Réagir au clavier sans attendre
Dans un jeu, le programme doit continuer à tourner pendant que le joueur appuie sur les touches. Les fonctions touche_enfoncée et touche_pressée lisent l'état du clavier sans bloquer :
t est une toile
dimension(t, 300, 200)
x est un nombre vaut 140
tant que non touche_pressée('échap')
si touche_enfoncée('gauche') alors
x soustrait 6
fin si
si touche_enfoncée('droite') alors
x ajoute 6
fin si
x vaut limiter(x, 0, 280)
effacer(t)
remplir(t, #0D1117)
rectangle(t, x, 160, 20, 20, #4DABF7)
affiche t
pause 30
fin tant que
touche_enfoncée('gauche') est vrai tant que la flèche gauche est maintenue ;touche_pressée('échap') est vrai une fois par appui ;limiter(x, 0, 280) empêche le carré de sortir de la toile.
Pour la souris : souris_x(t) et souris_y(t) donnent sa position sur la toile, et souris_clic(t) devient vrai après un clic. Elles non plus ne bloquent pas le programme.
Un mini-jeu : attrape l'étoile
Rassemblons tout : déplace le panier avec les flèches pour attraper l'étoile qui tombe.
t est une toile
dimension(t, 300, 300)
panier est un nombre vaut 130
etoileX est un nombre vaut hasard(20, 280)
etoileY est un nombre vaut 0
points est un nombre vaut 0
ratees est un nombre vaut 0
tant que ratees < 3
si touche_enfoncée('gauche') alors
panier soustrait 8
fin si
si touche_enfoncée('droite') alors
panier ajoute 8
fin si
panier vaut limiter(panier, 0, 260)
etoileY ajoute 4
si etoileY >= 270 alors
si etoileX >= panier et etoileX <= panier + 40 alors
points ajoute 1
sinon
ratees ajoute 1
fin si
etoileY vaut 0
etoileX vaut hasard(20, 280)
fin si
effacer(t)
remplir(t, #0D1117)
cercle(t, etoileX, etoileY, 8, #FFD43B)
rectangle(t, panier, 275, 40, 12, #00BA7C)
label(t, 10, 20, 'Points : ' + points + ' Ratées : ' + ratees, #FFFFFF, 14)
affiche t
pause 30
fin tant que
affiche 'Partie terminée : ' + points + ' étoiles attrapées !'
Tu peux maintenant l'améliorer : accélérer la chute à chaque point, ajouter des vies, garder le meilleur score...
En résumé
- Une animation : effacer, dessiner, afficher, faire une pause, dans une boucle.
pause prend des millisecondes, entre 30 et 3000.- Une vitesse qui change de signe fait rebondir un objet.
touche_enfoncée, touche_pressée, souris_x, souris_clic lisent le clavier et la souris sans bloquer.