Some fixes + first draft of Chakart (just thoughts for now)
[vchess.git] / client / src / variants / Chakart.js
1 import { ChessRules } from "@/base_rules";
2
3 export class ChakartRules extends ChessRules {
4 // NOTE: getBasicMove, ajouter les bonus à vanish array
5 // + déterminer leur effet (si cavalier) ou case (si banane ou bombe)
6 // (L'effet doit être caché au joueur : devrait être OK)
7 //
8 // Saut possible par dessus bonus ou champis mais pas bananes ou bombes
9
10 // FEN : immobilized (pas flag), castle flags + flags peach (power used?)
11 // "pièces" supplémentaires : bananes, bombes, champis, bonus --> + couleur ?
12 // (Semble mieux sans couleur => couleur spéciale indiquant que c'est pas jouable)
13 // (Attention: pas jouables cf. getPotentialMoves...)
14
15 setOtherVariables(fen) {
16 super.setOtherVariables(fen);
17 this.subTurn = 1;
18 }
19
20 getPotentialMovesFrom([x, y]) {
21 // TODO: bananes et bombes limitent les déplacements (agissent comme un mur "capturable")
22 // bananes jaunes et rouges ?! (agissant sur une seule couleur ?) --> mauvaise idée.
23 if (this.subTurn == 2) {
24 // TODO: coup compatible avec firstMove
25 }
26 }
27
28 getPotentialPawnMoves(sq) {
29 //Toad: pion
30 // laisse sur sa case de départ un champi turbo permettant à Peach d'aller
31 // une case plus loin, et aux pièces arrivant sur cette case de sauter par
32 // dessus une pièce immédiatement adjacente (en atterissant juste derrière).
33 }
34
35 // Coups en 2 temps (si pose)
36 getPotentialRookMoves(sq) {
37 //Donkey : tour
38 // pose une banane (optionnel) sur une case adjacente (diagonale) à celle d'arrivée
39 // Si une pièce arrive sur la peau de banane, alors elle effectue un déplacement
40 // aléatoire d'une (2?) case (vertical ou horizontal) depuis sa position finale.
41 }
42
43 // Coups en 2 temps (si pose)
44 getPotentialBishopMoves([x, y]) {
45 //Wario: fou
46 // pose une bombe (optionnel) sur une case orthogonalement adjacente à la case d'arrivée
47 // Si une pièce arrive sur une bombe, alors elle effectue un déplacement diagonal
48 // aléatoire d'une (2?) case depuis sa position finale (juste une case si impossible).
49 }
50
51 getPotentialKnightMoves([x, y]) {
52 //Yoshi: cavalier
53 // laisse sur sa case de départ un bonus aléatoire
54 // (NOTE: certains bonus pourraient ne pas être applicables ==> pion bloqué par exemple)
55 // - i) roi boo(*E*) : échange avec n'importe quelle pièce (choix du joueur, type et/ou couleur différents)
56 // à condition que la position résultante ne soit pas un auto-échec
57 // - i*) koopa(*B*) : ramène sur la case initiale
58 // - ii) toadette(*R*) : permet de poser une pièce capturée sur le plateau
59 // (n'importe où sauf 8eme rangée pour les pions)
60 // - ii*) chomp(*W*) : mange la pièce ; si c'est Peach, c'est perdu
61 // - iii) daisy(*T*) : permet de rejouer un coup avec la même pièce --> cumulable si ensuite coup sur bonus Daisy.
62 // - iii*) bowser(*M*) : immobilise la pièce (marquée jaune/rouge), qui ne pourra pas jouer au tour suivant
63 // - iv) luigi(*L*) : fait changer de camp une pièce adverse (aléatoire ?) (sauf le roi)
64 // - iv*) waluigi(*D*) : fait changer de camp une de nos pièces (aléatoire ?) (sauf le roi)
65 // --> i, ii, iii en deux temps (subTurn 1 & 2)
66 // iii* : indication dans FEN (immobilized)
67 }
68
69 getPotentialQueenMoves(sq) {
70 //Mario: dame
71 // pouvoir "casquette ailée" (à chaque coup?) : peut sauter par dessus n'importe quelle pièce (une seule), sans la capturer.
72 }
73
74 getPotentialKingMoves(sq) {
75 //Peach: roi
76 // Carapace rouge (disons ^^) jouable une seule fois dans la partie,
77 // au lieu de se déplacer. Capture un ennemi au choix parmi les plus proches,
78 // à condition qu'ils soient visible (suivant les directions de déplacement d'une dame).
79 // Profite des accélérateurs posés par les pions (+ 1 case : obligatoire).
80 }
81
82 play(move) {
83 // TODO: subTurn passe à 2 si potentiellement pose (tour, fou) ou si choix (reconnaître i (ok), ii (ok) et iii (si coup normal + pas immobilisé) ?)
84 // voire +2 si plusieurs daisy...
85 }
86
87 undo(move) {
88 // TODO: reconnaissance inverse si subTurn == 1 --> juste impossible ==> marquer pendant play (comme DoubleMove1 : move.turn = ...)
89 }
90
91 //atLeastOneMove() should be OK
92
93 getCurrentScore() {
94 //TODO: But = capturer la princesse adverse. Variante : but = la princesse arrive de l'autre côté de l'échiquier.
95 //==> On peut mixer ces deux conditions : arriver au bout du plateau ou capturer la princesse adverse.
96 return '*';
97 }
98
99 //Détails :
100 //Si une pièce pose quelque chose sur une case ça remplace ce qui y était déjà.
101 //Pas de condition de pat, puisque l'objectif est la capture de la reine :)
102 };