Agents in Biology
217
FOODLEVEL = 0;
}
if (FOODLEVEL <1.0 && ISFED!=0){
ISFED = 0;
}
PHEROFOUND = 0;
return 0;
}
//Ant agent
//find a food source and eat 0.2 units
int forage() {
int localId;
foodInformation_message = get_first_foodInformation_message();
while (foodInformation_message) {
double xFood = foodInformation_message->foodX;
double yFood = foodInformation_message->foodY;
double foodRadius = foodInformation_message->radius;
double distanceToFood = getDistance(xFood, yFood, ANTX, ANTY);
if (distanceToFood <= foodRadius + 2) {
double foodSize = foodInformation_message->size;
localId = foodInformation_message->foodID;
FOODLEVEL = FOODLEVEL + 100;
ISFED = 1;
add_foodEaten_message(localId, (foodSize - 0.2));
int direction = ANTDIRECTION;
ANTDIRECTION = getNewDirection(direction, 180);
return 0;
}
foodInformation_message = get_next_foodInformation_message
(foodInformation_message);
}
return 0;
}
//FoodGenerator agent
//creates a new food agent dynamically by checking newFood_message
int produceFood() {
newFood_message = get_first_newFood_message();
while (newFood_message) {
double x = newFood_message->foodX;
double y = newFood_message->foodY;
double foodSize = newFood_message->size;
double foodRadius = newFood_message->radius;
MEMORYFOODID++;
add_Food_agent(MEMORYFOODID, foodSize, x, y, foodRadius);
newFood_message = get_next_newFood_message(newFood_message);
}
return 0;
}
//Food agent
//if one of the food sources is depleted, create newFood_message
//which is passed to produceFood() function for FoodGenerator agent
int updateFood() {
217
FOODLEVEL = 0;
}
if (FOODLEVEL <1.0 && ISFED!=0){
ISFED = 0;
}
PHEROFOUND = 0;
return 0;
}
//Ant agent
//find a food source and eat 0.2 units
int forage() {
int localId;
foodInformation_message = get_first_foodInformation_message();
while (foodInformation_message) {
double xFood = foodInformation_message->foodX;
double yFood = foodInformation_message->foodY;
double foodRadius = foodInformation_message->radius;
double distanceToFood = getDistance(xFood, yFood, ANTX, ANTY);
if (distanceToFood <= foodRadius + 2) {
double foodSize = foodInformation_message->size;
localId = foodInformation_message->foodID;
FOODLEVEL = FOODLEVEL + 100;
ISFED = 1;
add_foodEaten_message(localId, (foodSize - 0.2));
int direction = ANTDIRECTION;
ANTDIRECTION = getNewDirection(direction, 180);
return 0;
}
foodInformation_message = get_next_foodInformation_message
(foodInformation_message);
}
return 0;
}
//FoodGenerator agent
//creates a new food agent dynamically by checking newFood_message
int produceFood() {
newFood_message = get_first_newFood_message();
while (newFood_message) {
double x = newFood_message->foodX;
double y = newFood_message->foodY;
double foodSize = newFood_message->size;
double foodRadius = newFood_message->radius;
MEMORYFOODID++;
add_Food_agent(MEMORYFOODID, foodSize, x, y, foodRadius);
newFood_message = get_next_newFood_message(newFood_message);
}
return 0;
}
//Food agent
//if one of the food sources is depleted, create newFood_message
//which is passed to produceFood() function for FoodGenerator agent
int updateFood() {
