CE erstes Programmierprojekt (Fussball). Problem ist die play-soccer.xabsl
This commit is contained in:
parent
ed7d5e579d
commit
737dc06d87
@ -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;
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
option runner{
|
||||
|
||||
initial state __initial {
|
||||
action {
|
||||
go_to(x = striker.x() + 1, y = y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user