Advance on Janggi translation + fix initial setup moves
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 1 Jan 2021 18:20:56 +0000 (19:20 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 1 Jan 2021 18:20:56 +0000 (19:20 +0100)
client/src/translations/rules/Janggi/en.pug
client/src/translations/rules/Janggi/fr.pug
client/src/translations/rules/Xiangqi/fr.pug
client/src/variants/Janggi.js

index 5c3d09c..99c2f08 100644 (file)
@@ -1,6 +1,103 @@
 p.boxed
 p.boxed
-  | TODO: Korean Chess
+  | Korean Chess, with different pieces behaving
+  | differently than orthodox chess.
 
 
-p https://www.pychess.org/variant/janggi
+p.
+  Pieces stand on intersections rather than squares: this is purely aesthetic,
+  and doesn't affect movements' descriptions.
 
 
-p https://fr.wikipedia.org/wiki/Janggi
+p
+  | Initial position is almost the same as in 
+  a(href="/#/variants/Xiangqi") Xiangqi
+  | , with the exception of the kings in the middle of the palaces.
+  | Also, at the first move you may choose to swap knight and elephant
+  | positions: either both, or on one side only.
+
+p More precisely, at first move:
+ul
+  li White can keep the initial setup by playing a pass move, or
+  li
+    | exchange knight / elephant positions on either side, and then
+    ul
+      li pass (by bringing your king onto the enemy king), or
+      li exchange positions on the other side too.
+p Then it's Black turn to do the same, and the game starts.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rnea1aenr/4k4/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RNEA1AENR:
+  .diagram.diag22
+    | fen:rnea1aner/4k4/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RENA1AENR:
+  figcaption Left: initial position. Right: after rearranging.
+
+h3 Pieces movements
+
+ul
+  li.
+    The King moves along any line of the palace, but cannot leave the palace.
+    The same goes for his Advisors.
+    Contrary to Xiangqi, kings can face each other on a file, but if this
+    situation lasts two half moves, the game is a draw: "bikjang".
+  li.
+    Rooks and knights move like in orthodox chess, but the knight does not
+    jump: it goes one square orthogonally first, then one diagonally.
+    If the first is occupied, the move is impossible.
+  li.
+    Elephants move like knights, but one square diagonally further: they
+    land at the opposite corner of a 2 x 3 rectangle, and intermediate squares
+    must be free.
+  li.
+    The Cannons move like rooks but need a piece on their way to jump first.
+    That is to say, on an empty rank or file cannons cannot move at all.
+    They can only reach the squares behind the first obstacle.
+    Moreover, a cannon cannot jump over or capture another cannon.
+  li.
+    Pawns behave like promoted pawns from Xiangqi: they move one square
+    forward or lateraly.
+
+p.
+  Additionally, cannons, rooks and pawns may move along the palace diagonals.
+  Also, it's possible to pass instead of playing a move.
+  Two consecutive passes result in a draw.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:4r4/9/4n4/9/9/2r1Cr2c/9/4C4/9/9 a5,b5,e9,e10,g5,h5:
+  .diagram.diag22
+    | fen:9/9/2r6/9/9/4EP3/3p5/5p3/9/9 b7,b3,c2,c8,g8:
+  figcaption Left: Cannon moves. Right: Elephant moves.
+
+h3 Pieces valuation
+
+p These are the official values:
+
+table
+  tr
+    th Piece
+    th Value
+  tr
+    td Chariot
+    td 13
+  tr
+    td Cannon
+    td 7
+  tr
+    td Horse
+    td 5
+  tr
+    td Elephant
+    td 3
+  tr
+    td Advisor
+    td 3
+  tr
+    td Pawn
+    td 2
+
+h3 More information
+
+p
+  | This variant is playable on 
+  a(href="https://www.pychess.org/variant/janggi")
+    | pychess-variants
+  | . See also the Wikipedia page.
index 21203ba..7cac6b5 100644 (file)
@@ -1 +1,108 @@
-p.boxed TODO
+p.boxed
+  | Échecs coréens, avec un jeu de pièces différant des échecs orthodoxes.
+
+p.
+  Les pièces se positionnent sur les intersections plutôt qu'au centre des
+  cases. L'effet n'est qu'esthétique, il n'y a pas d'impact sur la description
+  des déplacements.
+
+p
+  | La position de départ est presque la même qu'au 
+  a(href="/#/variants/Xiangqi") Xiangqi
+  | , à l'exception des rois qui se retrouvent au centre des palais.
+  | De plus, au premier coup vous pouvez choisir d'échanger les positions des
+  | cavalier et éléphants : d'un seul côté, ou bien des deux.
+
+p Plus précisément, a premier coup :
+ul
+  li Les blancs peuvent conserver la position initiale en passant, ou
+  li
+    | échanger les positions de l'éléphant et du cavalier d'un côté, puis
+    ul
+      li passer (en amenant son roi sur le roi adverse), ou
+      li échanger les pisitions de l'autre côté aussi.
+p Ensuite c'est aux noirs de faire de même, puis la partie commence.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rnea1aenr/4k4/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RNEA1AENR:
+  .diagram.diag22
+    | fen:rnea1aner/4k4/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/4K4/RENA1AENR:
+  figcaption Gauche : position initiale. Droite : après réarrangement.
+
+h3 Déplacements des pièces
+
+ul
+  li.
+    Le Roi se déplace le long des lignes du palais, et ne peut quitter cette
+    zone. De même pour les Conseillers.
+    Contrairement au Xiangqi, les rois peuvent se faire face sur une colonne,
+    mais si cette situation dure deux demi-coups
+    la partie est déclarée nulle : "bikjang".
+  li.
+    Les Tours ("chariots") et Cavaliers ("chevaux") se déplacent comme aux
+    échecs orthodoxes, mais le cavalier ne saute pas : il avance d'abord
+    d'une case orthogonalement, puis d'un pas en diagonale.
+    Si la première est occupée, le coup est impossible.
+  li.
+    Les Éléphants se déplacent comme les cavaliers, mais parcourent une case
+    supplémentaire dans la même direction diagonale : ils atterrissent au
+    coin opposé d'un rectangle 2 x 3, et
+    les cases intermédiaires doivent être libres.
+  li.
+    Les Canons se déplacent comme des tours mais ont besoin d'une pièce sur
+    leur chemin pour sauter d'abord. C'est-à-dire qu'ils ne peuvent pas bouger
+    sur des colonnes ou rangées vides. Ils peuvent seulement atteindre les
+    cases situées derrière le premier obstacle.
+    De plus, un canon ne peut sauter par dessus ou capturer un autre canon.
+  li.
+    Les Pions se comportent comme des pions promus du Xiangqi : ils se
+    déplacent d'une case vers l'avant ou latéralement.
+
+p.
+  Les canons, tours et pions peuvent aussi se déplacer le long des diagonales
+  Il est également possible de passer au lieu de jouer un coup.
+  Deux passes consécutives équivaut à un match nul.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:4r4/9/4n4/9/9/2r1Cr2c/9/4C4/9/9 a5,b5,e9,e10,g5,h5:
+  .diagram.diag22
+    | fen:9/9/2r6/9/9/4EP3/3p5/5p3/9/9 b7,b3,c2,c8,g8:
+  figcaption Gauche : coups du Canon. Droite : coups de l'Éléphant.
+
+h3 Valeur des pièces
+
+p Voici les valeurs officielles :
+
+table
+  tr
+    th Piece
+    th Valeur
+  tr
+    td Chariot
+    td 13
+  tr
+    td Canon
+    td 7
+  tr
+    td Cheval
+    td 5
+  tr
+    td Élephant
+    td 3
+  tr
+    td Conseiller
+    td 3
+  tr
+    td Pion
+    td 2
+
+h3 Plus d'information
+
+p
+  | Cette variante est jouable sur 
+  a(href="https://www.pychess.org/variant/janggi")
+    | pychess-variants
+  | . Voir aussi la page Wikipedia.
+
index 05f8a40..d2eaf21 100644 (file)
@@ -1,6 +1,5 @@
 p.boxed.
 p.boxed.
-  Échecs chinois, avec différentes pièces se comportant
-  différemment des échecs orthodoxes.
+  Échecs chinois, avec un jeu de pièces différant des échecs orthodoxes.
 
 p.
   Les pièces se positionnent sur les intersections plutôt qu'au centre des
 
 p.
   Les pièces se positionnent sur les intersections plutôt qu'au centre des
index 895e23f..e22a786 100644 (file)
@@ -35,10 +35,6 @@ export class JanggiRules extends ChessRules {
     return false;
   }
 
     return false;
   }
 
-  static get LoseOnRepetition() {
-    return true;
-  }
-
   static get ELEPHANT() {
     return "e";
   }
   static get ELEPHANT() {
     return "e";
   }
@@ -110,9 +106,10 @@ export class JanggiRules extends ChessRules {
     // TODO: next "if" is mutually exclusive with the block above
     if (this.movesCount <= 1) {
       const firstRank = (this.movesCount == 0 ? 9 : 0);
     // TODO: next "if" is mutually exclusive with the block above
     if (this.movesCount <= 1) {
       const firstRank = (this.movesCount == 0 ? 9 : 0);
-      const [initFile, destFile] = (this.subTurn == 1 ? [1, 2] : [7, 6]);
+      const initDestFile = new Map([[1, 2], [7, 6]]);
       // Only option is knight / elephant swap:
       // Only option is knight / elephant swap:
-      if (x == firstRank && y == initFile) {
+      if (x == firstRank && !!initDestFile.get(y)) {
+        const destFile = initDestFile.get(y);
         moves.push(
           new Move({
             appear: [
         moves.push(
           new Move({
             appear: [