2
2
// Auteur : LEBET Esteban
3
3
// Classe : CID2A
4
4
// Date : 07.11.2023
5
+ // Description : Fichier principal qui gére affiche et gère le snake
6
+ // Lieu : ETML, Sébeillon
5
7
8
+ // Importation des classes nécessaires depuis les fichiers externes
6
9
import { Apple } from "./apple.js" ;
7
10
import { Snake } from "./snake.js" ;
8
11
12
+ // Constantes définissant des éléments du jeu
9
13
const gameBoard = document . querySelector ( "#gameBoard" ) ;
10
- // const boxShadow = document.querySelector("#gameBoard").style["boxShadow"] = "0 0 200px #99999";
11
14
const ctx = gameBoard . getContext ( "2d" ) ;
12
15
const scoreText = document . querySelector ( "#scoreText" ) ;
13
16
const resetBtn = document . querySelector ( "#resetBtn" ) ;
14
- const startBtn = document . querySelector ( "#startBtn" ) ;
15
17
const gameWidth = gameBoard . width ;
16
18
const gameHeight = gameBoard . height ;
17
19
const boardBackground = "#add8c1" ;
18
20
const snakeColor = "#273608" ;
19
21
const snakeBorder = "#add8c1" ;
20
22
const unitSize = 25 ;
23
+
24
+ // Variables de jeu
21
25
let score = 0 ;
22
26
let running = false ;
23
27
@@ -27,11 +31,14 @@ const apple = new Apple(unitSize, gameWidth, gameHeight);
27
31
// Instance de Snake avec la référence à Apple, la couleur du serpent, la bordure du serpent, et scoreText
28
32
const snake = new Snake ( unitSize , apple , snakeColor , snakeBorder , score , scoreText ) ;
29
33
34
+ // Référence le les touches du claviers et le click de la souris pour le bouton RESET
30
35
window . addEventListener ( "keydown" , snake . changeDirection . bind ( snake ) ) ;
31
36
resetBtn . addEventListener ( "click" , resetGame ) ;
32
37
38
+ // Fonction principale pour démarrer le jeu
33
39
gameStart ( ) ;
34
40
41
+ // Initialisation du jeu
35
42
function gameStart ( ) {
36
43
running = true ;
37
44
scoreText . textContent = "SCORE : " + score ;
@@ -40,6 +47,7 @@ function gameStart() {
40
47
nextTick ( ) ;
41
48
}
42
49
50
+ // Fonction récursive permettant de mettre à jour le jeu à des intervalles prédéfinis
43
51
function nextTick ( ) {
44
52
if ( running ) {
45
53
setTimeout ( ( ) => {
@@ -49,39 +57,45 @@ function nextTick() {
49
57
snake . drawSnake ( ctx ) ;
50
58
checkGameOver ( ) ;
51
59
nextTick ( ) ;
52
- } , 75 ) ;
60
+ } , 75 ) ; // Vitesse du jeu, 1000 = 1s ; 100 = 0.1s
53
61
} else {
54
62
displayGameOver ( ) ;
55
63
}
56
64
}
57
65
66
+ // Effacer le contenu du gameboard
58
67
function clearBoard ( ) {
59
68
ctx . fillStyle = boardBackground ;
60
69
ctx . fillRect ( 0 , 0 , gameWidth , gameHeight ) ;
61
70
}
62
71
72
+ // Vérifier les conditions de fin de jeu
63
73
function checkGameOver ( ) {
64
- switch ( true ) {
65
- case snake . snake [ 0 ] . x < 0 :
66
- case snake . snake [ 0 ] . x >= gameWidth :
67
- case snake . snake [ 0 ] . y < 0 :
68
- case snake . snake [ 0 ] . y >= gameHeight :
69
- case snake . checkCollision ( ) :
70
- running = false ;
71
- break ;
74
+ if (
75
+ snake . snake [ 0 ] . x < 0 || // Si la tête du serpent dépasse le bord gauche du gameboard
76
+ snake . snake [ 0 ] . x >= gameWidth || // Si la tête du serpent dépasse le bord droit du gameboard
77
+ snake . snake [ 0 ] . y < 0 || // Si la tête du serpent dépasse le bord supérieur du gameboard
78
+ snake . snake [ 0 ] . y >= gameHeight || // Si la tête du serpent dépasse le bord inférieur du gameboard
79
+ snake . checkCollision ( ) // Si le serpent entre en collision avec lui-même
80
+
81
+ ) {
82
+ // Si l'une des conditions ci-dessus est vraie, le jeu est arrêté
83
+ running = false ;
72
84
}
73
85
}
74
86
87
+ // Afficher l'écran de fin de jeu
75
88
function displayGameOver ( ) {
76
89
clearBoard ( ) ;
77
90
ctx . font = "70px 'NokiaFont', sans-serif" ;
78
91
ctx . fillStyle = "#273608" ;
79
92
ctx . textAlign = "center" ;
80
- ctx . fillText ( "GAME" , gameWidth / 2 , gameHeight / 3 ) ;
81
- ctx . fillText ( "OVER" , gameWidth / 2 , gameHeight / 2 ) ;
93
+ ctx . fillText ( "GAME" , gameWidth / 2 , gameHeight / 2.4 ) ;
94
+ ctx . fillText ( "OVER" , gameWidth / 2 , gameHeight / 1.6 ) ;
82
95
running = false ;
83
96
}
84
97
98
+ // Réinitialiser le jeu
85
99
function resetGame ( ) {
86
100
score = 0 ;
87
101
snake . resetSnake ( ) ;
0 commit comments