hunter:hunterfertig:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
hunter:hunterfertig:start [2023/02/17 09:31] – 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(); | ||
+ | |||
+ | /** | ||
+ | * Class Main manages huter, target and enemies | ||
+ | * and maintains program state. | ||
+ | * States: " | ||
+ | */ | ||
+ | class HunterGame extends Actor { | ||
+ | |||
+ | | ||
+ | | ||
+ | Group boulders; | ||
+ | |||
+ | | ||
+ | |||
+ | Text scoreText; | ||
+ | int score = 0; | ||
+ | |||
+ | Text caption; | ||
+ | |||
+ | int timeSpacePressed = 0; // time since space key has been pressed in milliseconds | ||
+ | |||
+ | | ||
+ | hunter = new Hunter(this); | ||
+ | | ||
+ | boulders = new Group(); | ||
+ | |||
+ | scoreText = new Text(40, 40, 70, " | ||
+ | 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); | ||
+ | |||
+ | setState(" | ||
+ | |||
+ | } | ||
+ | |||
+ | 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=" | <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)) { | ||
+ | vx = 0; | ||
+ | vy = -v; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowDown)) { | ||
+ | vx = 0; | ||
+ | vy = v; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowRight)) { | ||
+ | vx = v; | ||
+ | vy = 0; | ||
+ | } | ||
+ | if(isKeyDown(Key.ArrowLeft)) { | ||
+ | vx = -v; | ||
+ | vy = 0; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
</ | </ | ||
<script type=" | <script type=" | ||
+ | class Target extends Circle { | ||
+ | |||
+ | | ||
+ | super(-100, -100, 8); | ||
+ | setFillColor(Color.lightgreen); | ||
+ | |||
+ | // dont create target overlapping with hunter | ||
+ | do { | ||
+ | |||
+ | | ||
+ | |||
+ | } while (collidesWith(main.hunter)) | ||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
- | <script type=" | + | <script type=" |
+ | class Boulder extends Sprite { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | // create boulder righthand outside view | ||
+ | super(900, Random.randdouble(0, | ||
+ | |||
+ | setImageIndex(Random.randint(108, | ||
+ | scale(Random.randdouble(0.5, | ||
+ | |||
+ | } | ||
+ | |||
+ | | ||
+ | move(v, 0); | ||
+ | rotate(w); | ||
+ | |||
+ | // if boulder leaves view to the left then swap it to | ||
+ | if(getCenterX() < -50) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
</ | </ | ||
hunter/hunterfertig/start.1676626302.txt.gz · Zuletzt geändert: 2023/02/17 09:31 von Martin Pabst