/*** MIGRATE.C ***/ #include "header.h" void DiffusePrey(Site *arena, double leftbias) { int i, dir; Site *origin, *nnabe; double xxx, bias[4]; /* All sites have: Left: nabes[0] Top: nabes[1] Bot: nabes[2] Right: nabes[3] */ bias[0] = 0.25 + leftbias; bias[3] = 0.25 - leftbias; bias[1] = bias[2] = 0.25; origin = arena; /* this algorithm only allows uncontested moves */ for(i=0;iprey==1) /* consider move if present */ { xxx = drand48()-bias[0]; /* choose step direction */ dir = 0; while(xxx>0.0) { dir++; xxx -= bias[dir]; } nnabe = origin->nabes[dir]; if(nnabe->flag==0 && nnabe->prey==0) /* empty and not tried before */ { nnabe->indirect = 3 - dir; /* incoming direction */ nnabe->flag = 1; /* set flag to note attempt */ origin->flag = 2; /* individual has moved */ } else if(nnabe->flag==1) /* site previously stepped on */ { nnabe->flag = 3; /* flag multiple attempts */ nnabe->nabes[nnabe->indirect]->flag = 0; /* reset previous stepper */ } } } origin = arena; for(i=0;iflag>0) { if(origin->flag==1) origin->prey = 1; else if(origin->flag==2) origin->prey = 0; origin->flag = 0; } origin++; } }