=====
+fanorona https://fr.wikipedia.org/wiki/Fanorona
+Yoté https://fr.wikipedia.org/wiki/Yot%C3%A9 http://www.zillionsofgames.com/cgi-bin/zilligames/submissions.cgi/92187?do=show;id=960
gess https://en.wikipedia.org/wiki/Gess
weiqi (check if landed stone captures, walk on connected components), go13, go9, gomoku, reversi
+ first click show the stone, second click confirm the move?
avalam, qoridor, xiangqi, draughts, draughts8
(puis quand hexaboards peut-ĂȘtre: hexavariants + Hex)
Byo-yomi possible: 1h+b15,5m (15 pierres 5 minutes)
const squareId = "sq-" + ci + "-" + cj;
let elems = [];
if (showPiece(ci, cj)) {
- elems.push(
- h("img", {
- "class": {
- piece: true,
- ghost:
- !!this.selectedPiece &&
- this.selectedPiece.parentNode.id == squareId
- },
- attrs: {
- src:
- "/images/pieces/" +
- this.vr.getPpath(
- this.vr.board[ci][cj],
- // Extra args useful for some variants:
- this.userColor,
- this.score,
- this.orientation) +
- V.IMAGE_EXTENSION
- }
- })
- );
+ let pieceSpecs = {
+ "class": {
+ piece: true,
+ ghost:
+ !!this.selectedPiece &&
+ this.selectedPiece.parentNode.id == squareId
+ },
+ attrs: {
+ src:
+ "/images/pieces/" +
+ this.vr.getPpath(
+ this.vr.board[ci][cj],
+ // Extra args useful for some variants:
+ this.userColor,
+ this.score,
+ this.orientation) +
+ V.IMAGE_EXTENSION
+ }
+ };
+ if (this.arrows.length == 0)
+ pieceSpecs["style"] = { position: "absolute" };
+ elems.push(h("img", pieceSpecs));
}
if (this.settings.hints && hintSquares[ci][cj]) {
elems.push(
"class": {
board: true,
["board" + sizeY]: true,
- "light-square": lightSquare && !V.Monochrome,
- "dark-square": !lightSquare || !!V.Monochrome,
+ "light-square":
+ !V.Notoodark && lightSquare && !V.Monochrome,
+ "dark-square":
+ !V.Notoodark && (!lightSquare || !!V.Monochrome),
+ "middle-square": V.Notoodark,
[this.settings.bcolor]: true,
"in-shadow": inShadow(ci, cj),
"highlight-light": inHighlight(ci, cj) && lightSquare,
- "highlight-dark": inHighlight(ci, cj) && !lightSquare,
+ "highlight-dark":
+ inHighlight(ci, cj) && (V.Monochrome || !lightSquare),
"incheck-light":
showCheck && lightSquare && incheckSq[ci][cj],
"incheck-dark":
},
[
h("img", {
+ // NOTE: class "reserve" not used currently
"class": { piece: true, reserve: true },
attrs: {
src:
".svg"
}
}),
- h("sup", { "class": { "reserve-count": true } }, [ qty ])
+ h(
+ "sup",
+ {
+ "class": { "reserve-count": true },
+ style: { top: "calc(100% + 5px)" }
+ },
+ [ qty ]
+ )
]
)
);
".svg"
}
}),
- h("sup", { "class": { "reserve-count": true } }, [ qty ])
+ h(
+ "sup",
+ {
+ "class": { "reserve-count": true },
+ style: { top: "calc(100% + 5px)" }
+ },
+ [ qty ]
+ )
]
)
);
<style lang="sass" scoped>
@import "@/styles/_board_squares_img.sass";
-// NOTE: no variants with reserve of size != 8
-.game.reserve-div
- margin-bottom: 18px
+//.game.reserve-div
+ // TODO: would be cleaner to restrict width so that it doesn't overflow
+ // Commented out because pieces would disappear over the board otherwise:
+ //overflow: hidden
.reserve-count
- padding-left: 40%
+ width: 100%
+ text-align: center
+ display: inline-block
+ position: absolute
.reserve-row
margin-bottom: 15px
display: block
img.ghost
+ // NOTE: no need to set z-index here, since opacity is low
position: absolute
opacity: 0.5
top: 0
background-color: rgba(204, 51, 0, 0.9) !important
.light-square.lichess
- background-color: #f0d9b5;
+ background-color: #f0d9b5
.dark-square.lichess
- background-color: #b58863;
+ background-color: #b58863
.light-square.chesscom
- background-color: #e5e5ca;
+ background-color: #e5e5ca
.dark-square.chesscom
- background-color: #6f8f57;
+ background-color: #6f8f57
.light-square.chesstempo
- background-color: #dfdfdf;
+ background-color: #dfdfdf
.dark-square.chesstempo
- background-color: #7287b6;
+ background-color: #7287b6
+
+.middle-square.lichess
+ background-color: #D3B18C
+
+.middle-square.chesscom
+ background-color: #AABA91
+
+.middle-square.chesstempo
+ background-color: #A9B3CB
// TODO: no predefined highlight colors, but layers. How?
import { ChessRules } from "@/base_rules";
export class ZenRules extends ChessRules {
- // NOTE: enPassant, if enabled, would need to redefine carefully getEpSquare
- static get HasEnpassant() {
- return false;
+ getEpSquare(moveOrSquare) {
+ if (!moveOrSquare) return undefined;
+ if (typeof moveOrSquare === "string") {
+ const square = moveOrSquare;
+ if (square == "-") return undefined;
+ return V.SquareToCoords(square);
+ }
+ const move = moveOrSquare;
+ const s = move.start,
+ e = move.end;
+ if (
+ // Exclude captures (of rooks for example)
+ move.vanish.length == 1 &&
+ s.y == e.y &&
+ Math.abs(s.x - e.x) == 2 &&
+ move.appear[0].p == V.PAWN
+ ) {
+ return {
+ x: (s.x + e.x) / 2,
+ y: s.y
+ };
+ }
+ return undefined;
}
// TODO(?): some duplicated code in 2 next functions