Övning4 - Trådsäkerhet och listor


Vi bygger vidare på "Space Invaders" som vi jobbat med i övning 2 och övning 3.

1. Ändra om fiendeskeppen så att
  • Ett nytt skepp "flyger in" från spelets övre vänstra varje sekund
  • Vid varje träff mot spelets ena kant förflyttar sej varje fiendeskepp ett steg neråt (lika mycket neråt som skeppet är högt + lite till för att få mellanrum mellan skeppen)
Märk att vi nu får ett dynamiskt antal fiendeskepp med okänt maxantal. Vi behöver dessutom ständigt ta bort skeppobjekt varifrån som helst ur tabellen med skeppobjekt. Det blir nu klumpigt att spara skeppobjekten i en vanlig tabell (array). En lista (t.ex. ArrayList) är i detta fall en effektivare lösning.


2. Byt ut tabellen med skeppobjekt mot en ArrayList dit du sparar alla objekt för fiendeskepp
  • Om ett fiendeskepp blir träffat av ett skott, ta bort motsvarande ArrayList-element
  • Ändra också om utritningsfunktionen i paint-metoden så att alla objekt i listan ritas ut (isAlive() eller isInterrupted() kontrollen behövs alltså inte mera)

3. Programmera om funktionen som sköter om avfyrandet av bomber på så sätt att man nu skall kunna avfyra hur många bomber åt gången som helst.
  • Spara bombobjekten i en ArrayList.
  • Ta bort ett bombobjekt ur listan om bomben far utanför spelområdet eller träffar ett fiendeskepp
  • Ändra om paint-metoden så att alla bomber som finns i listan ritas ut

4. Ta i beaktande trådsäkerheten när du programmerar!
  • Synkronisera uppdateringen av listan för att undvika trådkollision (vi har ju en mängd olika trådar som möjligtvis exakt samtidigt raderar eller sätter till element i listan och p.g.a. detta kan vi få oväntade resultat!)

Ladda upp din lösning, innehållande alla källkods- och projektfiler, på BLS senast fredag 8.10


Jonny Karlsson 2009