Bonsoir,
En suivant le fil de l'un des topics du forum, je me suis amusé à coder une première version d'un jeu : Chess Game.
Ce code n'a pas de prétention, dans ce domaine il existe déjà des codes JS très aboutis (Chess.js avec Chessboard JS par exemple), c'est juste un exercice pour progresser dans le code. Pour l'instant il ne s'agit que de l'exposition de parties préjouées.
Donc, bien que cette première version fonctionne je pense qu'elle souffre d'un mauvais design : je me suis appuyé sur le HTML pour garder une trace de la position des pièces (avec des .getElementById). Dans le cas de parties préjouées ça fonctionnera pas trop mal, mais si je commence à calculer la validité d'un coup, ou d'autres choses du même type, ça va devenir compliqué (le calcul des positions où le roi se trouve en échec direct + en échec à la découverte c'est juste du délire). D'où l'idée de passer par un tableau, le HTML se contenterait alors de ne servir que d'interface. Ma première idée a été un tableau en deux dimensions :
Je me suis dit que les objets pouvaient être pertinent aussi :
Mais il me faut surtout quelque chose de pratique pour repérer non seulement les emplacements sur les cases mais gérer les déplacements... et si un tableau unidimensionnel suffisait ? Avec un simple indexOf() pour retrouver l'emplacement d'une pièce ? (alors oui, ici les identifiants des pièces ne sont pas uniques, mais dans la vraie vie ils le seraient) :
Les cases du tableau pourraient même dépasser de une unité sur les bords, ceci afin que les index correspondent à ceux du jeu ("11" serait "a1" et "88" serait "h8"), un changement de ligne serait un multiple de 10... Qu'en pensez-vous ? Je n'ai aucune expérience dans ce domaine.
PS : ici le code est en JavaScript, mais au final on se moque du langage, il s'agit d'une considération d'ordre générale, une question agnostique par rapport à un langage.
Modifié par Olivier C (18 Jun 2023 - 23:14)
En suivant le fil de l'un des topics du forum, je me suis amusé à coder une première version d'un jeu : Chess Game.
Ce code n'a pas de prétention, dans ce domaine il existe déjà des codes JS très aboutis (Chess.js avec Chessboard JS par exemple), c'est juste un exercice pour progresser dans le code. Pour l'instant il ne s'agit que de l'exposition de parties préjouées.
Donc, bien que cette première version fonctionne je pense qu'elle souffre d'un mauvais design : je me suis appuyé sur le HTML pour garder une trace de la position des pièces (avec des .getElementById). Dans le cas de parties préjouées ça fonctionnera pas trop mal, mais si je commence à calculer la validité d'un coup, ou d'autres choses du même type, ça va devenir compliqué (le calcul des positions où le roi se trouve en échec direct + en échec à la découverte c'est juste du délire). D'où l'idée de passer par un tableau, le HTML se contenterait alors de ne servir que d'interface. Ma première idée a été un tableau en deux dimensions :
const matrix = [
['br', 'bn', 'bb', 'bq', 'bk', 'bb', 'bn', 'br'],
['bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp'],
['', '', '', '', '', '', '', ''],
['', '', '', '', '', '', '', ''],
['', '', '', '', '', '', '', ''],
['', '', '', '', '', '', '', ''],
['wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp'],
['wr', 'wn', 'wb', 'wq', 'wk', 'wb', 'wn', 'wr']
]
Je me suis dit que les objets pouvaient être pertinent aussi :
const matrix = {
a8: 'br', b8: 'bn', c8: 'bb', d8: 'bq', e8: 'bk', f8: 'bb', g8: 'bn', h8: 'br',
a7: 'bp', b7: 'bp', c7: 'bp', d7: 'bp', e7: 'bp', f7: 'bp', g7: 'bp', h7: 'bp',
a6: '', b6: '', c6: '', d6: '', e6: '', f6: '', g6: '', h6: '',
a5: '', b5: '', c5: '', d5: '', e5: '', f5: '', g5: '', h5: '',
a4: '', b4: '', c4: '', d4: '', e4: '', f4: '', g4: '', h4: '',
a3: '', b3: '', c3: '', d3: '', e3: '', f3: '', g3: '', h3: '',
a2: 'wp', b2: 'wp', c2: 'wp', d2: 'wp', e2: 'wp', f2: 'wp', g2: 'wp', h2: 'wp',
a1: 'wr', b1: 'wn', c1: 'wb', d1: 'wq', e1: 'wk', f1: 'wb', g1: 'wn', h1: 'wr'
}
Mais il me faut surtout quelque chose de pratique pour repérer non seulement les emplacements sur les cases mais gérer les déplacements... et si un tableau unidimensionnel suffisait ? Avec un simple indexOf() pour retrouver l'emplacement d'une pièce ? (alors oui, ici les identifiants des pièces ne sont pas uniques, mais dans la vraie vie ils le seraient) :
const matrix = [
'br', 'bn', 'bb', 'bq', 'bk', 'bb', 'bn', 'br',
'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp',
'', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '',
'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp',
'wr', 'wn', 'wb', 'wq', 'wk', 'wb', 'wn', 'wr',
]
matrix.indexOf('wk') // => '74'
Les cases du tableau pourraient même dépasser de une unité sur les bords, ceci afin que les index correspondent à ceux du jeu ("11" serait "a1" et "88" serait "h8"), un changement de ligne serait un multiple de 10... Qu'en pensez-vous ? Je n'ai aucune expérience dans ce domaine.
PS : ici le code est en JavaScript, mais au final on se moque du langage, il s'agit d'une considération d'ordre générale, une question agnostique par rapport à un langage.
Modifié par Olivier C (18 Jun 2023 - 23:14)