You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Oppgaven går ut på å implementere spillet Slagskip (eng: Battleship) (http://en.wikipedia.org/wiki/Battleship_(game)) som skal kunne kjøres i konsollen. Det er to spillere, med hvert sitt brett med utplasserte skip. Ulike typer skip har ulik størrelse og fasong. Målet er å senke alle motstanderens skip ved å bombe rutene som skipene dekker. Motstanderens skip er skjult for spilleren i starten, men siden en etter å ha bombet en rute får vite om en har truffet eller ikke, så får en oversikt over motstanderens brett etterhvert. Et skip er senket når alle rutene det dekker er truffet. Spillet er vunnet når en spiller har senket alle motstanderens skip.

I vår implementasjon er det ikke meningen at en spiller skal kunne se hvor sine egne skip er plassert. Siden begge spillerne spiller på samme maskin, så er jo ikke det særlig gunstig.

Et Slagskip-brett er et rutenett på 10 x 10 ruter. Det finnes fem forskjellige skip, med følgende dimensjoner:

Type skipDimensjoner
Hangarskip

2 x 3

Slagskip1 x 4
Ubåt1 x 3
Fregatt1 x 3
Patruljebåt1 x 2

Merk at skip kan orienteres i to retninger, altså ligge enten horisontalt eller vertikalt på brettet.

Krav

  • Programmet må bestå av minst tre klasser (de trenger ikke ha samme navn som under):

    • Cell – en klasse for å representere (innholdet i) en rute på brettet.

    • BattleshipBoard – en klasse for selve spillbrettet.

    • BattleshipProgram – et hovedprogram for interaksjon med spilleren.

  • Brett-klassen må kunne initialiseres med en String på standard-formatet, som beskrevet under.

  • Spillet skal støtte to spillere med hvert sitt brett.

  • Spillet må veksle mellom de to spillerne og skrive ut til konsollet hvilken spiller sin tur det er og brettet med oversikt over bom og treff for denne spilleren. Så skal de kunne skrive inn koordinatene for neste bombe.

  • Etter at en bombe er sluppet så skal det komme en tekstlig beskjed i konsollen om det var treff eller ikke, i tillegg til å kunne se det på motstanderens brett.

  • Når en av spillerene har vunnet skal spillet stoppes, og det skal skrives til konsoll hvem som vant.

Eksempelbrett

I tabellen under kan du finne tre eksempelbrett. BattleshipBoard-klassen må ha en konstruktør som tar inn en String, og konstruerer et brett av denne strengen. Eksempelstrengene består av punktum og X, der punktum betyr hav og X betyr skip. "\n" betyr linjeskift. Du må gjerne støtte egne tegn for hver type skip, bare du bruker bokstaver (A-Z). Hvis du lagrer brett for spill underveis, så bruk små bokstaver for ruter som er truffet og store for de som ikke er. Du trenger ikke bruke disse eksempelbrettene, du må gjerne lage dine egne. 


EksempelbrettSer slik ut
SAMPLE_LEVEL1"...XX.....\n...XX..XXX\n...XX.....\n..........\n..........\n.X........\n.X...XXX..\n.X........\n.X..XX....\n.........."
SAMPLE_LEVEL2".XXX......\n.XXX....X.\n........X.\n........X.\n...XX...X.\n..........\n..X..XXX..\n..X.......\n..X.......\n.........."
SAMPLE_LEVEL3"..........\n..........\n..........\n..XX......\n...XXX....\n....XXXX..\n...XXX....\n.XXX......\n.XXX......\n.........."

Tips: Lag en egen klasse Levels.java som har disse eksempelbrettene som felt (tilstand). De kan være public og static. Se /sokoban/SampleLevels.java for inspirasjon.

Forslag til grafisk implementasjon og gjennomførelse av to runder:

 

TegnForklaring
~Hav. Uskutt rute. Ligner på bølge, ikke sant?
.Skutt rute, men ingen skip truffet.
XSkip truffet.
Player 1's turn:
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |

2 2
That's a miss...
Player Two's turn:
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |


5 6
That's a hit!
Player One's turn:
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ . ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |


2 5
That's a miss...
Player Two's turn:
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ X ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
  • No labels