Bonjour à tous,
Dans le code ci-dessous concernant un petit jeu de dés, si lors d'un tirage le joueur tombe sur un "1" alors il doit céder son tour, j'ai donc tenté de réattribuer la valeur "joueurActif" (calculscores.js...remplirScoreCourant() Ligne 36) et s'en suit un return de ladite variable pour l'exploiter/actualiser dans les autres fonctions... Or la variable ne change pas comme elle le devrait dans la fonction "btnRoll" mais si dans la fonction "remplirScoreCourant"... Ce qui fait que le numéro de joueur actif n'est pas actualisé interdisant la permutation de tour de joueur...
En dehors de ce problème le code fonctionne parfaitement...
Merci d'avance pour vos lumières
Pour résumer :
La fonction remplirScoreCourant() contenue dans calculScores.js est sensée retourner le nouveau joueur actif si le tirage donne un "1" et mettre à jour la variable globale "joueurActif" (valeur 1 ou 2) cependant, cette mise à jour ne se fait pas et lorsque le prochain joueur désigné appuie sur le btnRoll (main.js) grâce au console.log je peux voir que joueurActif n'a malheureusement pas changé de valeur ou bien l'on m'indique que joueurActif est read-only ...
J'ai tout essayé, notamment de laisser remplirScoreCourant sans paramètre, plus rien ne se passe...
Je ne sais donc pas ce que je fais de mal, tout marchait bien jusqu'à ce que je décide de fractionner le code sur plusieurs pages...
La mutation se fait bien dans 'remplirScoreCourant' contenue dans calculScores.js mais pas lorsque lon l'appelle depuis btnRoll...
J'ai l'impression que cela à voir avec l'exportation de la variable joueurActif qui ne se fait pas dans les deux sens... J'ai tenté de l'importer aussi dans main.js: cela bloque en disant qu'elle est déjà importée...
Code fonctionnel à la date :
main.js :
calculScores.js :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 import Joueur from "./classes/Joueur.js"; import { tirage } from "./functions/tirages.js"; import { angleArray, btnHold, btnNewGame, btnRoll, checkHistorique, divHistorique, divScoreCourantJ1, divScoreCourantJ2, divScoreTotalJ1, divScoreTotalJ2, } from "./constants.js"; import { calculScoresTotaux, afficherHistorique, currentJ1, currentJ2, historique, remplirScoreCourant } from "./functions/calculScores.js"; export var joueurActif; //Initialisation des variables des 2 joueurs export const j1 = new Joueur(1, 0, 0); export const j2 = new Joueur(2, 0, 0); //Au démarrage de la page window.onload = () => { barreInfo.innerHTML = `<h4>Appuyer sur le bouton "nouvelle partie" pour commencer</h4>`; btnHold.classList.add("disabled"); btnRoll.classList.add("disabled"); checkHistorique.checked = false; }; //Détermine qui est le premier joueur par aléatoire function premierJoueur() { joueurActif = Math.floor(Math.random() * 2) + 1; barreInfo.innerHTML = `<h4>Le joueur ${joueurActif} commence la partie</h4>`; return joueurActif; } const initialiser = () => { //Obtenir un premier joueur de façon aléatoire premierJoueur(); //Mise à zéro des champs et tableaux currentJ1.length = 0; currentJ2.length = 0; historique.length = 0; divScoreCourantJ1.textContent = 0; divScoreTotalJ1.textContent = 0; divScoreCourantJ2.textContent = 0; divScoreTotalJ2.textContent = 0; }; btnNewGame.addEventListener("click", () => { //Nouvelle partie initialiser(); btnRoll.classList.remove("disabled"); console.log("Joueur actif depuis btnNewGame = " + joueurActif); }); //Lancement du dé btnRoll.addEventListener("click", () => { btnHold.classList.remove("disabled"); tirage(); remplirScoreCourant(joueurActif); console.log("Joueur actif depuis bouton btnRoll = " + joueurActif); //Si l'option est sélectionnée l'historique de // la partie est affiché if (checkHistorique.checked === true) { divHistorique.style.display = "block"; afficherHistorique(); } else { divHistorique.style.display = "none"; } });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 import {resultatTirage} from "./tirages.js"; import { divScoreCourantJ1, divScoreCourantJ2, divScoreTotalJ1, divScoreTotalJ2, btnHold, btnRoll, divHistorique, } from "../constants.js"; import {j1, j2} from "../main.js"; //historique de la partie export const historique = []; export const currentJ1 = []; export const currentJ2 = []; var scoreCourantJ1 = 0; var scoreCourantJ2 = 0; var scoreTotalJ1 = 0; var scoreTotalJ2 = 0; export const remplirScoreCourant = (joueurActif) => { //console.log(joueurActif+' '+resultatTirage) //Si l'un des joueurs tire un "1" alors il perd son score courant if (joueurActif === 1 && resultatTirage === 1) { j1.setScoreCourant(0); //vidage tableau de score courant currentJ1.length = 0; divScoreCourantJ1.textContent = 0; barreInfo.innerHTML = `Le joueur 1 cède son tour avec un total provisoire de ${scoreTotalJ1} points, doit obtenir ${ 100 - scoreTotalJ1 } pour gagner.`; joueurActif = 2 console.log("Joueur actif depuis remplirScoreCourant : "+joueurActif) //return joueurActif } if (joueurActif === 2 && resultatTirage === 1) { j2.setScoreCourant(0); //vidage tableau de score courant currentJ2.length = 0; divScoreCourantJ2.textContent = 0; barreInfo.innerHTML = `Le joueur 2 cède son tour avec un total provisoire de ${scoreTotalJ2} points, doit obtenir ${ 100 - scoreTotalJ2 } pour gagner.`; joueurActif = 1; console.log("Joueur actif depuis remplirScoreCourant : " + joueurActif); return joueurActif; } if (joueurActif === 1 && resultatTirage > 1) { currentJ1.push(resultatTirage); scoreCourantJ1 = currentJ1.reduce((a, b) => a + b, 0); divScoreCourantJ1.textContent = scoreCourantJ1; j1.setScoreCourant(scoreCourantJ1); barreInfo.innerHTML = `Le joueur 1 a tiré un ${resultatTirage}.`; console.log("score courant J1 = " + j1.getScoreCourant()); } if (joueurActif === 2 && resultatTirage > 1) { currentJ2.push(resultatTirage); scoreCourantJ2 = currentJ2.reduce((a, b) => a + b, 0); j2.setScoreCourant(scoreCourantJ2); divScoreCourantJ2.textContent = scoreCourantJ2; barreInfo.innerHTML = `Le joueur 2 a tiré un ${resultatTirage}.`; console.log("score courant J2 = " + j2.getScoreCourant()); } }; export const afficherHistorique = () => { //On inverse le tableau d'historique const rows = historique.reverse().map((row) => { return `<p>${row}</p>`; }); divHistorique.innerHTML = rows.join(""); }; export const calculScoresTotaux = (joueurActif) => { // const calculJ1 = scoreCourantJ1 + scoreTotalJ1 // const calculJ2 = scoreCourantJ2 + scoreTotalJ2 // //Calcul score total du joueur 1 tant qu'inférieur à 100 // if (joueurActif == 1 && calculJ1 < 100) { // scoreTotalJ1 += scoreCourantJ1 // divScoreTotalJ1.textContent = scoreTotalJ1 // divScoreCourantJ1.textContent = 0 // currentJ1.length = 0 // joueurActif = 2 // return joueurActif // } // //Si joueur 1 obtient 100 points il gagne // if (joueurActif == 1 && calculJ1 == 100) { // alert("Le joueur 1 a gagné la partie") // btnHold.disabled = true // btnRoll.disabled = true // } // //Calcul score total du joueur 2 tant qu'inférieur à 100 // if (joueurActif == 2 && calculJ2 < 100) { // scoreTotalJ2 += scoreCourantJ2 // divScoreTotalJ2.textContent = scoreTotalJ2 // divScoreCourantJ2.textContent = 0 // currentJ2.length = 0 // joueurActif = 1 // return joueurActif // } // if (joueurActif == 2 && calculJ2 == 100) { // alert("Le joueur 2 a gagné la partie") // btnHold.disabled = true // btnRoll.disabled = true // } };
Partager