Spielprogrammierung mit Java
HomeAufgabenDruckenJava-Online

Figuren bewegen


Beispiel 1: Der Fisch soll hin und her schwimmen, d.h. am Rand jeweils umkehren. Dies erreichen wir durch eine Selektion unter Verwendung von if. Dabei wird mit der Methode isNearBorder() geprüft, ob sich der Fisch in einer Randzelle befindet. Ist dies der Fall, so schwimmt er zurück.


import ch.aplu.jgamegrid.*;
import java.awt.Color;

public class JGameEx1 extends GameGrid
{
  public JGameEx1()
  {
    super(101060Color.red, "sprites/reef.gif");
    Fish nemo = new Fish();
    addActor(nemo, new Location(24));
    show();
  }
  
  public static void main(String[] args)
  {
    new JGameEx1();
  }
}

// ------------- class Fish --------------------
class Fish extends Actor
{
  public Fish()
  {
    super("sprites/nemo.gif");
  }

  public void act()
  {
    move();
    if (isNearBorder())
      turn(180);
  }
}
 

Erklärungen zum Programmcode:
move()   Verschiebt den Actor in die benachbarte Zelle. Bei der Erzeugung des Actors erhält dieser die Standardrichtung 0° (gegen Osten). Die Richtung kann absolut mit der Methode setDirection() oder relativ mit der Methode turn() geändert werden
if (isNearBorder())
    turn(180)
Prüft, ob sich nemo in einer Randzelle befindet. Ist es der Fall, dreht er seine Bewegungsrichtun um 180°

 


Beispiel 2: Figuren spiegeln

Mit setHorzMirror(boolean b) kann ein Bild gespiegelt werden. Ist b true, wird das Bild gespiegelt, ist b false wird die Spiegelung rückgängig gemacht .

 

JGameEx2a

// JGameEx2.java

import ch.aplu.jgamegrid.*;
import java.awt.Color;

public class JGameEx2 extends GameGrid
{
  public JGameEx2()
  {
    super(101060Color.red, "sprites/reef.gif");
    Fish2 nemo = new Fish2();
    addActor(nemo, new Location(24));
    show();
  }

  public static void main(String[] args)
  {
    new JGameEx2();
  }
}

// ------------- class Fish --------------------
class Fish2 extends Actor
{
  public Fish2()
  {
    super("sprites/nemo.gif");
  }

  public void act()
  {
    move();
    if (isNearBorder())
    {
      turn(180);
      setHorzMirror(!isHorzMirror());
    }
  }
}

Erklärungen zum Programmcode:
setHorzMirror(true) Spiegelt das Sprite-Bild . Standardmässig ist setHorzMirror(false) gesetzt
isHorzMirror() Gibt true zurück, wenn das Bild bereits gespiegelt wurde
setHorzMirror(!isHorzMirror()) Wenn das Bild nicht gespiegelt ist, spiegelt es und umgekehrt

 

Beispiel 3: Figur-Bewegungen mit Zufallszahlen steuern

Der Fish ändert zufällig seine Schwimmrichtung. Bei jedem Schritt änder er seine Richtung um 5° oder -5°.

 

   

// JGameEx3.java

import ch.aplu.jgamegrid.*;
import java.awt.Color;

public class JGameEx3 extends GameGrid
{
  public JGameEx3()
  {
    super(505012"sprites/reef.gif");
    Fish nemo = new Fish();
    addActor(nemo, new Location(1020));
    show();
  }

  public static void main(String[] args)
  {
    new JGameEx3();
  }
}

// ------------- class Fish --------------------
class Fish extends Actor
{
  public Fish()
  {
    super("sprites/nemo.gif");
  }

  public void act()
  {
    if (Math.random() < 0.5 )
      turn(5);
    else
      turn(-5);

    if (isNearBorder())
    {
      turn(180);
      setHorzMirror(!isHorzMirror());
    }
    move();
  }
}

Erklärungen zum Programmcode:
Math.random() Die Methode Math.random() erzeugt eine mehrstellige Zufallszahl zwischen 0 und 1
 if (Math.random() < 0.5)
  turn(5);
else
  turn(-5);
Etwa in Hälfte aller Fälle ist die Zufallszahl < 0.5, der Fische dreht um 5° in der positiven Richtung, sonst dreht er 5° in die andere Richtung


Übungen:
Aufgabe 1