Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

PlantUML Macro
class Asteroids {
}
class SpaceObject {
}
Asteroids *-right-> "*" SpaceObject: spaceObjects

class Asteroids1 {
}
class Asteroids2 {
}
class Asteroids3 {
}

Asteroids <|-- Asteroids1
Asteroids <|-- Asteroids2
Asteroids2 <|-- Asteroids3

Denne delen tar utgangspunkt i en delvis ferdigskrevet Asteroids-klasse. Oppgaven til Asteroids-klassen er todel: 1) å rigge opp verdenen med rom-objekter og 2) kjøre selve simuleringen. I koden for Asteroids-klassen, som ligger nederst på denne siden, legges det opp til at dette gjøres i henholdsvis init()- og run()-metoden, men du står forsåvidt fritt til å (gjen)bruke denne koden som du vil. Men for at du skal lære mest mulig om arv, så prøv å legge mest mulig av din egen kode i subklasser av Asteroids, heller enn å skrive den om. Vi foreslår at du gjør oppgaven i følgende trinn, med én subklasse pr. trinn.

Trinn 1 - Asteroids1

I dette trinnet er målet å få lagt inn noen SpaceObject-instanser, se (til) at simuleringen beveger dem på skjermen og få kollisjonsdeteksjon til å fungere.

SpaceObject-instansene opprettes i init()-metoden og legges inn med den ferdigskrevne add-metoden i Asteroids-klassen. For å få simuleringen til å virke, så må du fylle inn kode i tick()-metoden:

  • for hvert SpaceObject må du utføre ett simuleringstrinn
  • for hvert SpaceObject-par må du sjekke for kollisjon, altså om de overlapper hverandre

Sjekk for overlapp kan gjøres på mange måter, f.eks. sjekke overlapp av såkalt "bounding box" eller om midten eller hjørnene i det ene polygonet er inni det andre.

Se http://stackoverflow.com/questions/345838/ball-to-ball-collision-detection-and-handling dersom du vil simulere kollisjoner som (fullstendig) elastiske støt.

Trinn 2 - Asteroids2

I dette trinnet er målet å få gravitasjonslogikken til å fungere og sjekke det ved å legge inn en sol (stor, gul og rund Asteroid-instans) og masse asteroider (Asteroid-instanser av med ulik tetthet og størrelse).

Utvid tick()-metoden slik at du for hvert SpaceObject-par beregner og håndterer den gjensidige gravitasjonskraften.

Trinn 3 - Asteroids3

I dette trinnet implementerer du støtte for å styre romskipet med piltastene (KeyCode.LEFTKeyCode.RIGHT og KeyCode.UP). Finn selv ut hvilke Asteroids-metoder som må redefineres, for å få dette til. Sørg for å legge til et romskip og prøv å unngå å kollidere eller å bli slukt av sola!

...