Package hoverball

Class Unit

java.lang.Object
hoverball.Hovlet
hoverball.Unit
Direct Known Subclasses:
Human

public abstract class Unit
extends Hovlet
Die Klasse Unit, basierend auf der Klasse Hovlet, stellt die Basisklasse für alle Java-Units dar. Die Unit verbindet sich als Unit Client mit dem Simulator und erleichtert Dir mit ihren vielen integrierten Funktionen das Erschaffen Deiner eigenen Spieler.

Nach der Definition eines Konstruktors, in welchem Du Team- und Spieler-Namen angeben kannst, musst Du nur noch die Denk-Schleife loop() implementieren. Hierzu sei gesagt:

  • Die Schleife sollte verlassen werden, wenn das Spiel unterbrochen wird, da die Methode erneut aufgerufen wird, wenn das Spiel wieder weitergeht. Dies wird durch den richtigen Einsatz der Methode look() erreicht, die auf den nächsten Look des Simulators wartet. Wird das Spiel dabei unterbrochen, liefert look() den Wert false, ansonsten true. Das bedeutet, dass die Schleifenstruktur
    public void loop()
    {
       while(look())
       {
          ...
       }
    }
    
    das Gewünschte leistet.

  • Vor Schleifeneintritt sind die Checkin-Parameter bekannt, im Schleifenkörper - nach Aufruf von look() - dann auch die aktuellen Positionen der Objekte, welche im Array pucks abgerufen werden können.

  • Die Aktion sollte mit action(...) am Ende des Schleifenkörpers gesendet werden.

  • Debug-Objekte können mit debug(...) jederzeit gesetzt werden.

  • Das Main-Panel des Unit-Hovlets ist unbenutzt. Es steht Dir zur Darstellung eigener Analysen zur vollen Verfügung.


    Beispiel einer trivialen Java-Unit:

    import hoverball.*;
    import hoverball.math.*;
     
    public class Clumsy extends Unit
    {
       public Clumsy ()
       {
          super(null,"Clumsy",0x8888FF);  // Name "Clumsy", Farbe hellblau
       }
     
       public void loop ()
       {
          Sphere sphere = new Sphere(option("world.radius"));  // Parameter auslesen...
          double Qmax = option("unit.charge.max");
          double Fmax = option("unit.engine.max");
     
          while (look())
          {
             Puck ball = puck(BALL,0,1);       // das ist der Ball
             Puck goal = puck(BALL,self.t,1);  // das ist das "Tor"
     
             if (ball == null) action(0,-Fmax,Fmax);     // sieht keinen Ball? drehe!
             else {                                      // sieht Ball:
                Vector a = (goal != null)? Vector.vec(goal.X.c,ball.X.c) :  // berechne
                                           Vector.vec(ball.X.c,self.X.c);   // Drehachse
                Matrix X = Matrix.mul(ball.X,Matrix.rot(a,(self.r+ball.r)/sphere.rad));
                Complex x = sphere.warp(X.c);            // X ist die Schussposition
     
                double l = -x.arg() + Math.max(0.2,1-10*Math.abs(x.arg())); // drehe und
                double r =  x.arg() + Math.max(0.2,1-10*Math.abs(x.arg())); // fahre zu X
                double q = (x.abs() < ball.r)? 0.5 : 0;  // falls auf X: Schuss!
     
                action(q*Qmax,l*Fmax,r*Fmax);
             }
          }
       }
    }
    
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static int BALL
      Typ-Konstante: Ball  (von der Klasse Puck übernommen)
      protected int channel_n
      Spieler-Nummer des Channels
      protected int channel_t
      Team-Nummer des Channels
      double energy
      Energie beim letzten Look
      protected static int NODE
      Typ-Konstante: Node  (von der Klasse Puck übernommen)
      double penalty
      Penalty beim letzten Look
      Puck[] pucks
      Array der Objekte des letzten Looks, die gesehen oder gehört wurden
      Puck self
      Verweis auf sich selbst im Array der Objekte des letzten Looks
      double time
      Zeitpunkt des letzten Looks
      protected static int UNIT
      Typ-Konstante: Unit  (von der Klasse Puck übernommen)

      Fields inherited from class hoverball.Hovlet

      background, BANNER, foreground, hovlets, icon, main, menubar, parent, title
    • Constructor Summary

      Constructors 
      Constructor Description
      Unit​(java.lang.String name)
      öffnet eine Unit.
      Unit​(java.lang.String name, int color)
      öffnet eine Unit.
      Unit​(java.lang.String team, java.lang.String name)
      öffnet eine Unit.
      Unit​(java.lang.String team, java.lang.String name, int color)
      öffnet eine Unit.
    • Method Summary

      Modifier and Type Method Description
      protected void action​(double Q, double F_L, double F_R)
      Sendet eine Aktion.
      protected void action​(double Q, double F_L, double F_R, java.lang.String message)
      Sendet eine Aktion und eine Botschaft.
      protected void action​(java.lang.String message)
      Sendet eine Botschaft.
      protected boolean connecting​(java.lang.String server)
      [Implementierung]
      protected void debug​(Debug debug)
      Setzt ein Debug-Objekt.
      protected void debug​(Debug debug, int color)
      Setzt ein Debug-Objekt mit angegebener Farbe.
      protected void disconnecting()
      [Implementierung]
      protected static java.lang.String format​(double d)  
      protected static java.lang.String format​(Complex c)  
      protected static java.lang.String format​(Matrix M)  
      protected static java.lang.String format​(Vector v)  
      protected boolean look()
      Erbittet einen neuen Look.
      protected abstract void loop()
      Frei für die Implementierung der Denk-Schleife.
      protected double option​(java.lang.String key)
      Liefert den Wert einer Simulator-Option, die beim Checkin empfangen wurde.
      protected Puck puck​(int what, int t, int n)
      Liefert den Puck mit der angegebenen Identität aus dem Puck-Array.
      protected Puck puck​(java.lang.String id)
      Liefert den Puck mit der angegebenen Identität aus dem Puck-Array.

      Methods inherited from class hoverball.Hovlet

      add, browse, close, connect, disconnect, locate, locate, show, status, title

      Methods inherited from class java.lang.Object

      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Details

      • NODE

        protected static final int NODE
        Typ-Konstante: Node  (von der Klasse Puck übernommen)
        See Also:
        Constant Field Values
      • BALL

        protected static final int BALL
        Typ-Konstante: Ball  (von der Klasse Puck übernommen)
        See Also:
        Constant Field Values
      • UNIT

        protected static final int UNIT
        Typ-Konstante: Unit  (von der Klasse Puck übernommen)
        See Also:
        Constant Field Values
      • channel_t

        protected int channel_t
        Team-Nummer des Channels
      • channel_n

        protected int channel_n
        Spieler-Nummer des Channels
      • time

        public double time
        Zeitpunkt des letzten Looks
      • energy

        public double energy
        Energie beim letzten Look
      • penalty

        public double penalty
        Penalty beim letzten Look
      • pucks

        public Puck[] pucks
        Array der Objekte des letzten Looks, die gesehen oder gehört wurden
      • self

        public Puck self
        Verweis auf sich selbst im Array der Objekte des letzten Looks
    • Constructor Details

      • Unit

        public Unit​(java.lang.String name)
        öffnet eine Unit.
        Parameters:
        name - Name der Unit
      • Unit

        public Unit​(java.lang.String team, java.lang.String name)
        öffnet eine Unit.
        Parameters:
        team - Name des Teams
        name - Name der Unit
      • Unit

        public Unit​(java.lang.String name, int color)
        öffnet eine Unit.
        Parameters:
        name - Name der Unit
        color - Farbe
      • Unit

        public Unit​(java.lang.String team, java.lang.String name, int color)
        öffnet eine Unit.
        Parameters:
        team - Name des Teams
        name - Name der Unit
        color - Farbe
    • Method Details

      • puck

        protected Puck puck​(int what, int t, int n)
        Liefert den Puck mit der angegebenen Identität aus dem Puck-Array.
        Parameters:
        what - Typ des Objekts
        t - Team-Nummer
        n - Puck-Nummer
        Returns:
        den gesuchten Puck (oder null, falls nicht gefunden)
      • puck

        protected Puck puck​(java.lang.String id)
        Liefert den Puck mit der angegebenen Identität aus dem Puck-Array.
        Parameters:
        id - Identitäts-String
        Returns:
        den gesuchten Puck (oder null, falls nicht gefunden)
      • option

        protected double option​(java.lang.String key)
        Liefert den Wert einer Simulator-Option, die beim Checkin empfangen wurde.

        Es werden nicht alle Simulator-Optionen an die Units versendet.

        Parameters:
        key - Simulator-Option
        Returns:
        den Wert
      • look

        protected boolean look()
        Erbittet einen neuen Look.

        Der Methode sollte in der Denk-Schleife der Unit aufgerufen werden. Sie aktualisiert die Variablen time, pucks und self.

        Der Thread wird so lange angehalten, bis die Unit vom Simulator einen neuen Look erhält. Wird das Spiel unterbrochen, so liefert die Methode den Wert false und die Schleife sollte verlassen werden.

        Returns:
        true, falls das Spiel weitergeht
      • action

        protected void action​(double Q, double F_L, double F_R)
        Sendet eine Aktion.

        Soll ein Parameter der Aktion unverändert bleiben, kann der Wert mit Double.NaN maskiert werden.

        Parameters:
        Q - Ladung
        F_L - Antriebskraft links
        F_R - Anrtiebskraft rechts
      • action

        protected void action​(java.lang.String message)
        Sendet eine Botschaft.
        Parameters:
        message - Message
      • action

        protected void action​(double Q, double F_L, double F_R, java.lang.String message)
        Sendet eine Aktion und eine Botschaft.

        Soll ein Parameter der Aktion unverändert bleiben, kann der Wert mit Double.NaN maskiert werden.

        Parameters:
        Q - Ladung
        F_L - Antriebskraft links
        F_R - Anrtiebskraft rechts
        message - Message
      • loop

        protected abstract void loop()
        Frei für die Implementierung der Denk-Schleife.
      • debug

        protected void debug​(Debug debug)
        Setzt ein Debug-Objekt.
        Parameters:
        debug - Debug-Objekt
      • debug

        protected void debug​(Debug debug, int color)
        Setzt ein Debug-Objekt mit angegebener Farbe.
        Parameters:
        debug - Debug-Objekt
        color - Farbe
      • format

        protected static java.lang.String format​(double d)
      • format

        protected static java.lang.String format​(Complex c)
      • format

        protected static java.lang.String format​(Vector v)
      • format

        protected static java.lang.String format​(Matrix M)
      • connecting

        protected final boolean connecting​(java.lang.String server)
        [Implementierung]
        Overrides:
        connecting in class Hovlet
        Parameters:
        server - Netzwerk-Adresse
        Returns:
        true, falls Verbindung erfolgte
      • disconnecting

        protected final void disconnecting()
        [Implementierung]
        Overrides:
        disconnecting in class Hovlet