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
making moves, specifically castling
nove.dev
8 months ago
24eac69a
9445782b
+52
-2
1 changed file
expand all
collapse all
unified
split
src
lib.rs
+52
-2
src/lib.rs
···
1
1
-
#[derive(Debug, Clone, Copy)]
1
1
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2
2
enum Piece {
3
3
Pawn,
4
4
Knight,
···
20
20
}
21
21
}
22
22
23
23
-
#[derive(Debug, Clone, Copy)]
23
23
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
24
24
struct LocatedPiece {
25
25
piece: Piece,
26
26
rank: usize,
···
30
30
struct Board {
31
31
white: Vec<LocatedPiece>,
32
32
black: Vec<LocatedPiece>,
33
33
+
white_to_move: bool,
33
34
}
34
35
35
36
impl Board {
···
72
73
Self {
73
74
white: white_pieces.chain(white_pawns).collect(),
74
75
black: black_pieces.chain(black_pawns).collect(),
76
76
+
white_to_move: true,
75
77
}
76
78
}
77
79
fn material(&self) -> i32 {
···
86
88
.map(|piece| piece.piece.value())
87
89
.sum::<i32>();
88
90
white_value - black_value
91
91
+
}
92
92
+
fn make_move(&mut self, algebra: &str) {
93
93
+
let mover = if self.white_to_move {
94
94
+
&mut self.white
95
95
+
} else {
96
96
+
&mut self.black
97
97
+
};
98
98
+
99
99
+
if algebra == "O-O" || algebra == "0-0" {
100
100
+
mover
101
101
+
.iter_mut()
102
102
+
.find(|lp| lp.piece == Piece::King)
103
103
+
.unwrap()
104
104
+
.file = 6; //castles kingside
105
105
+
mover
106
106
+
.iter_mut()
107
107
+
.find(|lp| lp.piece == Piece::Rook && lp.file == 7)
108
108
+
.unwrap()
109
109
+
.file = 5;
110
110
+
} else if algebra == "O-O-O" || algebra == "0-0-0" {
111
111
+
mover
112
112
+
.iter_mut()
113
113
+
.find(|lp| lp.piece == Piece::King)
114
114
+
.unwrap()
115
115
+
.file = 2; //castles queenside
116
116
+
mover
117
117
+
.iter_mut()
118
118
+
.find(|lp| lp.piece == Piece::Rook && lp.file == 0)
119
119
+
.unwrap()
120
120
+
.file = 3;
121
121
+
}
122
122
+
123
123
+
let first_char = algebra.chars().next().unwrap();
124
124
+
let piece = if first_char.is_ascii_uppercase() {
125
125
+
match first_char {
126
126
+
'R' => Piece::Rook,
127
127
+
'N' => Piece::Knight,
128
128
+
'B' => Piece::Bishop,
129
129
+
'K' => Piece::King,
130
130
+
'Q' => Piece::Queen,
131
131
+
_ => unreachable!(),
132
132
+
}
133
133
+
} else {
134
134
+
Piece::Pawn
135
135
+
};
136
136
+
137
137
+
let destination_square = todo!();
138
138
+
todo!()
89
139
}
90
140
}
91
141