hunter:hunterfertig:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
hunter:hunterfertig:start [2023/02/03 06:56] – angelegt Martin Pabst | hunter:hunterfertig:start [2023/05/26 07:02] (aktuell) – Martin Pabst | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
< | < | ||
- | <div class=" | + | <div class=" |
- | <script type=" | + | <script type=" |
+ | // Main Program: | ||
+ | SystemTools.setSpeed(-1); | ||
new HunterGame(); | new HunterGame(); | ||
+ | /** | ||
+ | * Class Main manages huter, target and enemies | ||
+ | * and maintains program state. | ||
+ | * States: " | ||
+ | */ | ||
class HunterGame extends Actor { | class HunterGame extends Actor { | ||
+ | |||
+ | | ||
+ | | ||
+ | Group boulders; | ||
- | Circle hunter; | + | String state; // allowed values: " |
- | | + | |
- | | + | |
- | double v = 4; | + | Text scoreText; |
+ | int score = 0; | ||
- | Circle target; | + | Text caption; // displays big caption: " |
+ | |||
+ | int timeSpacePressed = 0; // time since space key has been pressed in milliseconds | ||
- | int punkte | + | HunterGame() { |
+ | hunter | ||
+ | |||
+ | boulders = new Group(); | ||
- | Group enemies | + | scoreText |
+ | scoreText.setFillColor(Color.bisque); | ||
+ | scoreText.setBorderColor(Color.cadetblue); | ||
+ | caption = new Text(400, 200, 80, " | ||
+ | caption.setFillColor(Color.bisque); | ||
+ | caption.setBorderColor(Color.darkcyan); | ||
- | | + | caption.setAlignment(Alignment.center); |
- | + | ||
- | super(); | + | |
- | hunter = new Circle(400, 300, 5); | + | |
- | target = new Circle(0, 0, 5); | + | |
- | target.setFillColor(Color.green); | + | |
- | | + | |
} | } | ||
+ | void makeNewTarget() { | ||
+ | target = new Target(this); | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * this method is called 30 times per second | ||
+ | */ | ||
| | ||
+ | |||
+ | if(state == "game running" | ||
+ | // did hunter catch target? | ||
+ | | ||
+ | target.destroy(); | ||
+ | makeNewTarget(); | ||
+ | score++; | ||
+ | scoreText.setText(score); | ||
+ | } | ||
+ | |||
+ | // add boulder with probability of 1/100 | ||
+ | | ||
+ | addBoulder(); | ||
+ | | ||
+ | |||
+ | | ||
+ | setState(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | // if space key is pressed consider changing state... | ||
+ | if(isKeyDown(" | ||
+ | | ||
+ | |||
+ | | ||
+ | case " | ||
+ | | ||
+ | | ||
+ | case "game over" : | ||
+ | | ||
+ | | ||
+ | default : | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | void addBoulder() { | ||
+ | boulders.add(new Boulder(this)); | ||
+ | } | ||
+ | |||
+ | void setState(String newState) { | ||
+ | switch(newState) { | ||
+ | case " | ||
+ | caption.setVisible(true); | ||
+ | scoreText.setVisible(false); | ||
+ | caption.setText(" | ||
+ | hunter.setVisible(false); | ||
+ | hunter.moveTo(400, | ||
+ | break; | ||
+ | case "game running" | ||
+ | caption.setVisible(false); | ||
+ | hunter.setVisible(true); | ||
+ | scoreText.setVisible(true); | ||
+ | score = 0; | ||
+ | scoreText.setText(0); | ||
+ | makeNewTarget(); | ||
+ | break; | ||
+ | case "game over" : | ||
+ | caption.setVisible(true); | ||
+ | caption.setText(" | ||
+ | boulders.destroyAllChildren(); | ||
+ | hunter.setVisible(false); | ||
+ | target.destroy(); | ||
+ | break; | ||
+ | | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | state = newState; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | <script type=" | ||
+ | class Hunter extends Circle { | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | super(400, 300, 10); | ||
+ | this.main = main; | ||
+ | setFillColor(Color.red); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(main.state != "game running" | ||
+ | | ||
+ | } | ||
+ | |||
+ | move(vx, vy); | ||
+ | |||
if(isKeyDown(Key.ArrowUp)) { | if(isKeyDown(Key.ArrowUp)) { | ||
vx = 0; | vx = 0; | ||
Zeile 41: | Zeile 166: | ||
vx = 0; | vx = 0; | ||
vy = v; | vy = v; | ||
- | } | ||
- | if(isKeyDown(Key.ArrowLeft)) { | ||
- | vx = -v; | ||
- | vy = 0; | ||
} | } | ||
if(isKeyDown(Key.ArrowRight)) { | if(isKeyDown(Key.ArrowRight)) { | ||
vx = v; | vx = v; | ||
+ | vy = 0; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowLeft)) { | ||
+ | vx = -v; | ||
vy = 0; | vy = 0; | ||
} | } | ||
- | hunter.move(vx, | + | } |
+ | } | ||
+ | </ | ||
- | if(hunter.collidesWith(target)) { | + | <script type=" |
- | moveTarget(); | + | class Target extends Circle { |
- | punkte++; | + | |
- | | + | |
+ | super(-100, -100, 8); | ||
+ | | ||
- | | + | // dont create target overlapping with hunter |
- | } | + | do { |
+ | |||
+ | | ||
- | | + | |
- | | + | |
- | ) { | + | |
- | | + | |
- | } | + | |
- | if(hunter.collidesWith(enemies)) { | + | } |
- | gameOver(); | + | </ |
- | } | + | |
- | } | + | <script type=" |
+ | class Boulder extends Sprite { | ||
- | void moveTarget() { | + | double v = Random.randdouble(-3, -1); // speed in pixel per 1/30 s |
- | | + | double w = Random.randdouble(-5, 5); // angular speed in degrees per 1/30 s |
- | | + | |
- | void addEnemy() { | + | Boulder(HunterGame main) { |
- | | + | |
- | | + | super(900, Random.randdouble(0, 600), SpriteLibrary.TowerDefense, 108); |
- | | + | |
- | } | + | |
+ | | ||
- | void gameOver() { | ||
- | println(" | ||
- | stopActing(); | ||
} | } | ||
+ | | ||
+ | move(v, 0); | ||
+ | rotate(w); | ||
+ | | ||
+ | // if boulder leaves view to the left then swap it to | ||
+ | if(getCenterX() < -50) { | ||
+ | | ||
+ | } | ||
+ | } | ||
} | } | ||
</ | </ |
hunter/hunterfertig/start.1675407378.txt.gz · Zuletzt geändert: 2023/02/03 06:56 von Martin Pabst