Commit | Line | Data |
---|---|---|
de3f5625 BA |
1 | import { ChessRules } from "@/base_rules"; |
2 | ||
3 | // Ideas with 2 kings: | |
4 | // Stage 1 {w, b} : 2 kings on board, value 5. | |
5 | // Stage 2: only one, get mated and all that, value 1000 | |
f52671e5 | 6 | // ...But the middle king will be captured quickly... |
de3f5625 BA |
7 | |
8 | export class DoublearmyRules extends ChessRules { | |
7e8a7ea1 | 9 | |
de3f5625 BA |
10 | static get COMMONER() { |
11 | return "c"; | |
12 | } | |
13 | ||
14 | static get PIECES() { | |
15 | return ChessRules.PIECES.concat([V.COMMONER]); | |
16 | } | |
17 | ||
18 | getPpath(b) { | |
19 | return (b[1] == V.COMMONER ? "Doublearmy/" : "") + b; | |
20 | } | |
21 | ||
22 | static GenRandInitFen(randomness) { | |
23 | const fen = ChessRules.GenRandInitFen(randomness); | |
24 | const rows = fen.split(" ")[0].split("/"); | |
25 | return ( | |
26 | rows[0] + "/" + | |
27 | rows[1] + "/" + | |
28 | rows[0].replace('k', 'c') + "/" + | |
29 | rows[1] + "/" + | |
30 | rows[6] + "/" + | |
31 | rows[7].replace('K', 'C') + "/" + | |
32 | rows[6] + "/" + | |
33 | rows[7] + fen.slice(-11) | |
34 | ); | |
35 | } | |
36 | ||
37 | getPotentialMovesFrom([x, y]) { | |
38 | switch (this.getPiece(x, y)) { | |
39 | case V.COMMONER: | |
40 | return this.getPotentialCommonerMoves([x, y]); | |
41 | default: | |
42 | return super.getPotentialMovesFrom([x, y]); | |
43 | } | |
44 | } | |
45 | ||
46 | getPotentialCommonerMoves(sq) { | |
47 | return this.getSlideNJumpMoves( | |
48 | sq, | |
49 | V.steps[V.ROOK].concat(V.steps[V.BISHOP]), | |
50 | "oneStep" | |
51 | ); | |
52 | } | |
53 | ||
54 | isAttacked(sq, color) { | |
55 | return ( | |
56 | super.isAttacked(sq, color) || | |
57 | this.isAttackedByCommoner(sq, color) | |
58 | ); | |
59 | } | |
60 | ||
61 | isAttackedByCommoner(sq, color) { | |
62 | return this.isAttackedBySlideNJump( | |
63 | sq, | |
64 | color, | |
65 | V.COMMONER, | |
66 | V.steps[V.ROOK].concat(V.steps[V.BISHOP]), | |
67 | "oneStep" | |
68 | ); | |
69 | } | |
70 | ||
71 | static get VALUES() { | |
72 | return Object.assign( | |
73 | {}, | |
74 | ChessRules.VALUES, | |
75 | { c: 5 } | |
76 | ); | |
77 | } | |
78 | ||
79 | static get SEARCH_DEPTH() { | |
80 | return 2; | |
81 | } | |
7e8a7ea1 | 82 | |
de3f5625 | 83 | }; |