|
Ö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
|
|
|
|