implémentation logique du jeu + règles dans le README
17
README.md
@@ -39,3 +39,20 @@ npm run build
|
||||
```sh
|
||||
npm run lint
|
||||
```
|
||||
|
||||
## Fonctionnement du jeu
|
||||
|
||||
case appuis :
|
||||
-> case découverte X
|
||||
->bombe ? X
|
||||
->game over X
|
||||
->while casevide ? X
|
||||
-> découverte case vide X
|
||||
->etc... X
|
||||
-> case numéro ? X
|
||||
->découverte case numéro
|
||||
->end
|
||||
-> case numéro ? X
|
||||
->découverte case numéro
|
||||
->end
|
||||
|
||||
|
||||
BIN
src/assets/square_1.png
Normal file
|
After Width: | Height: | Size: 169 B |
BIN
src/assets/square_2.png
Normal file
|
After Width: | Height: | Size: 179 B |
BIN
src/assets/square_3.png
Normal file
|
After Width: | Height: | Size: 173 B |
BIN
src/assets/square_4.png
Normal file
|
After Width: | Height: | Size: 163 B |
BIN
src/assets/square_5.png
Normal file
|
After Width: | Height: | Size: 162 B |
BIN
src/assets/square_6.png
Normal file
|
After Width: | Height: | Size: 173 B |
BIN
src/assets/square_7.png
Normal file
|
After Width: | Height: | Size: 160 B |
BIN
src/assets/square_8.png
Normal file
|
After Width: | Height: | Size: 181 B |
BIN
src/assets/square_Empty.png
Normal file
|
After Width: | Height: | Size: 117 B |
BIN
src/assets/square_Exploded.png
Normal file
|
After Width: | Height: | Size: 184 B |
BIN
src/assets/square_Flag.png
Normal file
|
After Width: | Height: | Size: 221 B |
BIN
src/assets/square_FlagWrong.png
Normal file
|
After Width: | Height: | Size: 232 B |
BIN
src/assets/square_Mine.png
Normal file
|
After Width: | Height: | Size: 195 B |
BIN
src/assets/square_Question.png
Normal file
|
After Width: | Height: | Size: 131 B |
BIN
src/assets/square_Smiley.png
Normal file
|
After Width: | Height: | Size: 702 B |
BIN
src/assets/square_Unknown.png
Normal file
|
After Width: | Height: | Size: 141 B |
36
src/utils/game.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
const directions: number[] = [-11, -10, -9, -1, 1, 9, 10, 11]; // directions possibles pour découvrir les cases
|
||||
const champDeMines: number[] = []; // champ de mines (0 = case vide, 10 = bombe, 1 à 8 = nombre de bombes adjacentes)
|
||||
for (let i = 0; i < 100; i++) {champDeMines.push(0);} // initialisation des cases à 0
|
||||
const casesDecouvertes: number[] = []; // cases découvertes (0 = case non découverte, 1 = case découverte, 2 = case flag)
|
||||
for (let i = 0; i < 100; i++) {casesDecouvertes.push(0);} // initialisation des cases à 0
|
||||
|
||||
function bombe(): void { // fonction bombe (game over)
|
||||
for (let i = 0; i < casesDecouvertes.length; i++) {casesDecouvertes[i] = 1;}
|
||||
}
|
||||
|
||||
function caseVide(indice: number): void { // fonction caseVide (découverte des cases adjacentes à une case vide)
|
||||
for (let i = 0; i < directions.length; i++) { // parcours des directions
|
||||
if (champDeMines[indice + directions[i]] !== 0) {decouvreCase(indice + directions[i]); return; } // si la case est un numéro, on ne fait rien
|
||||
else if (casesDecouvertes[indice + directions[i]] === 2) {decouvreCase(indice + directions[i]); return;} // si la case est un drapeau, on ne fait rien
|
||||
else {decouvreCase(indice + directions[i]); caseVide(indice + directions[i]);} // si la case est vide, on va dans la fonction caseVide
|
||||
}
|
||||
}
|
||||
|
||||
function decouvreCase(indice: number): void { // fonction decouvreCase (découverte d'une case)
|
||||
casesDecouvertes[indice] = 1; // modification dans le tableau des cases découvertes
|
||||
}
|
||||
|
||||
function flagCase(indice: number): void { // fonction flagCase (flag d'une case)
|
||||
casesDecouvertes[indice] = 2; // modification dans le tableau des cases découvertes
|
||||
}
|
||||
|
||||
function cliqueGauche(indice: number): void { // fonction main (début du jeu)
|
||||
if (champDeMines[indice] === 10) {bombe();} // si la case cliquée est une bombe, on va dans la fonction bombe
|
||||
else if (champDeMines[indice] === 0) {caseVide(indice);} // si la case cliquée est vide, on va dans la fonction caseVide
|
||||
else if (champDeMines[indice] !== 0) {decouvreCase(indice);} // si la case cliquée est un numéro, on va dans la fonction decouvreCase
|
||||
decouvreCase(indice);
|
||||
}
|
||||
|
||||
function cliqueDroite(indice: number): void { // fonction cliqueDroite (flag d'une case)
|
||||
flagCase(indice);
|
||||
}
|
||||