Laboration 7 (Del3)

 

Den här delen är sista delen av laborationen. I den här delen vill vi koppla ihop den textbaserade delen av programmet (klassen: Spelplan) till den grafiska delen (klasserna: GPlan, Kontroll).

Vi kommer inte att behöva deklarera några nya klasser men vi behöver deklarera några nya variabler och metoder.

Här utgår vi från att koden för Del2 och Del1 är färdig och vi börjar lägga till och modifiera delar av koden för Del2 för att göra ett fungerande grafiskt luffarschackspel.

 

Följande java-kod finns i metoden main i klassen Kontroll

GPlan gplan = new GPlan(8,8);

Kontroll c = new Kontroll(gplan);

 

Följande bild visar hur ovanstående instanser hänger ihop (jämför bilden med koden ovan)

 

 

Vi ser att klassen Spelplan inte finns med i bilden. Spelplan är egentligen den del som innehåller det viktiga data och funktionalitet för programmet. Där finns egentligen all information om spelarnas drag. Dessutom finns där många viktiga metoder som bl.a. avgör om någon har vunnit, eller spelet är oavgjort o.s.v.  Detta betyder att vi måste få in Spelplan i ovanstående bild för att kunna ge Del2  av spelet en mening. Med andra ord vill vi ändra koden så att vi får följande bild:

 

 

 Vi ser att instans av klassen GPlan har en referens till insans av klassen Spelplan, detta är för att GPlan ska ha lika många knappar i en matris som antal rutor i klassen Spelplan d.v.s. om t.ex. vi har en 15x15 matris i Spelplan så ska GPlan också ha 15x15 knappar i en matris.

I klassen Kontroll finns två referensvariabler, ena till GPlan och den andra till Spelplan. Detta är för att kontrollen ska kunna komma åt grafiska komponenter för att kunna hämta indata från dem, möjligtvis bearbeta inhämtade data och därefter skicka vidare till Spelplan för uppdatering av spelplanet och kontroll för vinnaren osv.

 

Gör följande med avseende på den senare bilden:

  1. Deklarera en instansvariabel (tplan) av typen Spelplan i klassen Kontroll.
  2. Se till att main metoden i klassen Kontroll har följande kod:


Spelplan tplan=new Spelplan(5,5);
GPlan gplan=new GPlan(tplan);
Kontroll c=new Kontroll(gplan,tplan);

  1. Deklarera en ny konstruktor i klassen Kontroll så att instansering av klassen Kontroll enligt ovanstående koden i punkt 2 blir möjligt.(En ny konstruktor med två parametrar)
  2. Deklarera en instansvariabel av typen boolean som ska hålla reda på vems tur det är under spelet (spelare1 eller spelare 2).
  3. Översätt följande till java-kod i metoden actionPerformed()
    1. Lagra rad och kolumn för den nedtryckta knappen i två variabler.
    2. Kontrollera vems tur det är och därefter uppdatera spelplanet efter den knappens position (rad och kolumn) och spelarens symbol.
    3. Använd metoden geSymbol i klassen SpelPlan och metoden sättSymbol som du kommer att deklarera sedan i punk 9 här. Metoderna använder man för att ändra knappens label till den symbol som finns i motsvarande ruta i klassen SpelPlan.
    4. Med hjälp av metoden kontrollera5Ira, kontrollera om någon har vunnit och i så fall meddela detta i TextArean som finns i klassen GPlan. Här ska man använda sig av metoden sättMeddelande som ska deklareras lite senare i punkt 10.
    5. Med hjälp av metoden kontrolleraLediga, kontrollera om alla knappar har använts och i så fall meddela att spelet är slut utan någon vinnare i TextArean som finns i klassen GPLan. Här ska man använda sig av metoden sättMeddelande som ska deklareras lite senare i punkt 10.
  4. Lägg till en instansvariabel (tplan) av typen SpelPlan i klassen GPlan.
  5. Deklarera en ny konstruktor i klassen GPLan så att instansering av klassen GPlan enligt koden i punkt 2 blir möjligt.(den nya konstruktorn har en parameter av typen SpelPlan).
  6. Skriv följande kod i den nya konstruktoren i GPlan för att kunna stänga fönstret och därmed avsluta programmet:

           
    addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                  System.exit(0);}});

  7. Deklarera en ny metod sättSymbol i klassen GPlan. Metoden har till uppgift att ändra label på en nedtryckt knapp till ”X” eller ”O”.
  8. Deklarera en ny metod sättMeddlande i klassen GPLan. Metoden får ett meddelande(String) som ska visas i TextArea:n.

 

 

Nu ska du kunna kompilera alla java-filer och köra klassfilen Kontroll:
javac Kontroll.java

java Kontroll

 

Spelet kommer att ha lite brister t.ex. man kan fortsätta spela fast någon har vunnit, eller man kan trycka på samma knapp fler än en gång osv. Använd den tid du har kvar för att förbättra ditt luffarschackspel.

 

Tips:

·        Kolla i API:n för klassen Button, efter en metod som gör att man inte kan trycka på knappen (alltså det händer inget om man klickar på den)

·        Använd dig av knappar eller andr komponent för att låta användaren starta spelet igen när spelet är slut.

 

Extrauppgifter (inte obligatorisk):

·        Gör ett Applet av det hela och lägg den på din hemsida.

·        Gör så att vinnar raden markeras med t.ex. en annan färg när någon vinner.