Projekt 1 - Snake Race

Gör en modifierad version av det klassiska spelet Snake, se bilden.

j 

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


Jonny Karlsson 2010