Till KTH:s startsida Till KTH:s startsida

Extrauppgift2

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.