Eine Spielsituation
Ausgabe auf dem Terminal
Objekte anlegen und zerstören
Eine Spielsituation. Eine Situation besteht aus bis zu 22 Spieler-Objekten (ModelledPlayer) und evtl. einem Ball-Objekt (ModelledBall). Eine Situation bezieht sich immer auf einen Zeittakt (simStep).Das Weltmodell erzeugt jeden SimStep eine neue Situation (per Simulation bzw. durch Auswerten von Sensorinformationen). Es verwendet Situationen, um den Ablauf des Spielgeschehens aufzuzeichnen.
Eine Situation kann auch das Verstreichen von Zeittakten simulieren, wobei davon ausgegangen wird, dass keine Aktionen der Spieler mehr erfolgen. Dabei erhoeht sich auch der Zeittakt, auf den sich die Situation bezieht.
Quelltext
[Header | [Implementierung]
CVS Informationen zum Interface
************************************************** * * Aktueller Stand * * $RCSfile: Situation.h,v $ * $Revision: 1.35 $ * $Date: 1998/08/14 13:21:14 $ * $Author: myritz $ * **************************************************
virtual StorableObject* copy()
Enthaelt die Situation (fehlerhafterweise) mehrere Spieler mit derselben
PlayerId, wird der erste Spieler zurueckgegeben. Diese Routine ist langsam, d.h. die Laufzeit waechst linear mit der
Anzahl der Spieler in der Situation.
Ist index < 0 oder >= playerCount(), wird eine
Array::IndexOutOfBoundsException erzeugt. Diese Routine ist schnell, d.h. die Laufzeit ist unabhaengig von der Zahl
der Spieler in der Situation.
Diese Routine ist langsam, d.h. die Laufzeit waechst linear mit der
Anzahl der Spieler in der Situation.
const ModelledBall& ball()
const ModelledPlayer& playerWithId( int aPlayerId )
const int stepsOfPlayerWithId( int aPlayerId )
Diese Routine ist langsam, d.h. die Laufzeit waechst linear mit der
Anzahl der Spieler in der Situation.
const ModelledPlayer& playerWithIndex( int index )
int indexOfPlayerWithId( int aPlayerId )
bool containsPlayerWithId( int aPlayerId )
int playerCount()
virtual String toString()
Diese Routine ist langsam, d.h. die Laufzeit waechst linear mit der
Anzahl der Spieler in der Situation.
Diese Routine ist schnell, d.h. die Laufzeit ist unabhaengig von der Zahl
der Spieler in der Situation.
void setBall( const ModelledBall& newBall )
void setPlayer( const ModelledPlayer& newPlayer )
void setPlayer( const ModelledPlayer& newPlayer, int index )
index - Stelle, an der abgelegt werden soll. index darf Werte
zwischen 0 und playerCount() enthalten. void addPlayer( const ModelledPlayer& newPlayer )
void removePlayerWithId( int aPlayerId )
void removePlayerWithIndex( int index )
void simulateSteps( unsigned int stepCount = 1)
const ModelledPlayer& nearestPlayer( int teamId = BOTH_TEAMS_ID )
InvalidIdException , wenn die teamId einen ungültigen Wert
hat. int stepsOfNearestPlayer( int teamId = BOTH_TEAMS_ID )
bool isOneOfTheNearestTeammatesToBall( int id )
const Array <int> & getOurTeamSorted()
const Array <int> & getTheirTeamSorted()
const Array <int> & getStepstoBall()
const int playerStepsToBall(int index)
double distOfNearestPlayerToPos( const Vector& otherPos, const int teamId = BOTH_TEAMS_ID )
InvalidIdException , wenn die teamId einen ungültigen Wert
hat.
pos - Die Position, zu der der nächste Spieler gesucht ist.
Hinweis: Diese Routine kann unkorrekte Werte liefern. So kann sie YES liefern, obwohl der Spieler nicht im Abseits steht, wenn die Situation unvollständig ist, also Spieler fehlen oder nicht als Gegner erkannt sind. Andererseits kann es sein, daß Abseits gepfiffen wird, weil ein Spieler dem Ball zu nahe kommt, für den diese Routine NO liefert. Das passiert dann, wenn sich seit der Ballabgabe die Abseitslinie über den Spieler hinweg nach vorne (auf das eigene Tor zu) bewegt hat. In der Klasse Situation kann diese Abseitsfalle nicht erkannt werden.
Der Wert wird intern zwischengespeichert und eigentlich von
computeOffsideX berechnet. Hinweis: Diese Routine kann unkorrekte Werte liefern. Der Wert kann zu nahe
an der Mittellinie liegen, wenn die Situation unvollständig ist, also
Spieler fehlen oder nicht als Gegner erkannt sind. Der Wert kann zu weit an
der gegnerischen Torlinie liegen, wenn sich seit der Ballabgabe die wahre
Abseitslinie nach vorne (auf das eigene Tor zu) bewegt hat. In der Klasse
Situation kann diese Abseitsfalle nicht erkannt werden.
bool isOffsideWithId( int playerId )
isOffsideWithIndex double offsideLineX()
const Reliability& Situation::offsideLineXReliability()
Array <ModelledPlayer> thePlayers
ModelledBall theBall
mutable bool areStepsToBallEstimated
mutable Array <int> stepsToBallOfPlayers
mutable Array <int> nearestAllPlayerSorted
mutable Array <int> nearestTeammatesSorted
mutable Array <int> nearestEnemiesSorted
mutable double theOffsideLineX
mutable Reliability theOffsideLineXReliability
static double theMinDistPlayerBall
void estimateForAllStepsToBall()
void sortIntoField( int playerIndex, Array<int>& sortedField )
sortedField - in das Feld in das einsortiert werden soll double computeOffsideLineX()
Einleitung | Architektur | Dynamische Zusammenhänge | Referenzhandbuch | FAQ | Anhang A | Anhang B
generated by doc++