Benutzer-Werkzeuge

Webseiten-Werkzeuge


hunter:hunterfertig:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hunter:hunterfertig:start [2023/02/17 09:31] 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="Main.java"> <script type="text/plain" title="Main.java">
 +// Main Program:
 +SystemTools.setSpeed(-1);  // maximum execution speed
 +new HunterGame();
 +
 +/**
 + * Class Main manages huter, target and enemies
 + * and maintains program state.
 + * States: "startscreen", "game running", "game over"
 + */
 +class HunterGame extends Actor {
 +   
 +   Hunter hunter;
 +   Target target;
 +   Group boulders;
 +
 +   String state;     // allowed values: "startscreen", "game running", "game over"
 +
 +   Text scoreText;   // displays score
 +   int score = 0;
 +
 +   Text caption;     // displays big caption: "Hunter Game" or "Game Over"
 +   
 +   int timeSpacePressed = 0;  // time since space key has been pressed in milliseconds
 +
 +   HunterGame() {
 +      hunter = new Hunter(this);
 +      
 +      boulders = new Group();     // holds all enemies
 +
 +      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);
 +
 +      caption.setAlignment(Alignment.center);
 +
 +      setState("startscreen");   // start game
 +
 +   }
 +
 +   void makeNewTarget() {
 +      target = new Target(this);
 +   }
 +
 +   /**
 +    * this method is called 30 times per second 
 +    */
 +   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>
  
 <script type="text/plain" title="Hunter.java"> <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)) {
 +         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> </script>
  
 <script type="text/plain" title="Target.java"> <script type="text/plain" title="Target.java">
 +class Target extends Circle {
 +   
 +   Target(HunterGame main) {
 +      super(-100, -100, 8);
 +      setFillColor(Color.lightgreen);
 +
 +      // dont create target overlapping with hunter
 +      do {
 +         
 +         moveTo(Random.randdouble(20, 780), Random.randdouble(20, 580));
 +
 +      } while (collidesWith(main.hunter))
 +   }
 +
 +}
 </script> </script>
  
-<script type="text/plain" title="Enemy.java">+<script type="text/plain" title="Boulder.java"> 
 +class Boulder extends Sprite { 
 + 
 +   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 
 + 
 +   Boulder(HunterGame main) { 
 +      // create boulder righthand outside view 
 +      super(900, Random.randdouble(0, 600), SpriteLibrary.TowerDefense, 108); 
 + 
 +      setImageIndex(Random.randint(108, 110)); 
 +      scale(Random.randdouble(0.5, 2.0)); 
 + 
 +   } 
 + 
 +   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.1676626302.txt.gz · Zuletzt geändert: 2023/02/17 09:31 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki