Commit | Line | Data |
---|---|---|
7379efc5 BA |
1 | import ChessRules from "/base_rules.js"; |
2 | ||
3 | export default class CoronationRules extends ChessRules { | |
4 | ||
5 | get hasSelfCaptures() { | |
6 | return true; | |
7 | } | |
8 | ||
9 | canSelfTake([x1, y1], [x2, y2]) { | |
10 | const c = this.getColor(x1, y1); | |
11 | if ( | |
12 | this.board.some(row => | |
13 | row.some(square => | |
14 | square[0] == c && square[1] == 'q') | |
15 | ) | |
16 | ) { | |
17 | // Already a queen on the board: no coronation | |
18 | return false; | |
19 | } | |
20 | const [p1, p2] = [this.getPiece(x1, y1), this.getPiece(x2, y2)]; | |
21 | return ((p1 == 'r' && p2 == 'b') || (p1 == 'b' && p2 == 'r')); | |
22 | } | |
23 | ||
24 | getPotentialMovesOf(piece, [x, y]) { | |
25 | const res = super.getPotentialMovesOf(piece, [x, y]); | |
26 | if (['r', 'b'].includes(piece)) { | |
27 | res.forEach(m => { | |
28 | if ( | |
29 | m.vanish.length == 2 && | |
30 | m.appear.length == 1 && | |
31 | m.vanish[1].c == m.vanish[0].c | |
32 | ) { | |
33 | m.appear[0].p = 'q'; | |
34 | } | |
35 | }); | |
36 | } | |
37 | return res; | |
38 | } | |
39 | ||
40 | }; |