1 Description générale du projet
1.1 Objectif
L'objectif du projet est de concevoir et de réaliser un jeu de hasard dénommé
Rapido. Un serveur effectue un tirage aléatoire de nombres toutes les 5
minutes, et maintient la liste des tirages effectués dans la journée. Un joueur
(client) connecté au serveur par nc, peut participer au jeu, consulter
les tirages effectués depuis le matin, et/ou vérifier ses gains à l'aide d'un reçu.
1.2 Description du jeu
1.2.1 Tirages du jeu
Les tirages du Rapido sont effectués par un serveur informatique, par
désignation au hasard de 8 numéros différents parmi 20 numéros possibles
chiffrés de 1 à 20 (grille A) et de 1 numéro parmi 4 numéros possibles chiffrés
de 1 à 4 (grille B). Environ 250 tirages sont réalisés chaque jour. Les
résultats des tirages de la journée sont stockés sur le serveur et sont, au fur
et à mesure, affichés à l'écran du serveur. Les joueurs peuvent, à tout moment
de la journée, consulter les tirages précédemment effectués.
1.2.2 Prises de jeu et mises
Un joueur peut participer à un ou plusieurs tirage(s), soit en utilisant un
bulletin de prise de jeu, soit en ayant recours au système Flash de génération
aléatoire de combinaisons.
Si le joueur choisit la prise de jeu par bulletin, il doit renseigner lui-même
les grilles A et B. Il doit donc indiquer 8 numéros parmi 20 dans la grille A,
et de 1 à 4 numéro(s) dans la grille B. Au contraire, si le joueur choisit le
système Flash, les numéros sont tirés au hasard par le serveur. Dans ce cas, il
doit indiquer au serveur le nombre de numéros à tirer dans B.
Dans les deux cas de prise de jeu, le joueur doit également choisir le nombre
total de tirages auxquels il participe à compter du prochain tirage, et la mise
par tirage. Pour chaque numéro choisi dans la grille B, la mise par tirage est,
au choix du joueur, de 1 euro, 2 euros, 3 euros, 5 euros ou 10 euros. Par
conséquent, si le joueur choisit 2, 3 ou 4 numéros dans B le montant de la mise
est multipliée respectivement par 2, 3 ou 4. D'autre part, le nombre de tirages
choisi ne doit pas dépasser le nombre de tirages restant à effectuer jusqu'à la
fin de la journée.
1.2.3 Reçus de jeu
Après enregistrement d'un jeu, pris par bulletin ou par Flash, un reçu est
renvoyé au joueur. Le reçu contient notamment : le type de prise de jeu
(bulletin ou Flash), les numéros de la grille A, le(s) numéro(s) de la grille
B, le nombre de tirages auxquels participe le joueur, le numéro de tirage de
debut, la mise par tirage, la mise totale, la date et le numéro du reçu. Le
joueur peut interroger le serveur pour vérifier ses gains par simple
communication de l'identifiant du reçu.
1.2.4 Calcul de gains
Suivant la somme d'argent misée et les numéros trouvés dans A et B pour un
tirage donné, différents rangs de lots gagnants sont définis dans le tableau
ci-dessous. La dernière colonne du tableau indique le facteur par lequel on
multiplie la mise pour trouver le gain du joueur. Par exemple, si pour un
tirage donné, 7 numéros sont trouvés dans A et le (seul) numéro choisi dans B
est trouvé (ligne correspondant au rang 3), le lot pour une mise respectivement
de 1 euro, 2 euros, 3 euros, 5 euros et 10 euros, est de 150 euros, 300 euros,
450 euros, 750 euros et 1500 euros.
| Rang |
Bons numéros dans A |
Bons numéros dans B |
Facteur multiplicatif |
| 1 |
8 |
1 |
10000 |
| 2 |
8 |
0 |
1000 |
| 3 |
7 |
1 |
150 |
| 4 |
7 |
0 |
50 |
| 5 |
6 |
1 |
30 |
| 6 |
6 |
0 |
10 |
| 7 |
5 |
1 |
6 |
| 8 |
5 |
0 |
2 |
| 9 |
4 |
1 |
1 |
1.3 Espérance de gain
Pour votre culture mathématique et pour vérifier que la Française des jeux ne laisse
pas grand chose au hasard, on va faire une étude statistique de l'espérance de gain
au Rapido. Dans la suite de la sous-section on ne considère que le cas d'un numéro
coché dans la grille B; les cas avec plusieurs numéros cochés dans la grille B
revenant à jouer plusieurs bulletins. L'espérance est calculée pour chaque rang :
-
Cas des 8 numéros trouvés avec le complémentaire :
- Cas des 8 numéros trouvés sans le complémentaire :
- Cas des 7 numéros trouvés avec le complémentaire :
(pour avoir 7 numéros gagnants, il faut tirer 7 numéros parmi les 8 numéros
gagnants et 1 numéro parmi les 12 numéros non gagnants)
- Cas des 7 numéros trouvés sans le complémentaire :
- Cas des 6 numéros trouvés avec le complémentaire :
- Cas des 6 numéros trouvés sans le complémentaire :
- Cas des 5 numéros trouvés avec le complémentaire :
- Cas des 5 numéros trouvés sans le complémentaire :
- Cas des 4 numéros trouvés avec le complémentaire :
En faisant la somme des espérances de gain par rang on trouve quelque
chose comme : E = 0.6592045723.
En conclusion, l'espérance de gain est d'environ 2/3; un joueur
perd donc en moyenne 1/3 du montant de sa mise par tirage.
1.4 L'architecture de l'application
L'application est constituée d'un processus serveur multithreadé et d'un processus gérant. Le
serveur et le gérant communiquent par IPC, les joueurs se connectent au serveur par nc.
1.5 Les requêtes du client
Un client, ayant obtenu une connexion par nc <host> <port> peut émettre les
requêtes suivantes au serveur :
-
afficher_regles_du_jeu : afficher les règles du jeu Rapido.
- jouer_un_flash <nB> <nbT> <mise> : jouer en utilisant le système Flash.
Les arguments <nB>, <nbT> et <mise> désignent respectivement
le nombre de numéros choisis dans la grille B, le nombre de tirages auxquels
le joueur participe à compter du prochain tirage et la mise par tirage.
Le joueur doit recevoir un reçu de type Flash.
- jouer_un_bulletin <nbT> <mise> <numeros_grilleA> <numeros_grilleB> :
jouer en utilisant un bulletin de prises de jeu. Les arguments <nbT>,
<mise>, <numeros_grilleA> et <numeros_grilleB> désignent
respectivement le nombre de tirages auxquels le joueur participe à compter
du prochain tirage, la mise par tirage, 8 numéros choisis dans la grille A
et un ou plusieurs numéros choisis dans la grille B. Le joueur doit recevoir
un reçu de type bulletin.
- consulter_tirages : consulter les tirages de la journée effectués
précédemment. Pour chaque tirage, le serveur renvoit le numéro du tirage,
les 8 numéros de la grille A et le numéro de la grille B.
- verifier_recu <id_recu> : vérifier ses gains en donnant l'identifiant
<id_recu> d'un reçu.
- quitter : quitter le jeu en se déconnectant.
1.6 Le serveur
Le processus serveur tourne en tâche de fond. Il doit pouvoir traiter les
demandes de connexion des joueurs et les requêtes des joueurs connectés. Pour
cela, il lance un thread "tirages" qui effectuera les tirages. Il lance
également un thread "joueur" pour chaque connexion sur son port d'écoute,
chargé de traiter les requêtes du joueur connecté.
1.7 Le processus gérant
Le processus gérant a pour rôle de "superviser" le jeu. Il permet à un
administrateur d'envoyer des requêtes au serveur pour "espionner" les prises de
jeu, pour déconnecter un joueur, etc. La communication entre le gérant et le
serveur est basée sur le mécanisme d'IPC.