Nada

Laboration 2 - Hoppsansa

hoppbild.gif
I den här labben ska du göra en applet med ett knepigt spel för att träna mer på komponenter, inre klasser, layouter, lyssnare och designmönstret Model-View-Control. Spelet heter Hoppsansa och ser ut så här.
För att få godkänt på labben måste man ha lyckats byta plats på dom gröna och dom röda!

Model - en textversion av spelet

Det är meningen att du ska lägga spellogiken i klassen Model som kan köras fristående i terminalfönstret, så här.
  GGG RRR   Välj 0-6: 2
  GG GRRR   Välj 0-6: 4
  GGRG RR   Välj 0-6:
Utom main (som är en oändlig slinga) har Model två metoder som anropas
  move(2); //gör ett drag med ruta 2 om det går, annars ingenting
  get(5);  //returnerar färgen (0, 1 eller 2) på ruta 5
Det är listigt att ha en variabel tom som anger index för tomma rutan. Metoderna kan nu anropas från den applet, som ska vara din View.

En applet med en inre knappklass

I stället för att lägga sju vanliga Button-objekt i en GridLayout ska du skriva en egen knappklass Ruta som är en Button med en extra set-metod, så att man kan skriva
   ruta[i].set(0); //Knappen blir vit
   ruta[i].set(1); //Knappen blir grön
   ruta[i].set(2); //Knappen blir röd
Klassen Ruta är en inre klass i appleten. När rutorna skapats måste dom få lyssnare av typen ActionListener. Tänk efter om lyssnaren bör vara en yttre klass, en inre klass, en anonym klass eller en redan existerande containerklass. Förmodligen har du en enda actionPerformed(ActionEvent e) som ska ta hand om alla sju knapparnas händelser. Hur får man reda på vilken knapp som har genererat händelsen? Ett sätt är att i en for-slinga testa igenom alla ruta[i] och se om någon är lika med e.getSource(). Extrauppgift: Låt det vara grodor som hoppar åt höger och pingviner som hoppar åt vänster.

frog.gif frog.gif frog.gif                 penguin.gif penguin.gif penguin.gif

En kul applet av ................................... avnjöt.............................. den .................


Sidansvarig: <karlm@nada.kth.se>
Senast ändrad 16 mars 2007
Tekniskt stöd: <webmaster@nada.kth.se>