25.4. Rodzaje ruchów
W pliku Move.scala zdefiniowana jest abstrakcyjna klasa Move, reprezentująca pojedynczy ruch partii szachowej, oraz jej cztery podklasy:
- RegularMove, która reprezentuje zwykły ruch figury z jakiegoś pola na inne pole,
- PromotionMove, która reprezentuje ruch piona połączony z jego promocją do innej figury,
- EnPassantMove, która reprezentuje bicie pionem w przelocie,
- CastlingMove, która reprezentuje roszadę.
Plik Move.scala: package chess abstract sealed class Move { val from: Field val to: Field } case class RegularMove(from: Field, to: Field) extends Move case class PromotionMove(from: Field, to: Field, figure: Figure) extends Move case class EnPassantMove(from: Field, to: Field, captured: Field) extends Move case class CastlingMove(from: Field, to: Field, rookFrom: Field, rookTo: Field) extends Move
Każda z podklas ma pola from oraz to, reprezentujące pole, z którego rusza poruszana figura i pole docelowe. Klasa PromotionMove ma dodatkowo pole figure, reprezentujące figurę, na którą promowany jest pion. Klasa EnPassantMove ma pole captured, reprezentujące zbijaną figurę. Klasa CastlingMove ma dodatkowo pola rookFrom i rookTo, reprezentujące startowe i docelowe pola dla poruszanej podczas roszady wieży.