Commit | Line | Data |
---|---|---|
107dc1bd BA |
1 | import { ChessRules } from "@/base_rules"; |
2 | import { BerolinaRules } from "@/variants/Berolina"; | |
3 | ||
4 | export class GridolinaRules extends BerolinaRules { | |
7e8a7ea1 | 5 | |
107dc1bd BA |
6 | static get Lines() { |
7 | return [ | |
8 | [[2, 0], [2, 8]], | |
9 | [[4, 0], [4, 8]], | |
10 | [[6, 0], [6, 8]], | |
11 | [[0, 2], [8, 2]], | |
12 | [[0, 4], [8, 4]], | |
13 | [[0, 6], [8, 6]] | |
14 | ]; | |
15 | } | |
16 | ||
17 | static OnDifferentGrids([x1, y1], [x2, y2]) { | |
18 | return ( | |
19 | Math.abs(Math.floor(x1 / 2) - Math.floor(x2 / 2)) >= 1 || | |
20 | Math.abs(Math.floor(y1 / 2) - Math.floor(y2 / 2)) >= 1 | |
21 | ); | |
22 | } | |
23 | ||
24 | canTake([x1, y1], [x2, y2]) { | |
25 | return ( | |
26 | V.OnDifferentGrids([x1, y1], [x2, y2]) && | |
27 | super.canTake([x1, y1], [x2, y2]) | |
28 | ); | |
29 | } | |
30 | ||
31 | getPotentialMovesFrom([x, y]) { | |
32 | return ( | |
33 | super.getPotentialMovesFrom([x, y]).filter(m => { | |
34 | return V.OnDifferentGrids([x, y], [m.end.x, m.end.y]); | |
35 | }) | |
36 | ); | |
37 | } | |
fa74f624 BA |
38 | |
39 | isAttackedBySlideNJump([x, y], color, piece, steps, oneStep) { | |
40 | for (let step of steps) { | |
41 | let rx = x + step[0], | |
42 | ry = y + step[1]; | |
43 | while (V.OnBoard(rx, ry) && this.board[rx][ry] == V.EMPTY && !oneStep) { | |
44 | rx += step[0]; | |
45 | ry += step[1]; | |
46 | } | |
47 | if ( | |
48 | V.OnBoard(rx, ry) && | |
49 | this.getPiece(rx, ry) == piece && | |
50 | this.getColor(rx, ry) == color && | |
51 | V.OnDifferentGrids([x, y], [rx, ry]) | |
52 | ) { | |
53 | return true; | |
54 | } | |
55 | } | |
56 | return false; | |
57 | } | |
7e8a7ea1 | 58 | |
107dc1bd | 59 | }; |