Institutionen för datavetenskap Umeå Universitet


OOP i Java - Obligatorisk uppgift 3:

Minesweeper


Introduktion

I uppgift 3 ska du göra en Java-applet som utgör ett litet spel - minröj.

Syftet med laborationen är att praktiskt öva på att skapa lyssnare och därmed vidare händelsestyrd programmering. Dessutom ingår problemlösning av algoritmisk karaktär.

Kraven på appletten

I den här uppgiften skall du skriva ett enkelt spel som en Java-applet. Spelet går ut på att spelaren får se en matris med fyrkantiga brickor. Ett antal minor finns utplacerade på spelplanen (dolda för spelaren). Spelarens uppgift är sedan att hitta igen dessa minor.

Genom att klicka på en ruta får spelaren veta hur många minor som finns vid angränsande rutor (om det finns några dvs). Finns inga angränsade minor så kommer programmet att leta sig vidare utifrån denna punkt till dess den endast hittar rutor som har angränsande minor. Fanns det en mina där spelaren klickade så har han/hon misslyckats och måste börja om från början igen.

Spelaren har också möjlighet att markera en position som mina (i appleten nedan görs detta genom att man håller ner shifttangenten samtidigt som man klickar på rutan man vill markera). När alla minor är markerade och alla positioner som inte innehåller minor är undersökta, har spelaren lyckats. Du har frihet att utforma gränssnittet hur du vill, dock ska det gå att göra följande:

  • Leta efter minor på en position.
  • Sätta in en markering som visar att man tror rutan innehåller en mina.
  • Ta bort en markering från punkten ovan (om spelaren ångrar sig)

Ditt spel bör bestå av minst 10x10 rutor. Försök att göra spelet så generellt att det är lätt att ändra antalet, antingen via parametrar i HTML-koden eller direkt på sidan.

Minorna slumpas ut vid spelets start. Du får själv bestämma hur många minor det skall finnas.

I denna uppgift är det ett måste att utnyttja objektorienteringens fördelar och göra varje ruta till ett eget självständigt objekt. Objekten skall lämpligen kunna lyssna på musklick, rita sig själv (på rätt ställe) osv. Vi kommer inte att godkänna en vanlig funktionell lösning, dvs ett huvudprogram som manipulerar en matris med heltal i eller något liknande. Det är förstås tillåtet (kanske till och med lämpligt) att ordna rut-objekten i en matris internt i programmet, dock går det att tänka sig andra intressanta lösningar.

Fundera noga på vilken arvshierarki som är lämplig. Fråga gärna handledarna om råd innan du börjar koda! Ett olämpligt val av hierarki och struktur kan göra uppgiften betydligt besvärligare än nödvändigt.

Det är inte den grafiska framtoningen som är det viktiga, fundera i första hand på struktur på lösningen. Finns det sedan tid över så är det fritt fram att utöka med funktionalitet eller snyggare grafik

Kom också ihåg att en applet inte har någon main-metod, så all kod som startar upp programmet läggs lämpligen i appletens init-metod.

Redovisning

  • Laborationen löses enskilt. Detta innebär att alla ska lösa uppgiften själv, men diskussion kring design av lösning är självklart tillåtet och uppmuntras. Varje enskild individ ska oförberett kunna redogöra för hela sin lösning.
  • Appletten skall länkas in på er hemsida på adressen ~username/javasu/minesweeper.html. För att hemsidan skall hamna på rätt plats ska .class och .html filerna läggas under katalogen F:/public_html/javasu/, där F: är beteckningen på användarens hemdisk på nätverket här på CS.
  • Lösningen skall redovisas i en rapport enligt anvisningarna på länken från kurshemsidan. De innehåll som ska finnas med är: framsida, innehållsförteckning, problemspecifikation, systembeskrivning, algoritmbeskrivning, testkörningar, problem och reflektioner samt källkod. Systembeskrivningen ska innehålla klassdiagram men metod och klassbeskrivningar kan med fördel läggas upp enligt javadoc som tidigare.
  • OBS er källkod ska inte länkas in på hemsidan. Denna ska finnas tillgänglig under katalogen F:/edu/javasu/lab3/. I BlueJ innebär detta att du ska skapa ditt projekt i katalogen F:/edu/javasu/ och döpa det till lab3.
  • Sista inlämningsdag onsdagen den 28/8 kl 15:00 i den röda brevlådan märkt A-kurser på våning 4 i MIT huset. Rapporten kan också lämnas direkt till någon av handledarna.

Exempel

Här följer ett exempel på hur det skulle kunna se ut. För att markera en ruta håll ned shift samtidigt som du klickar.

För kännedom

Laborationen är framtagen av Johan Eliasson, specifikation har blivit uppdaterad av Claes Gahlin.


http://www.cs.umu.se/kurser/TDBA54/SU02/ou/ou3/index.htm
Ansvarig för sidan: Marie Nordström
Senast ändrad 2002-07-02