diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.cpp b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.cpp index 04e17c65..6b6085c5 100644 --- a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.cpp +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.cpp @@ -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; diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.h b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.h index 59c58859..a89c64a1 100644 --- a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.h +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/WorldState.h @@ -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 }; diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/main.cpp b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/main.cpp index 0e0daa6f..d8471da7 100644 --- a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/main.cpp +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/main.cpp @@ -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"); diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/play-soccer.xabsl b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/play-soccer.xabsl index 8fc3976f..bbf546c5 100644 --- a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/play-soccer.xabsl +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/play-soccer.xabsl @@ -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(); + } + } } diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/runner.xabsl b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/runner.xabsl new file mode 100644 index 00000000..6fab9fb3 --- /dev/null +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/Options/runner.xabsl @@ -0,0 +1,16 @@ +option runner{ + + initial state __initial { + action { + go_to(x = striker.x() + 1, y = y); + } + } + + + + + + + + +} \ No newline at end of file diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/agents.xabsl b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/agents.xabsl index 0e9909ef..0e67b551 100644 --- a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/agents.xabsl +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/agents.xabsl @@ -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); diff --git a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/my-symbols.xabsl b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/my-symbols.xabsl index f6beb650..71fd1a35 100644 --- a/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/my-symbols.xabsl +++ b/ws2011/CE/Uebungen/1. Programmieraufgabe/XABSL-Soccer2011/XABSL-Soccer2011/XabslExampleAgentTeam/xabsl-src/my-symbols.xabsl @@ -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; }