stasichase.ki
Class Gehirn

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--stasichase.ki.Gehirn
Direct Known Subclasses:
DGehirn, XGehirn

public abstract class Gehirn
extends Thread
implements MoveListener, MessageListener

Jeder Spieler hat ein Gehirn, das für ihm den besten Zug berrechnet.Von ihr erben X-Gehirn und D-Gehirn.

Version:
$Id:
Author:
KI-gruppe

Field Summary
protected  int anzSpieler
          Anzahl der Spieler.
protected  Move besterZug
          Der aktuell bester Zug.
protected  int[][] erlaubteZuege
          Die Züge die zur Verfügung stehen.
protected  boolean istBereit
          Kontrollvariable um zu wissen, ob das Gehirn initialisiert worden ist.
protected  Thread mainThread
          Thread des SpielerKI bei dem sich das Gehirn melden soll, wenn es mit seinen Berechnungen fertig ist (mainThread.interrupt()).
protected  int position
          Eigene Position, eigentlich nur für Mr.X interessant, da die KITools sie nicht kennt.
protected  LokalerSpieler spieler
          Lokaler Spieler zu dem das Gehirn gehört.
protected  int spielernummer
          Nummer des Spielers zu dem Gehirn gehört.
protected  int zugnummer
          Nummer des für die Spielposition aktuellen Zuges.
 
Fields inherited from class java.lang.Thread
contextClassLoader, daemon, eetop, group, inheritedAccessControlContext, MAX_PRIORITY, MIN_PRIORITY, name, NORM_PRIORITY, priority, single_step, stillborn, stopThreadPermission, target, threadInitNumber, threadQ, values
 
Constructor Summary
Gehirn(LokalerSpieler spieler)
           
 
Method Summary
protected  int billigstesTicket(int schluessel)
          Wenn mehrere Verkehrsmitteln zur Wahl stehen, so wird die billigste (Taxi
 Move getBesterZug()
          Liefert den aktuellen besten Zug.
 void initialisieren(Game game)
          Übergabe des Game-Objekts an dem Gehirn.
 boolean istBereit()
          Sagt, ob das Gehirn bereits initialisiert worden ist.
 void neuePosition(Move zug)
          Bevor ein Zug abgegeben wird, kann man dem Gehirn seine neue Position mitteilen.
 void notifyMessage(MessageEvent e)
          Wird noch nicht berücksichtigt.
 void notifyMove(MoveEvent e)
          Empfängt Nachrichten über gespielte Zuege von seinem lokalen Spieler.
protected  Move parseMove(int stationsnummer, int ticketart)
          Erzeugt D- bzw.
 void run()
          Berechnung des besten Zuges.
 void setMainThread(Thread t)
          Damit kann der SpielerKI sein aktuellen Thread angeben.
protected  int teuerstesTicket(int schluessel)
          Wenn mehrere Verkehrsmitteln zur Wahl stehen, so wird das teuerste (Ubahn>Bus>Taxi>Black) ermittelt.
protected  Move zufallszug(int[][] zuege)
          Wählt aus einer liste von Zügen einen zufällig aus.
 
Methods inherited from class java.lang.Thread
, activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, exit, getContextClassLoader, getName, getPriority, getThreadGroup, init, interrupt, interrupt0, interrupted, isAlive, isDaemon, isInterrupted, isInterrupted, join, join, join, nextThreadNum, registerNatives, resume, resume0, setContextClassLoader, setDaemon, setName, setPriority, setPriority0, sleep, sleep, start, stop, stop, stop0, suspend, suspend0, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

istBereit

protected boolean istBereit
Kontrollvariable um zu wissen, ob das Gehirn initialisiert worden ist.

mainThread

protected Thread mainThread
Thread des SpielerKI bei dem sich das Gehirn melden soll, wenn es mit seinen Berechnungen fertig ist (mainThread.interrupt()).

spieler

protected LokalerSpieler spieler
Lokaler Spieler zu dem das Gehirn gehört.

spielernummer

protected int spielernummer
Nummer des Spielers zu dem Gehirn gehört. Die Spieler sind nach der Spielreihenfolge nummeriert (Mr.X hat die 0).

position

protected int position
Eigene Position, eigentlich nur für Mr.X interessant, da die KITools sie nicht kennt.

anzSpieler

protected int anzSpieler
Anzahl der Spieler.

zugnummer

protected int zugnummer
Nummer des für die Spielposition aktuellen Zuges. Erlaubt eine Kontrolle bevor man nach der aktuellen Position fragt.

besterZug

protected Move besterZug
Der aktuell bester Zug.

erlaubteZuege

protected int[][] erlaubteZuege
Die Züge die zur Verfügung stehen. In der erste Zeile stehen die Stationsnummern, in der zweite die entsprechende Tickets (in der Kodierung vom Spielplan: Taxi=1, Bus=2 , UBahn=3, usw., siehe Kommentar zu plan.Stationsinfo.schluessel).
Constructor Detail

Gehirn

public Gehirn(LokalerSpieler spieler)
Method Detail

initialisieren

public void initialisieren(Game game)
Übergabe des Game-Objekts an dem Gehirn. Dieser merkt sich seine Spielnummer und die Anzahl der Spieler. Wird überschrieben.

run

public void run()
Berechnung des besten Zuges. Wird bei makeYourMove aufgerufen. Kann mit interrupt() gestoppt werden.
Overrides:
run in class Thread

setMainThread

public void setMainThread(Thread t)
Damit kann der SpielerKI sein aktuellen Thread angeben.

getBesterZug

public Move getBesterZug()
Liefert den aktuellen besten Zug.

neuePosition

public void neuePosition(Move zug)
Bevor ein Zug abgegeben wird, kann man dem Gehirn seine neue Position mitteilen. Das ist für Mr.X notwendig, da er nicht seine Position aus den MoveEvents die er bekommt ablesen kann.

notifyMove

public void notifyMove(MoveEvent e)
Empfängt Nachrichten über gespielte Zuege von seinem lokalen Spieler.
Specified by:
notifyMove in interface MoveListener

notifyMessage

public void notifyMessage(MessageEvent e)
Wird noch nicht berücksichtigt.
Specified by:
notifyMessage in interface MessageListener

zufallszug

protected Move zufallszug(int[][] zuege)
Wählt aus einer liste von Zügen einen zufällig aus.
Parameters:
zuege - Liste von Zuege in dem Format des Attributs erlaubteZuege
Returns:
Zug im X- bzw. DMove Format

billigstesTicket

protected int billigstesTicket(int schluessel)
Wenn mehrere Verkehrsmitteln zur Wahl stehen, so wird die billigste (Taxi
Parameters:
Verkehrsschluessel - nach Stationsinfo
Returns:
1 für Taxi 2 für Bus 3 für UBahn 4 für Black

teuerstesTicket

protected int teuerstesTicket(int schluessel)
Wenn mehrere Verkehrsmitteln zur Wahl stehen, so wird das teuerste (Ubahn>Bus>Taxi>Black) ermittelt. Nützlich für Zufallsspiele, damit die Spieler nicht zu schnell in eine NoTicket-Falle kommen!
Parameters:
Verkehrsschluessel - nach Stationsinfo
Returns:
1 für Taxi 2 für Bus 3 für UBahn 4 für Black

parseMove

protected Move parseMove(int stationsnummer,
                         int ticketart)
Erzeugt D- bzw. XMove-Objekte. (Wird überschrieben)
Parameters:
stationsnummer - Nummer der Zielstation
ticketart - 1 für Taxi 2 für Bus 3 für UBahn 4 für Black (nur für XMove) HEL/BARRIEREN!
Returns:
Ein D- bzw. XMove-Objekt

istBereit

public boolean istBereit()
Sagt, ob das Gehirn bereits initialisiert worden ist. Damit löst die KI das Problem, daß makeYourMove() vor init() aufgerufen werden könnte.