We gaan terug naar de opdracht uit week 1. Deze keer gebruiken we de nieuwe vaardigheden die we de afgelopen weken geleerd hebben. Daarmee hebben we nieuwe mogelijkheden om de stukken uit te werken. Veel code is nog steeds hetzelfde voor alle specifieke stukken.
Als we gebruik maken van overerving, polymorphisme en abstractie, dan hoeven we alleen de manier waarop stukken hun lijst van legale(!) zetten genereren te veranderen.
Je krijg gratis de abstracte class ChessPiece.
Jouw opdracht is het uitwerken van de getMoves()
functie van alle afstammelingen.
Moves zijn een simple POJO (Plain Old Java Object) met vijf member variables. De interface is te zien in het klassendiagram.
Implementeer de getMoves(...)
methode.
Merk op dat het jouw verantwoordelijkheid is om een lijst te maken met alle zetten naar de posities die het stuk kan bewegen op het bord. De vorige keer was de vraag: “Kun je hier naartoe bewegen?” Bij tips staat een uitgebreid voorbeeld.
Je mag gebruik maken van Board.tryAddMove(yourCollection, fromX, fromY, toX, toY) om zetten te filteren die van het bord vallen. (x==-1, or y==8, die dingen)
De Board klasse is erg krachtig. Verander die code niet! Samen met de Application zorgt deze ervoor dat je daadwerkelijk zetten kunt doen!
Daarnaast kan het bord illegale zetten filteren. Nemen we als voorbeeld de loper die naar alle diagonale plekken kan bewegen.
In dit geval heeft de lopen een lijst met 11 mogelijke zetten vanaf zijn huidige positie gevuld. Maar de Board klasse heeft alle zetten die over een ander stuk heen springen verwijderd. (Daarnaast is gedetecteerd dat er een zet is die een ander stuk slaat en geeft dat aan met rood.)
Wanneer je klaar bent, probeer dan eens een spel te spelen. Beweeg wat stukken over het bord. We denken dat je een leuke verassing te wachten staat. (Ondanks dat er een paar belangrijke regels missen.)