10-4
Algorithme principal
Nous
allons maintenant étudier l’algorithme principal du jeu, c’est à dire en gros
la liste des actions du jeu. Pour le détail des actions, celles-ci seront
étudiées dans les chapitres suivants. L’algorithme est le suivant :
Initialiser
le clavier
Charger
les images
Charger
les scores
Définir
les couleurs
Initialiser
les variables générales
Afficher
image d’intro + scores
Faire
Touche = demander touche()
Si touche = ‘q’ ou ‘Q’ faire
Sauver scores
Quitter()
Sinon si touche = ‘1’ faire
Initialiser coordonnées course 1
Afficher image 1
Sinon si touche = ‘2’ faire
Initialiser coordonnées course 2
Afficher image 2
Sinon si touche = ‘3’ faire
Initialiser coordonnées course 3
Afficher image 3
Fins Si
Tant
que touche = ‘’
Faire
Initialiser course si départ
Si chronomètre = actif faire
chronomètre = chronomètre + 1/50 sec
Fin si
Attendre synchro verticale
Si fond = actif faire
Restituer fond d’écran de la voiture
Fin si
Calculer adresses écran de la voiture
Mémoriser le fond d’écran de la voiture
Afficher la voiture + détection de collision
Afficher le chronomètre
Si collision = vrai
Afficher explosion pendant 1 sec
Vies = Vies – 1
Afficher Vies
Si Vies = 0
Afficher « perdu ! »
Retour à intro
Fin Si
Fin Si
Si coordonnées(grille) =
coordonnées(voiture)
Si angle voiture = angle de départ faire
TOUR = TOUR – 1
Si TOUR = 0 faire
Afficher « Gagné ! »
Si Chronomètre = meilleur temps course
courante
Afficher « Meilleur
temps ! »
Score courant = chronomètre
Retour à intro
Fin Si
Fin Si
Sinon faire
TOUR = TOUR + 1
Si TOUR = 9 faire
Afficher « perdu ! »
Retour à intro
Fin Si
Fin Si
Fin Si
Touche = analyse clavier + joystick
Si Touche = gauche faire
Angle = Angle – 1 modulo 8
Sinon si Touche = droite faire
Angle = Angle + 1 modulo 8
Sinon Si Touche = bas faire
Vitesse = vitesse – 1
Si Vitesse < 0 alors Vitesse = 0
Sinon Si Touche = haut faire
Vitesse = vitesse + 1
Si Vitesse > vitesse max alors Vitesse
= vitesse max
Fin Si
Si touche reconnue alors chronomètre = actif
Coordonnées = coordonnées + fonction(angle,
vitesse)
Tant
que()
On voit
ici que créer un jeu n’est pas une mince affaire. L’algorithme, bien que
simplifié, nous montre quand même qu’il y a un tas de paramètres à prendre ne
considération. Toutefois les actions sont assez linéaires, s’enchaînant les
unes après les autres. Donc quand on a la vision globale de ce qu’il y a à
faire, il suffit de prendre les actions une par une en rentrant dans les
détails à ce moment.
Tout d’abord,
le jeu commence par une initialisation qui consiste à charger les images et les
scores, à définir la répétition du clavier et les couleurs du jeu, puis à
afficher l’image d’intro avec les scores mis à jours.
Ensuite,
on attend une touche au clavier. Si c’est ‘q’ ou ‘Q’, on quitte le jeu en
sauvegardant les scores actuels. Sinon on initialise les coordonnées et l’angle
de la voiture en fonction du n° de la course. Car chose intéressante, il n’y a
pas 3 programmes pour les 3 courses, mais 1 programme avec un paramétrage en
fonction du n° de course.
L’initialisation
de la course consiste ensuite à mettre à jour les coordonnées de départ, ainsi
que diverses variables comme les états (voiture et chrono arrêté, pas d’obstacle). Quand la voiture se plante
dans le décors, c’est à cette initialisation qu’on revient, ce qui fait que la
voiture revient naturellement sur la grille de départ et que la partie peut
reprendre normalement.
Si le
chrono est actif (après l’appui d’une touche reconnue), il est incrémenté d’un
50ème de seconde mais en mémoire seulement. Son affichage interviendra ensuite
après celui de la voiture. Sa réinitialisation intervient juste avant l’affichage
de l’intro, dans l’initialisation générale des variables de la course. Quand la
voiture est placée sur la grille de départ, une variable indique que le chrono
est stoppé.
On passe
alors à l’affichage, mais avant on attend la synchro verticale VBL (voir Partie
9 pour plus de détails). Ensuite, si la voiture est affichée pour la première
fois, il n’y a rien dans la zone mémoire destinée à recopier le fond d’écran du
sprite. Dans ce cas, on passe directement à l’affichage de la voiture. Sinon on
restitue ce fond d’écran aux anciennes coordonnées de la voiture et on s’apprête
à dessiner celle-ci aux nouvelles coordonnées.
On calcule
ensuite les adresses écran de la voiture en fonction de ses coordonnées. Cela
regroupe l’adresse de la ligne écran, le n° de segment et le n° de pixel dans
le segment. Puis ensuite on établie une boucle qui dessine le sprite de la
voiture en réalisant 3 choses :
·
Mémorisation du fond de la voiture
·
Détection de collision sur les pixels visibles de la voiture
·
Dessin du sprite de la voiture avec recopie du fond sur les
pixels transparents.
On affiche
ensuite le chronomètre puis on regarde s’il y a eu collision avec le décors. Si
oui, on affiche une explosion pendant une seconde, puis on soustrait une vie. S’il
n’y a plus de vies, on affiche « perdu !» et on revient à l’écran d’intro
avec réinitialisation des variables. Sinon on revient à l’initialisation de la
course.
On regarde
ensuite si la voiture est en train de franchir la ligne. Mais par un drapeau on
attend qu’elle ait vraiment franchit la ligne. En effet, cette dernière fait 3
pixels de large à cause du fait que la voiture peut se déplacer de plusieurs
pixels à la fois. Si la voiture franchit la ligne dans le bon sens, on retire
un tour (sinon on en ajoute un). S’il n’y a plus de tours, c’est gagné. On
compare alors le temps réalisé au meilleur score de cette course. Si le temps
est inférieur, on affiche « meilleur temps » et on mémorise le
nouveau score.
Ensuite on
analyse l’état du clavier et du joystick, mais sans rien attendre. En effet, la
voiture peut continuer à avancer sans nouvelles commande. Sinon on ajuste les
paramètres d’angle et de vitesse en fonction de la commande. Et si une touche
est reconnue, le chrono est activé (s’il l’était déjà, il le reste)
Enfin, on
modifie la trajectoire de la voiture en fonction de l’angle et de la vitesse
actuelle, puis on reboucle.