140 lines
4.9 KiB
Markdown
140 lines
4.9 KiB
Markdown
# Projet - Désamorceur de bombes
|
||
|
||

|
||
|
||
## 1. Contexte
|
||
|
||
Ce jeu est une adaptation du jeu ___[Keep Talking and nobody explodes](https://keeptalkinggame.com/)___, de l'éditeur steelcrategames.com où l'objectif est de désamorcer une bombe en coupant le bon fil.
|
||
|
||
Cette adaptation a pour but de mettre en oeuvre les connaissances acquises en python, notamment les types construits, les boucles, les structures conditionnelles et les fonctions.
|
||
|
||
## 2. Description
|
||
|
||
### 2.1. Règles
|
||
|
||
- Une bombe peut contenir entre 3 et 6 fils.
|
||
- Seul un fil a besoin d'être coupé pour désarmer la bombe.
|
||
- Les fils sont ordonnés de haut en bas.
|
||
- A l'armement de la bombe, l'utilisateur est invité à indiquer l'indice du fil qu'il souhaite couper.
|
||
|
||
Les règles complètes de désamorçage sont décrites en annexe. Pour __3 fils__, les règles sont les suivantes
|
||
|
||
```txt
|
||
S'il n'y a pas de fil rouge, couper le deuxième fil.
|
||
Sinon, si le dernier fil est blanc, couper le dernier fil.
|
||
Sinon, s'il y a plus d'un fil bleu, couper le dernier fil bleu.
|
||
Sinon, couper le dernier fil.
|
||
```
|
||
|
||
### 2.2. Exemples
|
||
|
||
| Exemple | Explication |
|
||
| :--: | :-- |
|
||
|  | Le fil à couper est celui à l'indice 1, soit le deuxième fil.<br />La règle qui le justifie : il n'y a pas de fil rouge. |
|
||
|  | Le fil à couper est celui à l'indice 2, soit le dernier fil.<br />La règle qui le justifie : Toutes les règles ne sont pas satisfaites, c'est le dernier sinon qui s'applique. |
|
||
|
||
## 3. Consignes
|
||
|
||
Vous devez créer un module `desamorceur` qui va permettre de :
|
||
|
||
- créer une combinaison aléatoire de couleur pour $`n`$ fils,
|
||
- créer une bombe de $`n`$ fils,
|
||
- afficher une bombe,
|
||
- créer un numéro de série sur 8 chiffres,
|
||
- déterminer si le fil choisi désarme la bombe ou non,
|
||
- ... ainsi que d'autres fonctions nécessaires à l'implantation du jeu (Cf. Partie "Petit manuel du désamorceur de bombes").
|
||
|
||
L'algorithme principal est le suivant :
|
||
```python
|
||
bombe = creer_bombe(creer_combinaison(combinaison))
|
||
numero_serie = creer_numero_serie()
|
||
|
||
print(f"n°{numero_serie}")
|
||
|
||
afficher_bombe(bombe)
|
||
|
||
indice = input('Indice du fils à couper : ')
|
||
|
||
if est_bon_fil_a_couper(bombe, int(indice), numero_serie):
|
||
print('Sauvé !!!')
|
||
else:
|
||
print('Perdu, la bombe a explosé')
|
||
```
|
||
***N.B : Vous devez, pour chaque fonction y adjoindre les docstrings et doctests nécessaires***
|
||
|
||
Le module sera exécutable de la manière suivante :
|
||
|
||
> python3 desamorceur.py 4
|
||
|
||
où le 2ème paramètres correspond au nombre de fils de la bombe
|
||
|
||
## 4. Matériel fourni
|
||
|
||
Le module `paint` dispose de :
|
||
|
||
- 5 variables : `ROUGE, VERT, JAUNE, BLEU, BLANC`, qui permettent de matérialiser les couleurs des fils,
|
||
- d'une méthode `dessiner` qui permet d'afficher une matrice passée en paramètre.
|
||
|
||
<figure>
|
||
<center><img src='./assets/utilisation_paint.png'/></center>
|
||
<figcaption style='text-align:center;'>Fig 2. Exemple d'utilisation du module paint</figcaption>
|
||
</figure>
|
||
|
||
## 5. Rendu
|
||
|
||
- un script `desamorceur.py`,
|
||
- un fichier `README.md` qui présente vos choix de structures de données, les autres fonctions implantées..., ainsi qu'un extrait de codes ou le decriptif d'un problème rencontré et la solution mise en place.
|
||
|
||
## 6. Annexe - Petit manuel du désamorceur de bombes
|
||
|
||
Voici les règles pour désamorcer la bombe :
|
||
|
||
__3 fils__ :
|
||
|
||
S'il n'y a pas de fil rouge, couper le deuxième fil.
|
||
|
||
Sinon, si le dernier fil est blanc, couper le dernier fil.
|
||
|
||
Sinon, s'il y a plus d'un fil bleu, couper le dernier fil bleu.
|
||
|
||
Sinon, couper le dernier fil.
|
||
|
||
__4 fils__ :
|
||
|
||
S'il y a plus d'un fil rouge et si le dernier chiffre du numéro de série est impair, couper le dernier fil rouge.
|
||
|
||
Sinon, si le dernier fil est jaune et s'il n'y a pas de fil rouge, couper le premier fil.
|
||
|
||
Sinon, s'il y a exactement un fil bleu, couper le premier fil.
|
||
|
||
Sinon, s'il y a plus d'un fil jaune, couper le dernier fil.
|
||
|
||
Sinon, couper le deuxième fil.
|
||
|
||
__5 fils__ :
|
||
|
||
Si le dernier fil est vert et si le dernier chiffre du numéro de série est impair, couper le quatrième fil.
|
||
|
||
Sinon, s'il y a exactement un fil rouge et plus d'un fil jaune, couper le premier fil.
|
||
|
||
Sinon, s'il n'y a pas de fil vert, couper le deuxième fil.
|
||
|
||
Sinon, couper le premier fil.
|
||
|
||
__6 fils__ :
|
||
|
||
S'il n'y a pas de fil jaune et si le dernier chiffre du numéro de série est impair, couper le troisième fil.
|
||
|
||
Sinon, s'il y a exactement un fil jaune et plus d'un fil blanc, couper le quatrième fil.
|
||
|
||
Sinon, s'il n'y a pas de fil rouge, couper le dernier fil.
|
||
|
||
Sinon, couper le quatrième fil.
|
||
|
||
## 7. Pour aller plus loin
|
||
|
||
Dans le cas où les éléments du projet sont finalisés, vous pouvez le compléter avec les éléments suivants :
|
||
- En cas d'explosion de la bombe, afficher à l'utilisateur l'indice du fil qu'il fallait couper pour désarmer la bombe,
|
||
- Mettre en place un numéro de série alphanumérique, qui comporte au moins 1 chiffre qui n'est pas forcément en dernière position,
|
||
- Doter le projet d'une interface graphique, via le module `pygame`.
|