Créer une fenêtre▲
Créer une nouvelle application sous Lazarus, en cliquant sur Fichier/Nouveau/Application.
Enregistrer votre application en cliquant sur Fichier/Enregistrer Tout, et choisir un nom de fichier pour l'application (balle.lpi) et un nom de fichier pour le code (unit_balle.pas).
Quelques informations sur la fenêtre de votre application :
Si le nom de la fenêtre est Form1, sa largeur s'obtient avec la propriété Form1.Width, sa hauteur s'obtient avec la propriété Form1.Height.
Créer une balle▲
Dans l'onglet Additional, choisir Tshape :
Dans la feuille Form1, dessiner un Tshape, qui apparaît rectangulaire.
Dans l'Inspecteur d'Objet, sélectionner l'objet Tshape (en haut de l'Inspecteur d'Objet) et changer sa propriété Shape en stCircle pour avoir un cercle.
Ouvrir la propriété Brush (cliquer sur le petit + figurant devant le mot Brush)
Régler la propriété de couleur en rouge : clRed
Régler les propriétés Height et Width à la même valeur (35, par exemple). Si le nom de la balle est Shape1, sa largeur s'obtient avec la propriété Shape1.Width, sa hauteur s'obtient avec la propriété Shape1.Height.
Insérer un Timer▲
Le Timer va servir à gérer automatiquement le déplacement de la balle sur l'écran.
Dans l'onglet System, choisir un TTimer et cliquer sur la fenêtre Form1, pour qu'il apparaisse.
Dans l'Inspecteur d'Objet, régler la propriété Interval du TTimer à 1 : le Timer va donc se déclencher toutes les millisecondes.
Votre fenêtre doit donc maintenant ressembler à cela :
Régler le déplacement de la balle▲
Pour déplacer la balle, chaque fois que le Timer s'activera (donc toutes les millisecondes), une procédure s'exécutera, qui gérera le déplacement de la balle.
Deux variables de type booléen géreront le sens de déplacement de la balle :
- Haut1 : si Haut1 contient vrai (true), on se déplace vers le haut, sinon (false) on se déplace vers le bas ;
- Droit1 : si Droit1 contient vrai (true), on se déplace à droite, sinon (false) on se déplace à gauche.
Rappel : la largeur de la fenêtre (nommée Form1) se situe dans la propriété Form1.Width, sa hauteur dans la propriété Form1.Height. L'origine de la fenêtre se situe en haut à gauche.
La balle dispose aussi de propriétés : si elle se nomme Shape1, sa largeur se situe dans la propriété Shape1.Width, sa hauteur dans la propriété Shape1.Height.
La coordonnée verticale du haut de la balle se situe dans la propriété Shape1.Top.
La coordonnée horizontale de la gauche de la balle se situe dans la propriété Shape1.Left.
Pour faire monter la balle, il faut donc diminuer la valeur située dans Shape1.Top, et l'augmenter pour faire descendre la balle.
Plus classiquement, pour déplacer la balle à droite, il faut augmenter la valeur située dans Shape1.Left, et la diminuer pour aller à gauche.
Dans un premier temps, déclarer les variables utilisées, dans la partie haute de l'Éditeur de source(le mot-clé var existe déjà, ainsi qu'une variable : il faut juste ajouter les deux variables à la suite de celle existante) :
Var {existe déjà dans l'Éditeur de source}
Form1: TForm1; {existe déjà dans l'Éditeur de source}
Droit1: Boolean;
Haut1: Boolean;
Ensuite, dans l'Inspecteur d'Objet, Sélectionner l'objet Timer et aller dans l'onglet Événement du Ttimer : cliquer sur les … de l'événement OnTimer.
Cela ouvre une procédure dans l'Éditeur de source.
Compléter la procédure comme indiqué ci-dessous (les commentaires sont en rouge) :
procedure TForm1.Timer1Timer(Sender: TObject);
begin
{Gestion du déplacement vertical de la balle}
if Haut1 = True then
Shape1.Top := Shape1.Top - 5
{Si haut vrai, on déplace la balle vers le haut (donc on décrémente la position du haut (Shape1.Top) de la balle)}
else
Shape1.Top := Shape1.Top + 5;
{Sinon on l'incrémente (déplacement de la balle vers le bas)}
{Gestion du déplacement horizontal de la balle}
if Droit1 = True then
Shape1.Left := Shape1.Left + 5
{Si droit vrai, on déplace la balle vers la droite (donc on incrémente la position de la gauche (Shape1.Left) de la balle)}
else
Shape1.Left := Shape1.Left - 5;
{Sinon on la décrémente (déplacement de la balle vers la gauche)}
{Gestion des collisions avec le haut de la fenêtre}
if Shape1.Top <= 0 then
Haut1 := False;
{Si le haut de la balle atteint la position zéro, on arrête de monter (donc on descend)}
{Gestion des collisions avec le haut de la fenêtre}
if Shape1.Top + Shape1.Height >= Form1.Height then
Haut1 := True;
{Si le haut de la balle (Shape1.Top) + la hauteur de la balle (Shape1.Height) atteint la hauteur de la fenêtre, on arrête de descendre (donc on monte)
{Gestion des collisions avec la gauche de la fenêtre}
if Shape1.Left <= 0 then
Droit1 := True;
{Si la gauche de la balle atteint la position zéro, on arrête de se déplacer à gauche (donc on va à droite)}
{Gestion des collisions avec la droite de la fenêtre}
if Shape1.Left + Shape1.Width >= Form1.Width then
Droit1 := False;
{Si la gauche de la balle + la largeur de la balle atteint la largeur de la fenêtre, on arrête de se déplacer à droite (donc on va à gauche)}
end;
Tester le programme en appuyant sur F9 !
Évolutions possibles▲
Il est possible de faire évoluer ce programme :
- ajouter d'autres balles (un simple copier/coller, avec modification des indices 1 en 2…) ;
- gérer la collision entre les balles (beaucoup plus difficile…).
Licence de ce document - Auteur▲
Ce tutoriel de création d'une balle bondissante sous Free Pascal / Lazarus est sous licence
Creative Commons BY SA
http://creativecommons.org/licenses/by-sa/3.0/deed.fr
Ce TP a été crée par Laurent DUBETTIER-GRENIER en Novembre 2013,
dans un but d'initiation à la programmation d'élèves de seconde.
Pour contacter l'auteur :
laurent[point]dubettier-grenier[arobase]ac-grenoble.fr






