Benutzer-Werkzeuge

Webseiten-Werkzeuge


hunter:hunterfertig:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
hunter:hunterfertig:start [2023/02/03 06:56] – angelegt Martin Pabsthunter:hunterfertig:start [2023/05/26 07:02] (aktuell) Martin Pabst
Zeile 2: Zeile 2:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 400px; width: 80%" data-java-online="{'withBottomPanel': true, 'id': 'hunter'}">+<div class="java-online" style="height: 400px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'hunter'}">
  
-<script type="text/plain" title="Hunter.java">+<script type="text/plain" title="Main.java"> 
 +// Main Program: 
 +SystemTools.setSpeed(-1);  // maximum execution speed
 new HunterGame(); new HunterGame();
  
 +/** 
 + * Class Main manages huter, target and enemies 
 + * and maintains program state. 
 + * States: "startscreen", "game running", "game over" 
 + */
 class HunterGame extends Actor { class HunterGame extends Actor {
 +   
 +   Hunter hunter;
 +   Target target;
 +   Group boulders;
  
-   Circle hunter; +   String state    // allowed values: "startscreen", "game running", "game over"
-   double vx = 4; +
-   double vy = 0;+
  
-   double v 4;+   Text scoreText;   // displays score 
 +   int score 0;
  
-   Circle target;+   Text caption    // displays big caption: "Hunter Game" or "Game Over" 
 +    
 +   int timeSpacePressed = 0;  // time since space key has been pressed in milliseconds
  
-   int punkte 0;+   HunterGame() { 
 +      hunter new Hunter(this); 
 +       
 +      boulders = new Group();     // holds all enemies
  
-   Group enemies = new Group();+      scoreText = new Text(40, 40, 70, "0"); 
 +      scoreText.setFillColor(Color.bisque); 
 +      scoreText.setBorderColor(Color.cadetblue);
  
 +      caption = new Text(400, 200, 80, "Hunter Game");
 +      caption.setFillColor(Color.bisque);
 +      caption.setBorderColor(Color.darkcyan);
  
-   HunterGame() { +      caption.setAlignment(Alignment.center); 
-       + 
-      super(); +      setState("startscreen");   // start game
-      hunter = new Circle(400, 300, 5); +
-      target = new Circle(0, 0, 5); +
-      target.setFillColor(Color.green); +
-      moveTarget();+
  
    }    }
  
 +   void makeNewTarget() {
 +      target = new Target(this);
 +   }
 +
 +   /**
 +    * this method is called 30 times per second 
 +    */
    public void act() {    public void act() {
 +
 +      if(state == "game running") { 
 +         // did hunter catch target?
 +         if(hunter.collidesWith(target)) {
 +            target.destroy();
 +            makeNewTarget();
 +            score++;
 +            scoreText.setText(score);
 +         }
 +
 +         // add boulder with probability of 1/100
 +         if(Math.random() < 0.01) { 
 +            addBoulder();
 +         
 +
 +         if(hunter.isOutsideView() || hunter.collidesWith(boulders)) {
 +            setState("game over");
 +         }
 +
 +      } 
 +
 +      // if space key is pressed consider changing state...
 +      if(isKeyDown(" ") && System.currentTimeMillis() - timeSpacePressed > 300) {
 +         timeSpacePressed = System.currentTimeMillis();
 +
 +         switch(state) {
 +            case "startscreen"
 +               setState("game running");
 +               break;
 +            case "game over" : 
 +               setState("startscreen");
 +               break;
 +            default : 
 +                
 +         }
 +      }
 +
 +   }
 +
 +   void addBoulder() {
 +      boulders.add(new Boulder(this));
 +   }
 +
 +   void setState(String newState) {
 +      switch(newState) {
 +         case "startscreen"
 +            caption.setVisible(true);
 +            scoreText.setVisible(false);
 +            caption.setText("Hunter Game");
 +            hunter.setVisible(false);
 +            hunter.moveTo(400, 300);
 +            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("Game Over");
 +            boulders.destroyAllChildren();
 +            hunter.setVisible(false);
 +            target.destroy();
 +            break;
 +         default : 
 +             
 +      }
 +
 +
 +      state = newState;
 +   }
 +
 +
 +
 +
 +}
 +</script>
 +
 +<script type="text/plain" title="Hunter.java">
 +class Hunter extends Circle {
 +   double vx = 5;
 +   double vy = 0;
 +
 +   double v = 5;
 +
 +   HunterGame main;
 +
 +   Hunter(HunterGame main) {
 +      super(400, 300, 10);
 +      this.main = main;
 +      setFillColor(Color.red);
 +   }
 +
 +   public void act() {
 +      if(main.state != "game running") {
 +         return;
 +      }
 +
 +      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, vy);+   } 
 +
 +</script>
  
-      if(hunter.collidesWith(target)) { +<script type="text/plain" title="Target.java"> 
-         moveTarget(); +class Target extends Circle { 
-         punkte++; +    
-         println(punkte + " Punkte!");+   Target(HunterGame main) { 
 +      super(-100, -100, 8); 
 +      setFillColor(Color.lightgreen);
  
-         addEnemy(); +      // dont create target overlapping with hunter 
-      }+      do { 
 +          
 +         moveTo(Random.randdouble(20, 780), Random.randdouble(20, 580));
  
-      if(hunter.getCenterX() < 0 || hunter.getCenterX() > 800 ||  +      } while (collidesWith(main.hunter)) 
-            hunter.getCenterY(< 0 || hunter.getCenterY() > 600 +   }
-         ) { +
-         gameOver(); +
-      }+
  
-      if(hunter.collidesWith(enemies)) { +} 
-         gameOver(); +</script>
-      }+
  
-   }+<script type="text/plain" title="Boulder.java"> 
 +class Boulder extends Sprite {
  
-   void moveTarget() { +   double v = Random.randdouble(-3, -1);  // speed in pixel per 1/30 s 
-      target.moveTo(Math.random() * 800Math.random() * 600); +   double w = Random.randdouble(-55);   // angular speed in degrees per 1/30 s
-   }+
  
-   void addEnemy() { +   Boulder(HunterGame main) { 
-      Circle enemy = new Circle(Math.random() * 800Math.random() * 6005); +      // create boulder righthand outside view 
-      enemy.setFillColor(Color.red); +      super(900, Random.randdouble(0, 600), SpriteLibrary.TowerDefense108); 
-      enemies.add(enemy); + 
-   }+      setImageIndex(Random.randint(108, 110)); 
 +      scale(Random.randdouble(0.5, 2.0));
  
-   void gameOver() { 
-      println("Game Over!"); 
-      stopActing(); 
    }    }
  
 +   public void act() {
 +      move(v, 0);
 +      rotate(w);
 +      
 +      // if boulder leaves view to the left then swap it to 
 +      if(getCenterX() < -50) {
 +         moveTo(900, getCenterY());
 +      }
 +   }
 } }
 </script> </script>
hunter/hunterfertig/start.1675407378.txt.gz · Zuletzt geändert: 2023/02/03 06:56 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki