Pour mon entraînement JavaScript, je suis en train de développer un petit jeu de cartes et j’essaie de ranger le gros du code js dans des bibliothèques.
J’ai une classe greenbaize (« tapis vert »), une classe seat (place) et une classe player (joueur). Les seat « possèdent » les players, c’est-à-dire, une propriété de la classe seat est player, qui prend des instances de la classe player. Les instances de la classe seat sont regroupées dans un array. Le tout est géré dans la classe greenbaize.
Voici à quoi ressemble la méthode init de greenbaize
Seat et position ce n’est pas la même chose. Un seat est associé à un joueur tout au long de la partie, c’est son siège. La position c’est en fonction du donneur (le dealer, le cut-off, la blinde, etc.), et change donc à chaque coup.
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 function init() { let positionsNames = getPositionsNames(seatscount); for (let i = 0; i < seatscount; i++) { let index = getRandomInt(0, population.length); let p = new player( population[index].name, population[index].type, population[index].activeFactor, population[index].agressionFactor); console.log(p.getName()); let s = new seat(i, positionsNames[i], p); seats.push(s); population.splice(index, 1); } seats.forEach(function (item) { console.log(item.getPositionName(), item.getPlayer().getName()); }) }
Donc, je fais une boucle d’autant d’itérations que de sièges occupés. J’instancie une classe seat autant de fois, et je l’ajoute à l’array des sièges. Jusqu’ici, tout va bien.
Le problème vient avec les joueurs. Diverses console.log() me permettent de dire qu’il y a bien un player distinct qui est créé à chaque itération, mais qu’il écrase le précédent sur toutes les instances seat.
A l’arrivée, j’ai bien un array d’objets seat distincts, mais l’attribut player de tous ces seat pointent vers une même instance de player.
Dans l’hypothèse où j’ai bien compris ce qui se passe.
Les deux console.log() du code donnent le résultat suivant :
Ce qu’il faudrait, évidemment, c’est qu’une nouvelle instance de player n’écrase pas les autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Molly Bloom Lily Candide James Bond Doyle Brunson Dealer Doyle Brunson Blind Doyle Brunson Middle Position Doyle Brunson Cut-off Doyle Brunson
Si vous avez une idée, je suis preneur.
Merci d’avance
Partager