Code Duplication    Length = 35-42 lines in 3 locations

src/chess/pieces/King.js 1 location

@@ 5-46 (lines=42) @@
2
 * King module
3
 * @module
4
 */
5
"use strict";
6
7
/**
8
 * Class with King logic
9
 */
10
class King {
11
    /**
12
     * init
13
     */
14
    constructor(color) {
15
        this.symbol = "K";
16
        this.moved = 0;
17
        this.active = true;
18
        this.color = color;
19
        this.rows = [null, "A", "B", "C", "D", "E", "F", "G", "H"];
20
        this.img = this.color === "white" ? "w-king" : "b-king";
21
    }
22
23
    legalMove(x, y, nx, ny) {
24
        let xNum = this.rows.indexOf(x);
25
        let nxNum = this.rows.indexOf(nx);
26
27
        let xStep = Math.abs(xNum - nxNum);
28
        let yStep = Math.abs(y - ny)
29
        if (xStep > 1 || yStep > 1) {
30
            return false
31
        }
32
33
        if (x == nx && y !== ny || x !== nx && y == ny) {
34
            return true
35
        }
36
37
        if (xStep === yStep) {
38
            return true
39
        }
40
41
        return false;
42
    }
43
}
44
45
46
module.exports = King;
47

src/chess/pieces/Queen.js 1 location

@@ 5-43 (lines=39) @@
2
 * Queen module
3
 * @module
4
 */
5
"use strict";
6
7
/**
8
 * Class with Queen logic
9
 */
10
class Queen {
11
    /**
12
     * init
13
     */
14
    constructor(color) {
15
        this.symbol = "Q";
16
        this.moved = 0;
17
        this.active = true;
18
        this.color = color;
19
        this.rows = [null, "A", "B", "C", "D", "E", "F", "G", "H"];
20
        this.img = this.color === "white" ? "w-queen" : "b-queen";
21
    }
22
23
    legalMove(x, y, nx, ny) {
24
        // row
25
        if (x == nx && y !== ny || x !== nx && y == ny) {
26
            return true
27
        }
28
29
        let xNum = this.rows.indexOf(x);
30
        let nxNum = this.rows.indexOf(nx);
31
32
        let xStep = Math.abs(xNum - nxNum);
33
        let yStep = Math.abs(y - ny)
34
        if (xStep === yStep) {
35
            return true
36
        }
37
38
        return false;
39
    }
40
}
41
42
43
module.exports = Queen;
44

src/chess/pieces/Knight.js 1 location

@@ 5-39 (lines=35) @@
2
 * Knight module
3
 * @module
4
 */
5
"use strict";
6
7
/**
8
 * Class with Knight logic
9
 */
10
class Knight {
11
    /**
12
     * init
13
     */
14
    constructor(color) {
15
        this.symbol = "N";
16
        this.moved = 0;
17
        this.active = true;
18
        this.color = color;
19
        this.rows = [null, "A", "B", "C", "D", "E", "F", "G", "H"];
20
        this.img = this.color === "white" ? "w-knight" : "b-knight";
21
    }
22
23
    legalMove(x, y, nx, ny) {
24
        let xNum = this.rows.indexOf(x);
25
        let nxNum = this.rows.indexOf(nx);
26
27
        let xStep = Math.abs(xNum - nxNum);
28
        let yStep = Math.abs(y - ny)
29
30
        if (xStep == 2 && yStep == 1 || xStep == 1 && yStep == 2) {
31
            return true;
32
        }
33
34
        return false;
35
    }
36
}
37
38
39
module.exports = Knight;
40