1.3-Object-Georienteerd-Programmeren

Schaken (alweer)

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.

Wij adviseren de volgende aanpak

  1. Maak een nieuw project dat gebruik maakt van de SaxionApp bibliotheek.
  2. Kopeer de inhoud van de zip file naar je project.
    • Deze bevat een src map en een images map. Merk op dat de code stuk is omdat er klassen missen.
  3. Maak eerst de Move klasse.
    • Gebruik nette encapsulatie en zorg de juise constructor, getters en setter. Move coordinaten tellen vanaf de LINKER BOVEN hoek!!
  4. Maak eerst de Pawn class als een extensie van ChessPiece.
  5. 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)

  6. Ga daarna verder met de volgende stukken. De zetten van de dame zijn bijvoorbeeld een combinatie van de toren en de loper.

Tips

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.)