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