Skip to content

Commit f61906f

Browse files
authored
Add files via upload
0 parents  commit f61906f

File tree

8 files changed

+4471
-0
lines changed

8 files changed

+4471
-0
lines changed

assets/icon.ico

49.2 KB
Binary file not shown.

game.js

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
const { getRandomWord } = require('./words.js');
2+
3+
let chosenWord = "";
4+
let displayWord = [];
5+
let attempts = 10;
6+
let errors = 0;
7+
let attemptedLetters = [];
8+
9+
// Références DOM
10+
let wordDisplay, message, attemptedLettersDisplay, canvas, ctx, restartButton;
11+
12+
// Fonction pour obtenir un mot aléatoire
13+
async function initGame() {
14+
await restartGame(); // Initialiser le jeu
15+
}
16+
17+
// Fonction de redémarrage
18+
async function restartGame() {
19+
// Réinitialisez toutes les variables nécessaires
20+
chosenWord = await getRandomWord();
21+
displayWord = "_".repeat(chosenWord.length).split("");
22+
attemptedLetters = [];
23+
attempts = 10;
24+
errors = 0; // Réinitialiser le nombre d'erreurs
25+
26+
// Récupération des éléments DOM
27+
wordDisplay = document.getElementById('word-display');
28+
message = document.getElementById('message');
29+
attemptedLettersDisplay = document.getElementById('attempted-letters');
30+
canvas = document.getElementById('hangman-canvas');
31+
ctx = canvas.getContext("2d");
32+
restartButton = document.getElementById('restart-button');
33+
34+
// Effacement complet de l'affichage
35+
wordDisplay.textContent = displayWord.join(" ");
36+
attemptedLettersDisplay.textContent = "";
37+
message.textContent = `Essais restants : ${attempts}`;
38+
restartButton.style.display = "none"; // Masquer le bouton de redémarrage
39+
ctx.clearRect(0, 0, canvas.width, canvas.height); // Effacer le canvas
40+
41+
// Écouteur pour les événements de clavier
42+
document.removeEventListener("keydown", guessLetter); // Retirer l'écouteur précédent
43+
document.addEventListener("keydown", guessLetter); // Ajouter un nouvel écouteur
44+
}
45+
46+
function guessLetter(event) {
47+
const letter = event.key.toLowerCase();
48+
if (!/^[a-z]$/.test(letter) || attemptedLetters.includes(letter) || !chosenWord) return;
49+
50+
attemptedLetters.push(letter);
51+
attemptedLettersDisplay.textContent = attemptedLetters.join(", ");
52+
53+
if (chosenWord.includes(letter)) {
54+
chosenWord.split("").forEach((char, index) => {
55+
if (char === letter) displayWord[index] = letter;
56+
});
57+
wordDisplay.textContent = displayWord.join(" ");
58+
if (!displayWord.includes("_")) {
59+
message.textContent = "Vous avez gagné !";
60+
document.removeEventListener("keydown", guessLetter);
61+
restartButton.style.display = "block"; // Afficher le bouton de redémarrage
62+
displayFireworks(); // Afficher les feux d'artifice
63+
}
64+
} else {
65+
errors++;
66+
drawHangman(errors); // Dessine la prochaine partie du pendu
67+
attempts--;
68+
message.textContent = `Essais restants : ${attempts}`;
69+
if (attempts === 0) {
70+
message.textContent = "Vous avez perdu ! Le mot était : " + chosenWord;
71+
document.removeEventListener("keydown", guessLetter);
72+
restartButton.style.display = "block"; // Afficher le bouton de redémarrage
73+
displayBlood(); // Afficher le sang qui coule
74+
}
75+
}
76+
}
77+
78+
// Fonction pour afficher les feux d'artifice
79+
function displayFireworks() {
80+
const fireworkContainer = document.createElement('div');
81+
fireworkContainer.classList.add('firework-container');
82+
document.body.appendChild(fireworkContainer);
83+
84+
for (let i = 0; i < 10; i++) {
85+
const firework = document.createElement('div');
86+
firework.classList.add('firework');
87+
firework.style.top = `${Math.random() * 100}%`;
88+
firework.style.left = `${Math.random() * 100}%`;
89+
fireworkContainer.appendChild(firework);
90+
}
91+
92+
setTimeout(() => fireworkContainer.remove(), 3000); // Retirer les feux d'artifice après 3 secondes
93+
}
94+
95+
// Fonction pour afficher le sang qui coule
96+
function displayBlood() {
97+
const blood = document.createElement('div');
98+
blood.classList.add('blood');
99+
document.body.appendChild(blood);
100+
101+
setTimeout(() => blood.remove(), 5000); // Retirer le sang après 5 secondes
102+
}
103+
// Fonction pour dessiner le pendu
104+
function drawHangman(stage) {
105+
ctx.clearRect(0, 0, canvas.width, canvas.height); // Efface le canvas avant de redessiner
106+
ctx.lineWidth = 2;
107+
ctx.strokeStyle = "#ff1a1a";
108+
switch (stage) {
109+
case 1: ctx.moveTo(20, 230); ctx.lineTo(180, 230); ctx.stroke(); break; // Base
110+
case 2: ctx.moveTo(50, 230); ctx.lineTo(50, 20); ctx.stroke(); break; // Poteau
111+
case 3: ctx.moveTo(50, 20); ctx.lineTo(150, 20); ctx.stroke(); break; // Bras
112+
case 4: ctx.moveTo(150, 20); ctx.lineTo(150, 50); ctx.stroke(); break; // Corde
113+
case 5: ctx.arc(150, 70, 20, 0, Math.PI * 2, true); ctx.stroke(); break; // Tête
114+
case 6: ctx.moveTo(150, 90); ctx.lineTo(150, 150); ctx.stroke(); break; // Corps
115+
case 7: ctx.moveTo(150, 110); ctx.lineTo(120, 130); ctx.stroke(); break; // Bras gauche
116+
case 8: ctx.moveTo(150, 110); ctx.lineTo(180, 130); ctx.stroke(); break; // Bras droit
117+
case 9: ctx.moveTo(150, 150); ctx.lineTo(120, 190); ctx.stroke(); break; // Jambe gauche
118+
case 10: ctx.moveTo(150, 150); ctx.lineTo(180, 190); ctx.stroke(); break; // Jambe droite
119+
}
120+
}
121+
122+
// Sélectionnez le bouton et ajoutez l'événement click
123+
document.getElementById('restart-button').addEventListener('click', () => {
124+
location.reload(); // Recharger la page
125+
});
126+
127+
// Initialisation du jeu
128+
document.addEventListener('DOMContentLoaded', initGame);

index.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<!DOCTYPE html>
2+
<html lang="fr">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Jeu du Pendu</title>
7+
<link rel="stylesheet" href="style.css">
8+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval';">
9+
</head>
10+
<body>
11+
<div id="game-container">
12+
<h1>Jeu du Pendu</h1>
13+
<canvas id="hangman-canvas" width="200" height="250"></canvas>
14+
<p id="word-display">_ _ _ _ _</p>
15+
<p id="message"></p>
16+
<div id="attempted-letters-container">
17+
<h3>Lettres essayées :</h3>
18+
<p id="attempted-letters"></p>
19+
</div>
20+
<button id="restart-button" style="display: none;">Recommencer le jeu</button> <!-- Bouton pour recommencer -->
21+
</div>
22+
<script src="game.js"></script>
23+
</body>
24+
</html>

main.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const { app, BrowserWindow, Menu } = require('electron');
2+
3+
function createWindow() {
4+
const win = new BrowserWindow({
5+
width: 800,
6+
height: 900,
7+
webPreferences: {
8+
nodeIntegration: true,
9+
contextIsolation: false // IMPORTANT: ne pas utiliser en production
10+
}
11+
});
12+
13+
win.loadFile('index.html');
14+
15+
// Méthode 1: Utiliser setMenuBarVisibility
16+
win.setMenuBarVisibility(false);
17+
18+
// Méthode 2: Définir le menu de l'application à null
19+
// Menu.setApplicationMenu(null);
20+
}
21+
22+
app.whenReady().then(createWindow);
23+
24+
app.on('window-all-closed', () => {
25+
if (process.platform !== 'darwin') {
26+
app.quit();
27+
}
28+
});
29+
30+
app.on('activate', () => {
31+
if (BrowserWindow.getAllWindows().length === 0) {
32+
createWindow();
33+
}
34+
});

0 commit comments

Comments
 (0)