#include "proj.h" void scaping(int i,int j) { int k,l; for(k = -RANGE;k < RANGE+1;k++){ for(l = -RANGE;l < RANGE+1;l++){ if(i+k < 0 || i+k >= NMax || j+l < 0 || j+l >= NMax || Scape[i+k][j+l] == OCCUPY)continue; Scape[i+k][j+l] *= scale[k+RANGE][l+RANGE]; } } Scape[i][j] = OCCUPY; } int step(int ind) { int res,I,J,i,j,k,i1,j1,i2,j2; float v,dv,tmpv,rand1,rand2,oldv,rand; float pv[9]; char tmp[100]; res = 0; I = pt[ind].i; J = pt[ind].j; v = 100.; k = 0; tmpv = Scape[I-1][J]*(Scape[I-1][J] != OCCUPY) +Scape[I][J+1]*(Scape[I][J+1] != OCCUPY) +Scape[I+1][J]*(Scape[I+1][J] != OCCUPY) +Scape[I][J-1]*(Scape[I][J-1] != OCCUPY); if(tmpv < 1e-3){ for(k = ind;k < npt-1;k++){ pt[k].i = pt[k+1].i; pt[k].j = pt[k+1].j; } npt--; return -1; } rand = drand48(); if(rand < .25)I -= 1; else if(rand < .5)J += 1; else if(rand < .75)I += 1; else J -= 1; if(I < 0 || I >= NMax || J < 0 || J >= NMax || Scape[I][J] == OCCUPY)return 0; rand = drand48(); if(rand > Scape[I][J])return 0; scaping(I,J); sprintf(tmp,"%d %d\n",I,J); write(fdl,tmp,strlen(tmp)); pt[npt].i = I; pt[npt].j = J; npt++; return 1; }