tangled
alpha
login
or
join now
nove.dev
/
outsider
0
fork
atom
cleanroom implementation of a chess engine. doesn't work :)
0
fork
atom
overview
issues
pulls
pipelines
first steps
nove.dev
8 months ago
f3d4143b
877bd162
+67
1 changed file
expand all
collapse all
unified
split
src
lib.rs
+67
src/lib.rs
···
1
1
+
#[derive(Debug, Clone, Copy)]
2
2
+
enum Piece {
3
3
+
Pawn,
4
4
+
Knight,
5
5
+
Bishop,
6
6
+
Rook,
7
7
+
Queen,
8
8
+
King,
9
9
+
}
10
10
+
11
11
+
impl Piece {
12
12
+
fn value(self) -> i32 {
13
13
+
match self {
14
14
+
Piece::Pawn => 1,
15
15
+
Piece::Knight | Piece::Bishop => 3,
16
16
+
Piece::Rook => 5,
17
17
+
Piece::Queen => 9,
18
18
+
Piece::King => 0,
19
19
+
}
20
20
+
}
21
21
+
}
22
22
+
23
23
+
#[derive(Debug, Clone, Copy)]
24
24
+
struct LocatedPiece {
25
25
+
piece: Piece,
26
26
+
rank: usize,
27
27
+
file: usize,
28
28
+
}
29
29
+
30
30
+
struct Board {
31
31
+
white: Vec<LocatedPiece>,
32
32
+
black: Vec<LocatedPiece>,
33
33
+
}
34
34
+
35
35
+
impl Board {
36
36
+
fn new() -> Self {
37
37
+
let white_pawns = (0..8)
38
38
+
.map(|file| LocatedPiece {
39
39
+
piece: Piece::Pawn,
40
40
+
rank: 1,
41
41
+
file,
42
42
+
})
43
43
+
.collect::<Vec<_>>();
44
44
+
let black_pawns = white_pawns
45
45
+
.iter()
46
46
+
.map(|&lp| LocatedPiece { rank: 7, ..lp })
47
47
+
.collect::<Vec<_>>();
48
48
+
Self {
49
49
+
white: white_pawns,
50
50
+
black: black_pawns,
51
51
+
}
52
52
+
}
53
53
+
fn material(&self) -> i32 {
54
54
+
let white_value = self
55
55
+
.white
56
56
+
.iter()
57
57
+
.map(|piece| piece.piece.value())
58
58
+
.sum::<i32>();
59
59
+
let black_value = self
60
60
+
.black
61
61
+
.iter()
62
62
+
.map(|piece| piece.piece.value())
63
63
+
.sum::<i32>();
64
64
+
white_value - black_value
65
65
+
}
66
66
+
}
67
67
+
1
68
pub fn add(left: u64, right: u64) -> u64 {
2
69
left + right
3
70
}