De vierde programmeeropgave van het vak Programmeermethoden in het najaar van 2007 heet Checkers. Zie ook de hints bij Werkcollege 10 en 12; Werkcollege 11 gaat over Qt. Deze opgave is verplicht voor studenten Informatica. Anderen mogen de opgave maken, en krijgen dan uiteindelijk één ECTS (studiepunt) meer voor het vak Programmeermethoden: zeven in plaats van zes ECTS.
Spreekuur in zalen 302 ... 309:
maandag 12 tot en met vrijdag 16 november,
maandag 19 en dinsdag 20 november,
maandag 26 en dinsdag 27 november,
en
maandag 3 en dinsdag 4 december,
van circa
15.30 tot 17.00 uur. En verder op afspraak ...
De werkcolleges van dinsdag 13, dinsdag 20 / donderdag 22 (Qt),
dinsdag 27 / donderdag 29 november zijn speciaal bedoeld voor
deze opgave. Het werkcollege van donderdag 15 november
is nog voornamelijk voor de derde programmeeropgave bedoeld.
Let op: de colleges van 27 november en 4 december
worden niet in het Gorlaeus,
maar als werkcollege / vragenuur in de computerzalen gegeven.
Het werkcollege van dinsdag 4 en donderdag 6 december is
voor iedereen, en gaat over oude tentamens.
Deze opdracht kent twee onderdelen:
Het spel Checkers, of draughts, in het Nederlands Dammen op een schaakbord, is deze zomer opgelost: bij perfect spel van beide partijen is het remise.
Op een 8 bij 8 bord wordt Checkers gespeeld met 12 rode (of zwarte) en 12 witte damschijven, zie het plaatje met de beginopstelling. Alleen de donkere velden worden gebruikt. Zwart begint. Als je niet kunt zetten (omdat je geen schijven meer hebt, of omdat je vast staat), heb je verloren. Het spel lijkt sterk op gewoon dammen. Belangrijkste verschillen zijn dat een schijf niet achteruit mag slaan, en dat een dam (hier meestal "king" genoemd) niet over grotere stukken mag springen.
Er zijn twee soorten zetten: schuifzetten en slagzetten.
Slaan is verplicht.
Stukken mogen (schuin) vooruitgeschoven worden naar een leeg veld,
of een vijandig stuk slaan door naar het lege veld erachter (als dat er is, natuurlijk) te springen. Gewone schijven mogen alleen vooruit slaan.
Als een schijf de overkant bereikt wordt het een dam.
Een dam mag in alle vier richtingen slaan en zetten (schuiven).
Een damslag gaan niet voor.
Er bestaat ook meerslag. Sterker nog, er moet geslagen
worden als dat kan. De speler mag in zo'n geval zelf kiezen
welke slagzet gedaan wordt; meerslag gaat niet voor.
Elke schijf mag maximaal één
keer geslagen worden.
Als een schijf tijdens een meerslag een dam wordt,
blijft hij op dat moment meteen stil staan (er mag nog niet meteen
achteruit geslagen worden).
Let op: als meerslag niet geimplementeerd is, kost dat 1 punt.
Doe dit dus pas als het meeste goed werkt!
Wij zullen het spel wat algemener spelen, namelijk op een m bij n bord (met m
en n groter dan 2),
waarbij beide spelers r rijen bezetten
in de beginstand (bij het normale Checkers op een 8 bij 8 bord is r
gelijk aan 3). Het veld linksonder is zwart.
Het spel, zoals we het in eerste instantie gaan ontwerpen, moet een aantal keren achter elkaar gespeeld kunnen worden.
Bij het begin van elk spel geeft de gebruiker de grootte van het bord op (m bij n, met m
hoogstens const int maxrij en n hoogstens const int maxkolom; en r, maximaal m/2).
Als de gebruiker aan zet is, kan deze een toegestane zet doen, of juist de laatste eigen zet (en meteen de tussenliggende
computerzet) terugnemen.
De computer doet gedurende een spel ofwel steeds random (toegestane) zetten (optie 1), ofwel steeds zetten volgens een
of andere strategie (optie 2). De gebruiker moet voor het spel begint opgeven op welk van de twee manieren de
computer speelt.
Tot slot kan de speler ook steeds het aantal vervolgpartijen opvragen,
wat alleen zal werken als dit aantal redelijk beperkt is.
Let op: hierbij mag
je geen meerslag gebruiken, dus slagzetten blijven beperkt tot het slaan
van één schijf.
Verder spreken we hier een extra stop-conditie af
(om oneindige loops te voorkomen): een partij stopt als
beide spelers een dam hebben. Dit geldt dus niet voor het gewone
spel, alleen voor de berekening van het aantal vervolgpartijen.
In eerste instantie wordt de stand steeds (na de beurt van beide spelers) in een eenvoudig formaat op het scherm getoond. Later wordt Qt gebruikt om een en ander te verfraaien. (Een tip is om alvast met het "niet-grafisch programma" rekening te houden met hoe stukken verplaatst worden (via bron en doel coordinaten of via selecteren van vakjes (welke gebruik je straks bij het grafische gedeelte?)). In beide versies wordt bij elke stand tevens aangegeven hoeveel stukken van beide partijen er op dat moment op het bord staan. Bij de grafische versie moet een speler zijn zetten natuurlijk doorgeven door te klikken met de muis; zorg ervoor dat na het selecteren van het beginvakje van een zet dit vakje duidelijk herkenbaar is. Meerslag moet ook netjes ingevoerd en uitgevoerd worden — als het geimplementeerd is, natuurlijk.
Uiterste inleverdatum:
Normering: layout 1; commentaar 1,5; modulariteit 1,5; werking niet-grafisch 4 (-1 als meerslag helemaal niet geimplementeerd is); werking grafisch 2. Eventuele aanvullingen en verbeteringen: lees deze WWW-bladzijde.
Vragen en/of opmerkingen kunnen worden gestuurd naar:
kosters@liacs.nl.
19 november 2007 — http://www.liacs.nl/home/kosters/pm/op4pm07.html