Skip to content

Commit

Permalink
feat: hints content
Browse files Browse the repository at this point in the history
  • Loading branch information
SidonieBouthors committed Sep 5, 2024
1 parent 434156e commit 9a9d320
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 15 deletions.
105 changes: 95 additions & 10 deletions app/src/pages/hints.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,41 +51,51 @@ export default function Hints() {

<p>
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.
</p>

<h3>Dame</h3>

<p>
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.
</p>

<h2>Prise</h2>

<p>
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.
</p>

<h3>Pion</h3>

<p>
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.
<br />
Le pion peut continuer à prendre des pièces adverses en enchainant les
sauts tant que c'est possible (rafle, voir plus loin).
</p>

<h3>Dame</h3>

<p>
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.
<br />
Elle peut continuer à prendre des pièces adverses en enchainant les
sauts tant que c'est possible (rafle, voir plus loin).
</p>

<h2>Rafle</h2>

<p>
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.
<br />
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.
Expand All @@ -96,9 +106,84 @@ export default function Hints() {
possibles, le joueur peut choisir laquelle jouer.
</p>

<h2>Fin de partie</h2>

<p>
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).
</p>

<h2>Approche pour le code</h2>

<p>
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.
</p>

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

<p>
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.
</p>

<p>
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)
</p>

<h3>Coups Possibles (Pion)</h3>

<CodeSwitcher
codeSnippets={{
[SubmissionLanguage.Java]: "test code java",
[SubmissionLanguage.Java]: `
static List<MoveWithTaken> calculateManRegularMoves(Board board, int x, int y) {
List<MoveWithTaken> 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<MoveWithTaken> calculateManTakeMoves(Board board, Piece piece, int x, int y) {
List<MoveWithTaken> 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",
}}
Expand Down
16 changes: 11 additions & 5 deletions app/src/styles/_base.scss
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
Expand All @@ -271,6 +275,8 @@ main {
width: 100%;
background-color: #1e1e1e;
border-radius: var(--border-radius);

overflow-x: auto;
}

.code-lang-select {
Expand All @@ -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;
Expand Down

0 comments on commit 9a9d320

Please sign in to comment.