Övning3 - Trådsäkerhet och länkade listor

Vidareutveckla spelet i Exempel4 så att:
  • Bollarna får en slumpmässig diameter när de skapas
  • Om en boll krockar med en annan inverterar den sin färdriktning och förökar sej (m.a.o. om två bollar krockar med varandra byter de båda riktning samtidigt som det kommer in två nya bollar på spelplanen)
  • Antalet bollar vid liv visas hela tiden i Appletens ena hörn under spelets gång
  • När spelaren lyckats "skjuta" alla bollar visas texten "GAME OVER" på skärmen vartefter alla trådar avslutas och trådgruppen raderas
Förverkliga programmet så att boll-objektena sparas i en länkad lista i stället för i en statisk tabell. På detta sätt blir det mycket enklare att ta bort och lägga till bollar.

Placera algoritmen som kollar om en boll krockar med en annan i  "bollhanteringstråden"  (den tråd som sköter om att bollens kordinater uppdateras). Då blir principen för algoritmen enkel: varje boll kollar om den "just nu" krockar med någon annan.

Ta trådsäkerheten i beaktande när du gör programmet. Många trådar kommer ju t.ex. att hantera samma länkade lista och samma "antal bollar" variabel. Finns det t.ex. risk för "thread interference"? Fungerar spelet korrekt utan synkronisering?

Experimentera och pröva dej fram genom att ha olika antal bollar i början av spelet och olika värden för max antal bollar. Pröva också köra en version som kan ha oändligt antal bollar (skapa trådgruppen med Executors.newCachedThreadPool())


Jonny Karlsson 2009