Commit | Line | Data |
---|---|---|
296f846a BA |
1 | import ChessRules from "/base_rules.js"; |
2 | ||
3 | export default class CopycatRules extends ChessRules { | |
4 | ||
5 | static get Options() { | |
6 | return { | |
7 | select: C.Options.select, | |
8 | input: C.Options.input, | |
9 | styles: ["atomic", "capture", "crazyhouse", "cylinder", "dark", "zen"] | |
10 | }; | |
11 | } | |
12 | ||
13 | getPotentialMovesFrom([x, y], color) { | |
14 | let moves = super.getPotentialMovesFrom([x, y], color); | |
15 | // Expand potential moves if attacking friendly pieces. | |
16 | const piece = this.getPiece(x,y); | |
17 | if (['p', 'k'].includes(piece)) | |
18 | return moves; | |
19 | let movements = {}; | |
20 | const steps = this.pieces()[piece].both[0].steps; | |
21 | steps.forEach(s => { | |
22 | let [i, j] = [x + s[0], y + s[1]]; | |
23 | while ( | |
24 | this.onBoard(i, j) && | |
25 | this.board[i][j] == "" && | |
26 | piece != 'n' | |
27 | ) { | |
28 | i += s[0]; | |
29 | j += s[1]; | |
30 | } | |
31 | if (this.onBoard(i, j) && this.getColor(i, j) == this.turn) { | |
32 | const attacked = this.getPiece(i, j); | |
33 | if (['r', 'b', 'n'].includes(attacked)) { | |
34 | if (!movements[attacked]) | |
35 | movements[attacked] = true; | |
36 | } | |
37 | else if (attacked == 'q') { | |
38 | if (!movements['r']) | |
39 | movements['r'] = true; | |
40 | if (!movements['b']) | |
41 | movements['b'] = true; | |
42 | } | |
43 | } | |
44 | }); | |
45 | Object.keys(movements).forEach(type => { | |
46 | if ( | |
47 | (piece != 'q' && type != piece) || | |
48 | (piece == 'q' && type == 'n') | |
49 | ) { | |
50 | Array.prototype.push.apply(moves, | |
51 | super.getPotentialMovesOf(type, [x, y])); | |
52 | } | |
53 | }); | |
54 | return moves; | |
55 | } | |
56 | ||
57 | underAttack([x, y], oppCols) { | |
58 | if (super.underAttack([x, y], oppCols) | |
59 | return true; | |
60 | //TODO | |
61 | } | |
62 | ||
63 | }; |