Le Bowling

Le Bowling est un programme que j'ai développé en language C#, je vais ici vous le présenter en language pseudo algorithmique afin de simplifier la compréhension de celui-ci. Sachez que cet algorithme a été primordial pour réalisé ce projet.


Il prend en charge une partie de jeu complète d'un joueur. C'est à dire 9 séries de 2 lancés, et une ultime série de 2 ou 3 lancés en fonction des résultats précédent du joueur.




Les régles du programme



Au bowling, on cumul à chaque série de lancés (noté de R1 à R10) le résultat de la série précédente avec le résultat de la série en cours de réalisation. Chaque série est composé de deux lancés sauf la série 10 qui peut dans certains cas donner lieu à un troisième lancé. Chaque boule tirée sera noté dans un tableau en fonction de si elle est la première ou la deuxième pour une série donnée.

Par exemple : le seconde lancé de la série 5 sera noté S5T2.

Un tableau de booléens en 2 dimensions gère les strikes et les spares que le joueur va faire durant la partie. Il s'agit d'un tableau composé de 2 lignes et de 2 colonnes, la première ligne compte les strikes et la seconde les spares. Toutes les cases du tableau sont initialisées à "false"

exemple: Si le joueur fait un strike à la seconde série et un spare à la quatrième, les cases du tableau indéxées au positions [1;2] et [2;4] prendront la valeur "true"

Comment compter les points au bowling ?




Fonctionnement du programme



Pour que vous compreniez le fonctionnement de mon programme je vais vous le présenter en language pseudo algorithmique, de la série 3 à 5. D'abors nous admettrons que les deux premières séries n'ont donné lieu à aucun stricke ni aucun spare.
Nous obtenons donc la situation suivante :




STRIKE


Nous allons déclencher un strike au lancé 1 de la série 3 pour comprendre comment ceui-ci sera calculé.

voici le code qui calculera ce lancé :





Puisque le joueur effectue un strike (un lancé à 10 points) le partie bleu du code s'exécute. La Variable S3T1 prend donc la valeur 10, et la variable S3T2 prend la valeur "X" pour signifier qu'il y a eu un strike (et donc qu'il n'y aura pas de deuxième lancée sur cette série). De plus, dans notre tableau booléen la variable indéxée à la position [1;3] prend la variable "true".

La partie rouge du code calcule si la série précédent à donné lieu à un strike ou un spare, ce n'est pas le cas donc elle ne s'exécute pas.

Il faut savoir que lorsqu'un strike est effectué, les résultats des deux lancés suivants seront ajoutés au résultat de la série ou a eu lieu se même strike. Le résultat de la série 3 (R3) sera donc donné lorsque nous aurons les résultats des lancés de la série 4.




SPARE




"Pour faciliter et réduire cette explication nous admettrons que le joueur a fait tomber 6 quilles au lancé S4T1."



Au lancé S4T2 la joueur fera tombé 4 quilles. Voici le code qui va calculer cette situation :





Les conditions A et C se déclenchent car elles sont remplies. Alors que les conditions B, D et E ne se déclenchent pas car elles ne sont pas remplies :

- A : Le joueur a réalisé un spare (cumul des 2 lancés = 10), donc le code s'exécute ici.
- B : La condition A étant remplie le code ne s'exécute pas ici (car il s'agit d'une condition "SINON").
- C : Le joueur a fait un spare suivit d'un strike, donc cette condition s'exécute.
- D : La condition C étant remplie le code ne s'exécute pas ici (car il s'agit d'une condition "SINON").
- E : Cette portion de code s'exécute seulement si la série en cours ne donne pas lieu à un spare.


Durant l'exécution du code de ce dernier lancé la variable du tableau booléen indéxée à la position [2;4] a pris la valeur "true". Voici donc les résultats après le lancé S4T2 :
Cependant il ne faut pas oublier que lorsqu'un spare est effectué, le résultat du lancé suivant sera ajouté au résultat de la série ou a eu lieu se même spare. Cette règle est prise en compte grâce à la condition suivante dans le code du lancé 1 de la série 5 :




Ici la portion de code en bleu s'exécute et permet d'additionner le résultat de la série 4 (R4) avec le premier lancé de la série 5 (S5T1).

Les deux autres portions en rouge ne s'exécutent pas car les conditions de son pas remplies.