CE erstes Programmierprojekt (Fussball). Problem ist die play-soccer.xabsl

This commit is contained in:
M.Scholz 2011-11-03 15:57:28 +01:00
parent ed7d5e579d
commit 737dc06d87
7 changed files with 51 additions and 3 deletions

View File

@ -107,7 +107,7 @@ void WorldState::computeRoles()
playerRole[rank[0]] = WorldState::midfielder;
playerRole[rank[1]] = WorldState::defender;
playerRole[rank[2]] = WorldState::midfielder; // substitute by role 'runner'
playerRole[rank[2]] = WorldState::runner; // substitute by role 'runner'
playerRole[rank[3]] = WorldState::striker;
for (i=0;i<4;i++) if (x[i] >73) playerRole[i]=WorldState::midfielder;
@ -133,6 +133,20 @@ double WorldState::getMostWesterlyTeammateY()
return Y;
}
double WorldState::getStrikerX()
{
// double striker = 3;
for (int player=1;player<4;player++) {
if (theInstance->playerRole[player] == WorldState::striker) {
return theInstance->x[player]; //x coordinate striker
}
}
}
int WorldState::getBallLocalDirection()
{
for (int i=0;i<10;i++) if (theInstance->local_area[i][theInstance->activePlayerNumber]==BALL) return i;

View File

@ -68,7 +68,7 @@ public:
static double getMostWesterlyTeammateX(); // a function for the symbol "most-westerly-teammate.x"
static double getMostWesterlyTeammateY(); // a function for the symbol "most-westerly-teammate.y"
static int getPlayerRole(); // a function for the symbol "player-role"
static double getStrikerX();
char field[MAX_X][MAX_Y]; // for debug output
void printField(xabsl::ErrorHandler& errorHandler); // prints the field containing debug informations
};

View File

@ -67,6 +67,7 @@ void UN(initialize_game)()
pEngine[i]->registerEnumeratedInputSymbol("ball.local.direction","next_action", &WorldState::getBallLocalDirection);
pEngine[i]->registerDecimalInputSymbol("most_westerly_teammate.x", &WorldState::getMostWesterlyTeammateX);
pEngine[i]->registerDecimalInputSymbol("most_westerly_teammate.y", &WorldState::getMostWesterlyTeammateY);
pEngine[i]->registerDecimalInputSymbol("striker.x", &WorldState::getStrikerX);
// parse the intermediate code
MyFileInputSource input("intermediate-code.dat");

View File

@ -6,6 +6,10 @@ option play_soccer {
if (role() == striker) {
goto striker;
}
else if(role() == runner){
goto runner;
}
/** player role is defender */
else if (role() == defender) {
goto defender;
@ -14,6 +18,8 @@ option play_soccer {
else if (role() == midfielder) {
goto midfielder;
}
}
state striker {
@ -33,5 +39,11 @@ option play_soccer {
defender();
}
}
state runner{
action{
runner();
}
}
}

View File

@ -0,0 +1,16 @@
option runner{
initial state __initial {
action {
go_to(x = striker.x() + 1, y = y);
}
}
}

View File

@ -12,6 +12,7 @@ include "Options/pass.xabsl";
include "Options/dribble.xabsl";
include "Options/defender.xabsl";
include "Options/striker.xabsl";
include "Options/runner.xabsl";
/** A simple soccer agent behavior */
agent soccer("Soccer", play_soccer);

View File

@ -5,7 +5,8 @@ namespace my_symbols("My Symbols") {
enum role {
defender,
midfielder,
striker
striker,
runner
};
/** The possible direction and actions */
@ -52,6 +53,9 @@ namespace my_symbols("My Symbols") {
/** The y position of the most westerly teammate */
float input most_westerly_teammate.y;
/** The x position of the striker*/
float input striker.x;
}