
Le corps du programme : thread principal main()
Les bibliothèques :
SDL bien sur (1.2) et pour le multi-threading : pthread (n’oubliez pas le « Linker setting ») avec Windows.
Et un include d’une bibliothèque de fonctions perso.

Les principales variables :
Les variables communes au jeu et utilisées par de nombreuses fonctions seront déclarées en globales : gain de temps à l’exécution (temps machine de recopie d’arguments), facilité d’échange indirect d’informations entre les fonctions et gain de temps lors de la conception. Travaillant seul et sur de petits projets, je ne vois pas pourquoi je m’en priverais.
Bien sur, pour les fonctions l’aspect paramétrique est conservé et à chaque fois que cela a un intérêt et on utilisera évidement des arguments.
La gestion des boules de billard repose sur une structure « Boule » avec 3 instanciations pour le billard français.
Enfin il y a des variables particulières qui sont communes au 2 threads pour y accéder on passera par des MUTEX. Les portions de code entre le verrouillage et le déverrouillage d’un MUTEX sont minimisées autant que possible (pour ne pas faire attendre le thread concurrent).

En ligne 31 Time représente le temps:
cette variable est incrémentée à chaque boucle
En ligne 35 mouv va nous indiquer si au moins une boule est en mouvement
En ligne 45 la déclaration du thread 2 dédié à l'affichage
Et le MUTEX en ligne 47
Structure pour les 3 boules
les calculs de position et de vitesse se font avec des double
on distingue les composantes de vitesse instantanée et celles initiales obtenues au moment du choc
chaque boule a son indicateur de mouvement mouv
tdep enregistre l'instant de départ de chaque choc

Le corps du programme, les initialisations, la boucle principale et la fin du programme
Pour une bonne vision de l'architecture, chaque bloc est bien identifié, le code est découpé en de nombreuses fonctions très explicites cela permet de s'y retrouver facilement avec une excellente évolutivité et maintenabilité.
En ligne 203 : on lance le thread 2 dédié à l'affichage.
La fonction boucle() constitue toutes les tâches du thread principal :
- elle tourne à 1000 fps lorsque les boules sont en mouvement
- elle attend tout simplement les évènements dans le cas contraire
Les lignes 221 et 223 servent respectivement à verouiller puis déverrouiller le MUTEX lorsque l'on accéde aux variables partagées (par les 2 threads).

