Extrauppgift 2
Definiera och implementera ett gränssnitt (interface) för presentation
och interaktion med en kvadratisk rutindelad spelplan. Använd
MVC-mönstret (model view controler) och implementera två spel som använder
gränssnittet.
Skriv två program, välj två av spelen 3*3-luffarschack, Othello, Memory och femtonspelet
eller något annat som inte är väsentligt lättare.
Spel av typ luffarschack, femtonspel, Othello m.fl. kan modelleras i ett program
på likartade sätt. Här begränsar vi oss till spel med kvadratisk spelplan, där alla
rutor kan ha samma färg. Spelet spelas genom att användaren ser spelplanen och
klickar i en ruta. Då uppdateras spelplanen och en meddelanderuta och därefter
kan användaren klicka igen o.s.v. I femtonspelet är det ju bara en spelare medan
luffarschack m.fl. har två spelare. Då tänker vi oss att de två spelarna alternerar
att ge indata. Användaren ska inte spela mot datorn utan programmet är endast
en "intelligent spelplan" som utför drag om de är riktiga. Samma princip används
vid en och två spelare: Klick, uppdatering, klick, uppdatering, ...
Det grafiska gränssnittet mot användaren skulle kunna ligga i enbart
en klass (tillåtet med flera) som kommunicerar med spelet man spelar
via gränssnittet. I princip känner inte denna klass till vilket spel
som spelas. Alla meddelanden och uppdateringar sker via gränssnittet
som du ska defineiera. I princip ska man kunna haka på någon annans
betygshöjande spelimplementation givet att den följer samma
gränssnitt. Det grafiska gränssnittet sköter interaktion och presentation, skickar in information om dragen till
spelklassen, läser av spelets aktuella ställning och presenterar den. Modellklasserna
har ansvar för spelet och dess logik, utför dragen och håller reda på aktuellt tillstånd.
Modellklasserna skall kunna användas via sitt gränssnitt av helt andra klasser
för presentation och interaktion om man så vill. Det är modellklassen som
avgör om något gått fel och producerar felmeddelande. Kommunikationsgränssnittet
skulle kunna se ut så här:
interface Rutspel {
boolean drag (int i, int j);
String[][] visaMatris ();
String visaAktuelltMeddelande ();
}
Anrop av metoden drag ska, om draget är fel definiera information om
felet och returnera falskt. En god regel vid interaktion är att en
användare alltid skall få återkoppling på sin inmatning därför bör även
godkända drag kommenteras.