Note 12/20
Architecture OK Les prises de pierres ne marchent pas bien L'interface IPlayer n'est pas comprise : une seule méthode comme getCoup aurait suffit ! L'utilisation de getPlayerType() ruine le polymoprhisme
- KACI Said
- CHEVILY Pierre
- MAATOUGUI Nassim
- BOUGAMZA Sofiane
- SPRINT 1 : les commandes showboard, quit, boardsize
- SPRINT 2 : play
- SPRINT 3 : faire une IA qui joue aléatoirement
- Une commande privée à choisir, comme :
- player black random
- player white human
La capture des pierres ne fonctionne pas entièrement, la faute à la fonction getNbLiberties, qui ne va pas assez loin dans la récursivité : une pierre peut demander à ses plus proches voisins combien de libertés ils ont, mais ne va pas jusqu'aux voisins de ses voisins. La capture fonctionne donc pour les chaînes de longueur 2, mais peut présenter des dysfonctionnements pour les longueurs supérieures.
Capture des pierres ennemies presque impossible quand il y a IA contre IA du fait que l'IA ne joue pas si, aux coordonnées où elle compte jouer, la pièce aurait potentiellement 0 liberté même si c'est pour capturer une autre pierre ensuite.
- Nous avons choisi qu'un joueur restait le même au cours d'une partie, et que, par conséquent, on ne pouvait pas le redéfinir.
- En ce qui concerne l'IA, nous la faisons jouer aléatoirement sur une case libre du goban. Une partie IA vs IA s'arrêtera dès lors qu'une IA ne peut plus jouer.
- La longueur du plateau est de 19 par défaut, comme la version la plus commune du jeu de go.
- Comme dans la version classique du jeu de go, les joueurs noirs sont les premiers à jouer.
- boardsize
- placePiece
- isSuicide
- definePlayers
- AIvsAI (simule une partie entre deux IA)
- boardsize
- clear_board
- placePiece
- playCaptureWithoutChains (utiliser la commande play et capturer une pierre qui n'appartient pas à une chaîne)
- playCaptureWithChainsBS4 (utiliser la commande play et capturer des pierres qui appartiennent à une même chaîne, le goban est de taille 4)
- playCaptureWithChainsBS5 (utiliser la commande play et capturer des pierres qui appartiennent à une même chaîne, le goban est de taille 5)
- getNbLibertiesWithoutChains (utiliser la commande getNbLiberties pour une pierre n'appartenant pas à une chaîne)
- getNbLibertiesChainBS5 (utiliser la commande getNbLiberties pour une pierre appartenant à une chaîne, le goban est de taille 5)
- getNbLiberties (test donné par M.Ziane)
- player (définition des joueurs)
- playerWhiteAI
- playerBlackAI
Capture pour IA vs IA presque impossible à cause d'isSuicide qui ne prend pas en compte une possible capture.
Nous avons réussi à implémenter toutes les fonctions demandées. De plus, nous avons implémenté la méthode isSuicide, pour que l'IA ne joue pas vraiment au hasard et ait un minimum d'intelligence dans ses coups. Le code est documenté et lisible.
Il faut améliorer la capture des pions en changeant la fonction getNbLiberties. Il aurait pû être intéressant de coder une IA plus intelligente, ce qui n'était pas demandé, mais qui aurait ajouté plus de compétition pour les parties IA vs humain.
Après le sprint 1, nous nous sommes tout de suite aperçus qu'il était extrêmement redondant de réécrire les mêmes méthodes à chaque fois qu'on lançait le Main.
Nous avons choisi de réaliser une multitude de tests, que vous pourrez retrouver dans le dossier /tests. Cela nous a permis de vérifier au fur et à mesure nos erreurs, les comparer aux résultats attendus, utiliser le débogueur, etc.
! Diagramme d'architecture du projet
2 boardsize
?1
Doit afficher
?2 invalid command
Penser à afficher le score de chaque camp
boardsize 0
=6
?6
Ne pas afficher le =6 et mettre un message d'erreur (invalid number/integer)
Penser à définir un packetage go et un packetage ihm
ajouter la prise et la maj du score