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 :

Image non disponible

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 :

Image non disponible

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.

Image non disponible

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 :

Image non disponible

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.

Image non disponible

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) :

Déclaration des variables Haut1 et Droit1
Sélectionnez
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) :

Gestion du déplacement de la balle
Sélectionnez
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

Image non disponible

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