From 9a9d3207c7b2548292a281ddbe410063d75e0500 Mon Sep 17 00:00:00 2001 From: Sidonie Bouthors Date: Thu, 5 Sep 2024 14:17:32 +0200 Subject: [PATCH] feat: hints content --- app/src/pages/hints.tsx | 105 ++++++++++++++++++++++++++++++++++---- app/src/styles/_base.scss | 16 ++++-- 2 files changed, 106 insertions(+), 15 deletions(-) diff --git a/app/src/pages/hints.tsx b/app/src/pages/hints.tsx index e2f5cf3..c4a0bf0 100644 --- a/app/src/pages/hints.tsx +++ b/app/src/pages/hints.tsx @@ -51,41 +51,51 @@ export default function Hints() {

Un pion peut se déplacer en diagonale de 1 case vers l'avant (vers le - camp adverse) si la case est vide. + camp adverse) si la case d'arrivée est vide.

Dame

- Une dame peut se déplacer en diagonale dans toutes les directions + Une dame peut se déplacer en diagonale dans n'importe quelle direction jusqu'à rencontrer une autre pièce ou le bord du plateau.

Prise

+

+ Une prise est un déplacement qui prend une pièce adverse. Une prise + est prioritaire sur un déplacement simple : si une prise est possible, + elle doit être effectuée plutôt qu'un déplacement. +

+

Pion

Un pion peut prendre une pièce adverse adjacente (en diagonale) en - sautant par dessus elle si la case derrière est vide. Il peut - continuer à prendre des pièces adverses en enchainant les sauts tant - que c'est possible (rafle, voir plus loin). + sautant par dessus elle si la case derrière est vide. Contrairement au + déplacement simple, une prise peut être faite dans n'import quelle + direction. +
+ Le pion peut continuer à prendre des pièces adverses en enchainant les + sauts tant que c'est possible (rafle, voir plus loin).

Dame

Une dame peut prendre une pièce adverse (même non adjacente) en - sautant par dessus elle si la case derrière est vide. Elle peut - continuer à prendre des pièces adverses en enchainant les sauts tant - que c'est possible (rafle, voir plus loin). + sautant par dessus elle si la case derrière est vide. +
+ Elle peut continuer à prendre des pièces adverses en enchainant les + sauts tant que c'est possible (rafle, voir plus loin).

Rafle

Une rafle est une série de prises effectuées par une seule pièce (pion - ou dame) sans interruption. + ou dame) sans interruption, en un seul tour.
Une rafle est obligatoire si elle est possible, et doit être effectuée avec la pièce qui permet de prendre le plus de pièces adverses. @@ -96,9 +106,84 @@ export default function Hints() { possibles, le joueur peut choisir laquelle jouer.

+

Fin de partie

+ +

+ La partie est gagnée par le joueur qui a pris tous les pions de son + adversaire ou qui a bloqué tous les pions adverses (plus de coups + possibles). +

+ +

Approche pour le code

+ +

+ Pour implémenter votre IA, vous devrez écrire une fonction qui prend + en paramètre le plateau de jeu et le joueur actuel, et qui retourne le + coup à jouer. +

+ +

+ Vous pouvez commencer par écrire une fonction qui retourne tous les + coups possibles pour une pièce donnée. +

+ +

+ Ensuite, vous pouvez écrire une fonction qui retourne tous les coups + possibles pour un joueur donné, en trouvant les coups pour chacune des + pièces du joueur, puis en prenant en compte les coups prioritaires et + les rafles. +

+ +

+ Enfin, vous pouvez écrire une fonction qui retourne le meilleur coup + possible pour un joueur donné (ou dans un premier temps, un des cousp + possibles) +

+ +

Coups Possibles (Pion)

+ calculateManRegularMoves(Board board, int x, int y) { + List moves = new ArrayList<>(); + int[][] directions = { {-1, -1}, {1, -1} }; + + for (int[] dir : directions) { + int newX = x + dir[0]; + int newY = y + dir[1]; + + if (isWithinBoard(newX, newY, board) && board.getPiece(newX, newY) == null) { + moves.add(new MoveWithTaken(newX, newY, null)); + } + } + + return moves; +} + +static List calculateManTakeMoves(Board board, Piece piece, int x, int y) { + List moves = new ArrayList<>(); + int[][] directions = { {-1, -1}, {1, -1}, {-1, 1}, {1, 1} }; + + for (int[] dir : directions) { + int takenX = x + dir[0]; + int takenY = y + dir[1]; + int newX = x + 2 * dir[0]; + int newY = y + 2 * dir[1]; + + if (isWithinBoard(newX, newY, board)) { + Piece takenCell = board.getPiece(takenX, takenY); + Piece newCell = board.getPiece(newX, newY); + + if (takenCell != null && !takenCell.player.equals(piece.player) && newCell == null) { + moves.add(new MoveWithTaken(newX, newY, new Position(takenX, takenY))); + } + } + } + + return moves; +} + `, [SubmissionLanguage.Cpp]: "test code cpp", [SubmissionLanguage.Python]: "test code python", }} diff --git a/app/src/styles/_base.scss b/app/src/styles/_base.scss index 4704b93..b1e26fc 100644 --- a/app/src/styles/_base.scss +++ b/app/src/styles/_base.scss @@ -79,12 +79,17 @@ main { margin-bottom: 2em; h2 { + margin-top: 0.8em; + margin-bottom: 0.3em; + } + + h3 { margin-top: 1em; - margin-bottom: .5em; + margin-bottom: 0.5em; } p { - margin: .5em 0; + margin: 0.5em 0; } .note { @@ -258,11 +263,10 @@ main { } .code-switcher { - display: flex; flex-direction: column; align-items: end; - margin: .5em 0; + margin: 0.5em 0; .code-zone { font-family: var(--font-mono); @@ -271,6 +275,8 @@ main { width: 100%; background-color: #1e1e1e; border-radius: var(--border-radius); + + overflow-x: auto; } .code-lang-select { @@ -281,7 +287,7 @@ main { font-size: 0.9rem; padding: 0.2rem 0.5rem; - margin: 0 .5em; + margin: 0 0.5em; border-radius: var(--border-radius) var(--border-radius) 0 0; border: 3px solid var(--foreground-color); border-bottom: none;