...
| Denne delen tar utgangspunkt i en delvis ferdigskrevet Asteroids-klasse. Oppgaven til Asteroids-klassen er todelt: 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. Astroids-klassen har noen finesser, som kan nyttige ved feilsøking:
Bruk AsteroidsProgram som hovedprogramklasse. Du kan hvis du vil bruke main-metoden til AsteroidsProgram, som tar inn navnet til Asteroids-(sub)klassen som eneste programargument. Det enkleste er kanskje å lage en main-metode i din egen Asteroids-(sub)klasse (her kalt Asteroids1), slik:
Trinn 1 - Asteroids1I 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:
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 - Asteroids2I 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 - Asteroids3I dette trinnet implementerer du støtte for å styre romskipet med piltastene (KeyCode.LEFT, KeyCode.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 fanget av sola! |
Code Block | ||||
---|---|---|---|---|
| ||||
emfs
/inheritance/ #java #package
BaseSpaceObject.java @ git@github.com:hallvard/jexercise/no.hal.jex.collection/src/inheritance/BaseSpaceObject.java;
Asteroids.java @ git@github.com:hallvard/jexercise/no.hal.jex.collection/src/inheritance/Asteroids.java;
AsteroidsProgram.java @ git@github.com:hallvard/jexercise/no.hal.jex.collection/src/inheritance/AsteroidsProgram.java;
;
/inheritance/ #java #package #test
SpaceObjectTest.java @ git@github.com:hallvard/jexercise/no.hal.jex.collection/src-gen/inheritance/SpaceObjectTest.java;
SpaceObject.jextest @ git@github.com:hallvard/jexercise/no.hal.jex.collection/tests/inheritance/SpaceObject.jextest; |
| |||||||
| |||||||
|