Pionki szachowe
Twoim zadaniem będzie zamodelowanie bierek szachowych wraz z ich ruchem. Poniżej znajdziesz kilka wskazówek, które pomogą Ci w tym zadaniu.
-
Zdefiniuj typ wyliczeniowy
Chessman
, który będzie reprezentował różne rodzaje bierek szachowych. Nazwy bierek:Pawn
- pionekKnight
- skoczekBishop
- goniecRook
- wieżaQueen
- królowaKing
- król
-
Zdefiniuj strukturę
Position
, która będzie reprezentować położenie bierki na planszy szachowej. Możesz użyć następującego kodu jako punktu wyjścia:#[derive(Debug)] struct Position { x: u8, y: u8, }
-
Rozszerz typ
Chessman
o atrybutyposition
orazcolor
. Atrybutposition
powinien być typuPosition
, acolor
powinien być typu wyliczeniowego i oznaczać dwa możliwe kolory:White
iBlack
. -
Zdefiniuj metodę
move
, która będzie przyjmować nową pozycję i aktualizować położenie bierki na planszy o następującej sygnaturze:impl Chessman { fn move(&mut self, new_position: Position) -> bool { todo!() } }
Metoda powinna zmieniać położenie bierki na planszy tylko wtedy jeśli nowa pozycja jest poprawna dla danej bierki (względem jej aktualnej pozycji). Jeśli nowa pozycja jest błędna, metoda powinna zwrócić
false
, w przeciwnym razietrue
.Opcjonalnie, uwzględnij możliwy kierunek poruszania się pionków (
Pawn
) w zależności od koloru. Pionki białe poruszają się w górę planszy, a czarne w dół. -
Napisz testy jednostkowe dla każdej bierki, które sprawdzą czy metoda
move
działa poprawnie. Możesz użyć następującego kodu jako punktu wyjścia:#[cfg(test)] mod tests { use super::*; #[test] fn test_pawn_move() { let mut pawn = Chessman::Pawn { position: Position { x: 1, y: 2 }, color: Color::White }; assert_eq!(pawn.move(Position { x: 1, y: 3 }), true); assert_eq!(pawn.move(Position { x: 1, y: 5 }), false); } // Dodaj testy dla pozostałych bierek }