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.

 

 

<< RETOUR  ---  SUITE : Initialisation du jeu >>