Versions Compared

Key

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

...

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

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

AsteroidAsteroids <|-- Asteroids1
AsteroidAsteroids <|-- Asteroids2
Asteroid2 <|-- 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 hjørnene i det ene polygonet er inni det andre.

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 (venstre, høyre og forover). 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!

...