Skip to content

Commit 05e8ae3

Browse files
committed
Comments and documentation
- Comments added on the three js files - Docmentation added in "src" - Little reorganization of the project
1 parent 2d44765 commit 05e8ae3

File tree

3 files changed

+61
-21
lines changed

3 files changed

+61
-21
lines changed

js/apple.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1+
// Projet : P_Bulles_Snake-PCX
2+
// Auteur : LEBET Esteban
3+
// Classe : CID2A
4+
// Date : 07.11.2023
5+
// Description : Fichier qui fait apparaître des pommes aléatoirement et les dessine
6+
// Lieu : ETML, Sébeillon
7+
8+
// Classe représentant la pomme du jeu
19
export class Apple {
210
constructor(unitSize, gameWidth, gameHeight) {
11+
// Propriétés de la pomme
312
this.unitSize = unitSize;
413
this.gameWidth = gameWidth;
514
this.gameHeight = gameHeight;
@@ -8,6 +17,7 @@ export class Apple {
817
this.foodNumber = 0;
918
}
1019

20+
// Méthode pour créer une nouvelle position de la pomme de manière aléatoire
1121
createFood() {
1222
const randomFood = (min, max) => {
1323
const randNum = Math.round((Math.random() * (max - min) + min) / this.unitSize) * this.unitSize;
@@ -19,6 +29,7 @@ export class Apple {
1929
this.foodNumber += 1;
2030
}
2131

32+
// Méthode pour dessiner la pomme sur le gameboard
2233
drawFood(ctx) {
2334
let foodImage = new Image();
2435
foodImage.src = "images/grayishApplePixel.png";

js/main.js

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@
22
// Auteur : LEBET Esteban
33
// Classe : CID2A
44
// Date : 07.11.2023
5+
// Description : Fichier principal qui gére affiche et gère le snake
6+
// Lieu : ETML, Sébeillon
57

8+
// Importation des classes nécessaires depuis les fichiers externes
69
import { Apple } from "./apple.js";
710
import { Snake } from "./snake.js";
811

12+
// Constantes définissant des éléments du jeu
913
const gameBoard = document.querySelector("#gameBoard");
10-
// const boxShadow = document.querySelector("#gameBoard").style["boxShadow"] = "0 0 200px #99999";
1114
const ctx = gameBoard.getContext("2d");
1215
const scoreText = document.querySelector("#scoreText");
1316
const resetBtn = document.querySelector("#resetBtn");
14-
const startBtn = document.querySelector("#startBtn");
1517
const gameWidth = gameBoard.width;
1618
const gameHeight = gameBoard.height;
1719
const boardBackground = "#add8c1";
1820
const snakeColor = "#273608";
1921
const snakeBorder = "#add8c1";
2022
const unitSize = 25;
23+
24+
// Variables de jeu
2125
let score = 0;
2226
let running = false;
2327

@@ -27,11 +31,14 @@ const apple = new Apple(unitSize, gameWidth, gameHeight);
2731
// Instance de Snake avec la référence à Apple, la couleur du serpent, la bordure du serpent, et scoreText
2832
const snake = new Snake(unitSize, apple, snakeColor, snakeBorder, score, scoreText);
2933

34+
// Référence le les touches du claviers et le click de la souris pour le bouton RESET
3035
window.addEventListener("keydown", snake.changeDirection.bind(snake));
3136
resetBtn.addEventListener("click", resetGame);
3237

38+
// Fonction principale pour démarrer le jeu
3339
gameStart();
3440

41+
// Initialisation du jeu
3542
function gameStart() {
3643
running = true;
3744
scoreText.textContent = "SCORE : " + score;
@@ -40,6 +47,7 @@ function gameStart() {
4047
nextTick();
4148
}
4249

50+
// Fonction récursive permettant de mettre à jour le jeu à des intervalles prédéfinis
4351
function nextTick() {
4452
if (running) {
4553
setTimeout(() => {
@@ -49,39 +57,45 @@ function nextTick() {
4957
snake.drawSnake(ctx);
5058
checkGameOver();
5159
nextTick();
52-
}, 75);
60+
}, 75); // Vitesse du jeu, 1000 = 1s ; 100 = 0.1s
5361
} else {
5462
displayGameOver();
5563
}
5664
}
5765

66+
// Effacer le contenu du gameboard
5867
function clearBoard() {
5968
ctx.fillStyle = boardBackground;
6069
ctx.fillRect(0, 0, gameWidth, gameHeight);
6170
}
6271

72+
// Vérifier les conditions de fin de jeu
6373
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;
7284
}
7385
}
7486

87+
// Afficher l'écran de fin de jeu
7588
function displayGameOver() {
7689
clearBoard();
7790
ctx.font = "70px 'NokiaFont', sans-serif";
7891
ctx.fillStyle = "#273608";
7992
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);
8295
running = false;
8396
}
8497

98+
// Réinitialiser le jeu
8599
function resetGame() {
86100
score = 0;
87101
snake.resetSnake();

js/snake.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1+
// Projet : P_Bulles_Snake-PCX
2+
// Auteur : LEBET Esteban
3+
// Classe : CID2A
4+
// Date : 07.11.2023
5+
// Description : Fichier géreant la taille du serpent, son mouvement, ses collisions et si il mange une pomme ou non
6+
// Lieu : ETML, Sébeillon
7+
8+
// Représente le serpent du jeu
19
export class Snake {
2-
constructor(unitSize, apple, snakeColor, snakeBorder, score, scoreText) {
10+
constructor(unitSize, apple, snakeColor, snakeBorder, score, scoreText) {
11+
// Propriétés du serpent
312
this.unitSize = unitSize;
413
this.xVelocity = unitSize;
514
this.yVelocity = 0;
@@ -10,10 +19,11 @@ export class Snake {
1019
this.apple = apple;
1120
this.snakeColor = snakeColor;
1221
this.snakeBorder = snakeBorder;
13-
this.score = score; // Ajout de la référence à score
22+
this.score = score; // Référence au score
1423
this.scoreText = scoreText;
1524
}
1625

26+
// Méthode pour déplacer le serpent
1727
moveSnake() {
1828
const head = {
1929
x: this.snake[0].x + this.xVelocity,
@@ -31,6 +41,7 @@ export class Snake {
3141
}
3242
}
3343

44+
// Méthode pour dessiner le serpent sur le gameboard
3445
drawSnake(ctx) {
3546
ctx.fillStyle = this.snakeColor;
3647
ctx.strokeStyle = this.snakeBorder;
@@ -40,12 +51,13 @@ export class Snake {
4051
});
4152
}
4253

54+
// Méthode pour changer la direction du serpent en fonction de la touche du clavier
4355
changeDirection(event) {
4456
const keyPressed = event.keyCode;
45-
const LEFT = 37;
46-
const UP = 38;
47-
const RIGHT = 39;
48-
const DOWN = 40;
57+
const LEFT = 37; // 37 = chiffre atribué à la touche flèche de gauche
58+
const UP = 38; // 38 = chiffre atribué à la touche flèche de haut
59+
const RIGHT = 39; // 39 = chiffre atribué à la touche flèche de droite
60+
const DOWN = 40; // 40 = chiffre atribué à la touche flèche du bas
4961

5062
const goingUp = this.yVelocity == -this.unitSize;
5163
const goingDown = this.yVelocity == this.unitSize;
@@ -72,6 +84,7 @@ export class Snake {
7284
}
7385
}
7486

87+
// Méthode pour vérifier si le serpent entre en collision avec lui-même
7588
checkCollision() {
7689
for (let i = 1; i < this.snake.length; i += 1) {
7790
if (this.snake[i].x == this.snake[0].x && this.snake[i].y == this.snake[0].y) {
@@ -81,10 +94,12 @@ export class Snake {
8194
return false;
8295
}
8396

97+
// Méthode pour réinitialiser le serpent
8498
resetSnake() {
85-
this.snake = [
99+
this.snake =
100+
[
86101
{ x: this.unitSize, y: 0 },
87-
{ x: 0, y: 0 }
102+
{ x: 0, y: 0 }
88103
];
89104
this.xVelocity = this.unitSize;
90105
this.yVelocity = 0;

0 commit comments

Comments
 (0)