|
Projekt 1
- Snake Race
Gör en modifierad version av det klassiska spelet Snake, se bilden.
Funktionella krav
- En användare skall kunna spela mot N
stycken datorstyrda ormar. Pröva dej fram hur många ormar
det kan finnas i spelet innan det blir för svårt!
- Ormarna tävlar om vem som samlar ihop mest
mat. För varje matbit en orm lyckas plocka upp, växer ormen
och blir längre (pröva dej fram hur mycket orman skall
växa). Det finns ett begränsat antal matbitar (pöva dej
fram) som placeras slumpmässigt in på spelområdet vid
spelets början. Den orm som plockat upp mest matbitar när
maten är slut vinner spelet!
- Om en orm krockar med spelytans kant eller med
en annan orm tappar ormen alla matbitar och krymper ihop till sin
ursprungliga storlek. Ormen skall vara borta/stilla en stund (t.ex. fem
sekunder) innan den dyker upp i spelområdet igen på en
slumpmässig position
- Om en orm krockar med en annan orms huvud
tappar också den andra ormen alla sina matbitar och krymper
- När en orm tappar sina matbitar slumpas de
tappade matbitarna pånytt ut på spelytan.
- En "scoreboard" visar under spelets gång
hur många matbitar varje orm samlat och sorterar listan i
sjunkande ordning på så sätt att den orm som samlat
mest mat är först på listan osv.
- En siffra i närheten av "scoreboard" skall
också visa hur många matbitar det finns kvar på
spelområdet.
Tekniska krav
- Lös "samtidigheten" i spelet med
högnivå trådprogrammering (trådgrupper)
- Använd trådar på ett vettigt
sätt vid krocktesterna så att det förekommer så
korta loopar som möjligt i programmet och samtidigt också
så få trådar som möjligt
- Det får inte finnas onödiga
trådar igång medan spelet körs. Se till att alla
trådar som inte behövs är inaktiva.
- Identifiera alla situationer som kan leda till
trådkollision och försäkra att trådkollision inte
kan uppstå i programmet genom att använda någån
typ av synkronisering. Var noggrann med att du inte synkroniserar i
onödan.
Tips
- Ormarna
- Skapa en klass som definierar en orms
egenskaper
- Skapa en klass som definierar en länk av
en orm (en länk motsvarar en ruta av ormen i bilen ovan)
- Skapa en lista, t.ex. en ArrayList, som attribut i
ormklassen som innehåller en lista övar alla länkar som
finns i ormen
- Låt t.ex. första länken i
listan vara ormens "huvud"
- När masken växer, lägg till
länkar i slutet av listan
- När masken rör sej får
varje länk i listan den föregående länkens
förra position som ny position
- Rita gärna ut ormarna på ett
liknande sätt som i bilden ovan så man ser hur många
länkar det finns i ormen
- Krocktester
- Det som behöver kontrolleras är om
en orms huvud krockar med en
- vägg
- annan orms "svans"
- annan orms huvud
- För att undvika långa loopar kan
det löna sej t.ex. att
- utföra krockkontroll mot varje
länk av en orm i en egen tråd
- Styrning av användarens orm
- Använd t.ex. piltangenterna på
tangentbordet
- Styrning av datorspelarens orm (behöver
inte vara så intelligent!)
- För att en orm skall hitta matbitarna,
låt t.ex. en orm som rör sej
- i vågrät riktning styra
uppåt om en matbit finns ovanför ormen på samma
"längdgrad" som huvudet
- i lodrät riktning vända till
höger om en matbit finns till höger om ormen på samma
"breddgrad" som huvudet
- osv...
- För att en orm inte så lätt
ska köra in i en vägg eller in i en annan orm
- låt krocktestfunktionerna göra
en form av "pre hit test" som kollar om en orm krockar om ormen
fortsätter i samma rikting
- om ormen "håller på att krocka"
låt ormen slumpvist bya riktning (90 grader i någondera
rikting)
Bedömning
- Du kan maximalt samla ihop 22 poäng
för detta projekt
- Observera att tillämpningen av
trådar (inklusive synkronisering) i ditt program värderas
högst, så slösa inte tid
på oväsentligheter som t.ex.att sätta in grafiska
finesser
Ladda upp alla källkodsfiler
(hela Netbeans projektet) och en dokumentation
för din lösning på
BLS senast 28.10.2010
|
|
|
|