IP 1, Gesällprov: Beskrivning av Mattias Olssons Sänka Skepp spel
Sänka Skepp
Först ger jag en mer teknisk beskrivning över hur själva programmet är uppbyggt, sen ger jag en mer generell beskrivning av hur spelet fungerar när man spelar.

Spelet består av 4 st klasser:
  • MainApp
  • , Denna klass är spelets huvudklass. Den startar spelet, ritar upp alla komponenter och skapar vid starten en serversocket. Ifall spelaren väljer att koppla upp på motståndarens server så kopplas ens engna serversocket ner och istället skapas en socket på motståndarens ip adress och portnr. De skapas två "rutnät" på vardera 100 rutor i konstruktorn. Det egna används när man sätter ut sina båtar och dessa 100 rutor är av BoatButton typ. Motståndarens rutor är av EnemyButton typ. Bägge dessa klasser ärver klassen JButton.

  • CommunicationThread (CT)
  • , Den här klassen skapas när uppkopplingen mot motståndaren sker. CT sköter all kommunikation med motståndaren. Alla utgående meddelande går iväg till motståndaren i String form med CT:s sendmetod. All inkommande meddelande läggs först i en string som sen delas upp. Kommunikationen bygger på att en "styrsiffra" läggs först i den string som skickas. När motståndarens CT:s tar emot stringen delar den upp stringen i 2 delar. Den första delen (styrsiffran alltså) avgör ifall vad som skall hända med stringen. Det finns sju olika sorters meddelande: chatmeddelande, spelare klar meddelande, "Kolla om jag är träffad meddelande", Skott träffade fiende,Skott missade fiende, motståndare har kopplat ner meddelande och du har förlorat meddelande.

  • BoatButton
  • , Denna klass sitter inne på all information om den enskilda knappen. Under spelets gång skickar motståndaren ett "skott". Då kollar man i Boatbutton om just denna är en "båt" om den är det så läggs en styrsiffra för "träff" samt placeringsnr på Boatbutton i en string som skickas tillbaka till motståndaren. Samma sak om det inte är en "båt" på denna ruta, men då skickas styrsiffran för miss med i stringen tillbaka.

  • EnemyButton
  • , Denna klass är den minsta av klasserna. Dess enda funktion är att när spelaren fått svar om knappen är en bom eller träff så ändras bilden (ikonen) på knappen.

    Kommunikationen pågår på detta vis med att skicka stringar mellan spelarna till någon har vunnit. Då öppnas på vinnarsidan en grattis ruta upp, och på förlorarsidan en förlustruta. Efter det att någon vunnit så kan man fortsätta chatta om man vill men knapparna ska ej gå att trycka. För att spela ett spel till måste programmet startas om och en ny koppling mellan spelarna skapas.

    Spelets gång
    Ja hur spelar man då detta spel. Alla har förmodligen spelat sänka skepp nångång och vet hur det funkar. Detta Sänka skepp spel har jag förenklat något pga tidsaspekten och min ringa programmeringserfarenhet.

    Ladda först spelet till den egna datorn. Ställ dig i samma mapp som filen Skeppspel.jar finns i. Spelet kan nu startar på 2 olika sätt. Det ena är att man skriver java -jar Skeppspel.jar <önskat portnr> (se Bild 1). Det andra sättet är att skriva java -jar Skeppspel.jar . Spelet startar då utan argument och porten sätts default till 2000.

    Spelet går fungerar endast för 2 spelare som möter varandra. En server är inbyggd i spelet vilket gör att spelarna kan välja vem som skall koppla upp till vem. Med motståndarens ip adress och den port som angivits vid starten (eller defaultporten 2000) kan man nu koppla upp sig till motståndaren genom att använda "koppla upp" knappen (se bild 2).

    Nu skall sätter spelarna ut sina "båtar". 3 st båtar som vardera ska bestå av 4 rutor ihopsatta. Spelet har ingen inbyggd kontroll att spelarna sätter ut dessa korrekt utan det är upp till spelarna att vara ärlig. När man har lagt ut 12 rutor blir knappen "Klar för spel" tryckbar. Den som först sätter ut sina båtar och trycker på "Klar för spel" får starta först. När båda spelarna är klara med utsättningen börjar själva spelet. Statustexten informerar ifall det är din tur att skjuta på fienden. Nu turas man om med att skjuta varannat skott. Den som först sänker motståndarens alla båtar vinner förstås.

    Nedan visas "screenshots" från spelet.
    Sänka Skepp

    Bild 1


    Bild 2


    Bild 3, spelaren har satt ut sina båtar och är redo att trycka "Klar för spel"



    Bild 4, Spelet är igång och känslorna svallar när spelarna kommunicerar i chatten



    Bild 5, Spelet är över och spelaren har blivit besegrad