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
add tests for castling
nove.dev
8 months ago
0ce191f5
24eac69a
+46
-15
1 changed file
expand all
collapse all
unified
split
src
lib.rs
+46
-15
src/lib.rs
···
95
95
} else {
96
96
&mut self.black
97
97
};
98
98
+
let nonmover = if self.white_to_move {
99
99
+
&mut self.black
100
100
+
} else {
101
101
+
&mut self.white
102
102
+
};
98
103
99
104
if algebra == "O-O" || algebra == "0-0" {
100
105
mover
···
118
123
.find(|lp| lp.piece == Piece::Rook && lp.file == 0)
119
124
.unwrap()
120
125
.file = 3;
121
121
-
}
126
126
+
} else {
127
127
+
let first_char = algebra.chars().next().unwrap();
128
128
+
let piece = if first_char.is_ascii_uppercase() {
129
129
+
match first_char {
130
130
+
'R' => Piece::Rook,
131
131
+
'N' => Piece::Knight,
132
132
+
'B' => Piece::Bishop,
133
133
+
'K' => Piece::King,
134
134
+
'Q' => Piece::Queen,
135
135
+
_ => unreachable!(),
136
136
+
}
137
137
+
} else {
138
138
+
Piece::Pawn
139
139
+
};
122
140
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!(),
141
141
+
if (piece == Piece::Pawn) {
142
142
+
let file = first_char as usize;
143
143
+
let rank = algebra.chars().nth(1).unwrap() as usize - 'a' as usize;
144
144
+
if algebra.len() == 2 {
145
145
+
nonmover.retain(|lp| lp.rank != rank && lp.file != file);
146
146
+
mover
147
147
+
.iter_mut()
148
148
+
.find(|lp| {
149
149
+
lp.file == file
150
150
+
&& lp.piece == Piece::Pawn
151
151
+
&& self.valid_moves(lp).includes((rank, file))
152
152
+
})
153
153
+
.unwrap()
154
154
+
.rank = rank;
155
155
+
}
132
156
}
133
133
-
} else {
134
134
-
Piece::Pawn
135
135
-
};
136
157
137
137
-
let destination_square = todo!();
138
138
-
todo!()
158
158
+
let destination_square = todo!();
159
159
+
todo!()
160
160
+
}
139
161
}
162
162
+
}
163
163
+
164
164
+
#[derive(Clone, Copy, PartialEq, Eq)]
165
165
+
enum MoveSegment {
166
166
+
Piece(Piece),
167
167
+
Rank(usize),
168
168
+
File(usize),
169
169
+
Captures,
170
170
+
Promotion(Piece),
140
171
}
141
172
142
173
#[cfg(test)]