top of page

Simulation de billard

 

Pico et Nano sont heureux de vous présenter un nouveau tutoriel  sur la programmation multi-tâches, en langage C et toujours avec la SDL !

 

MULTI-THREADING pour quoi ?

 

Pour quoi (en 2 mots), quelles applications nécessitent une architecture multi-tâches ?

 

Je vous propose d’étudier la chose à travers une application concrète : une simulation de jeu de billard. La nécessité d’une architecture multi-tâches part de la constatation suivante :

Sur l’écran et à l’échelle de mon ordinateur, la largeur du billard sera de 1200 pixels environ et le diamètre d’une boule de 27 pixels. Pour un jeu réaliste représentatif de la vitesse des boules : une boule peut traverser la largeur du billard en moins d’une demi seconde.

 

La vitesse de déplacement de la boule sur l’écran est donc de 2400 pixels/seconde. Pour gérer les collisions (contre les bandes et surtout entre les boules) il faut une précision minimale : sans chercher le « pixel perfect » il faut pouvoir détecter une collision avec une marge compatible avec le diamètre de la boule, disons de l’ordre de 3 pixels.

Dans ces conditions il faut pouvoir détecter les collisions dans un temps de 3/2400 c'est-à-dire de l’ordre de  1 ms. La boucle de détection de collision doit avoir une fréquence de 1000Hz !

 

Ceci est incompatible d’une boucle principale unique intégrant l’affichage comme présenté dans le tutoriel sur l’architecture : rien que le SDL_Flip() sur ma machine prend au moins 2 ms (SDL 1.2).

 

                              La SDL est performante certes mais pas pour du 1000 fps !

 

Il faut donc rechercher une autre architecture

 

L’idée est d’utiliser un 2eme thread parallèle dédié à l’affichage.   

 

                                                                                                 Sommaire                                                                                    Suivant  >

bottom of page