/************************************************/ /* */ /* Choose prey in neighbourhood to eat */ /* */ /************************************************/ void get_prey_item(menu, current) double menu; struct individual *current; { double rn; double sum; struct individual *prey; rn=drand48()*menu; prey=start; sum=0.0; /***Choose prey at random***/ while(prey!=NULL){ /*printf("%lf\n", prey->eaten_event);*/ sum+=prey->eaten_event; if(sum>rn) break; else prey=prey->next; } death(prey); rn=drand48(); if(rnspecies]) newborn(current); } /************************************************/ /* */ /* Weight prey in neighbourhood */ /* */ /************************************************/ void predate(current) struct individual *current; { double x1, y1, x2,y2, radius; int spp1, spp2; struct individual *neighbour; double menu, distance, norm, effect; neighbour=start; x1=current->xpos; y1=current->ypos; spp1=current->species; menu=0.0; while(neighbour!=NULL){ neighbour->eaten_event=0.0; x2=neighbour->xpos; y2=neighbour->ypos; spp2=neighbour->species; radius=wfoormax[spp1][spp2]; distance = get_distance(x1,y1,x2,y2,radius); if(distancespecies);*/ neighbour->eaten_event=effect*alpha[spp1][spp2]; menu+=neighbour->eaten_event; } neighbour=neighbour->next; } /*printf("Attack: %lf\n", current->attack_event); printf("MENU: %lf\n", menu);*/ get_prey_item(menu, current); }