REM Start of BASIC! Program WAKELOCK 4 !number of horizontal positions nx=200 !lenght of agent n=10 !number of agents nn=10 !maximal distance (in nx) to draw a line md=75 DIM go[n,nn] DIM x[nn],y[nn] DIM vx[nn],vy[nn] nc=nn-1 DIM al[nc],rd[nc],gn[nc],bu[nc] DIM val[nc],vrd[nc],vgn[nc],vbu[nc] GR.OPEN 255,0,0,0,0,1 GR.SCREEN sx,sy GR.BITMAP.CREATE bmp,sx,sy GR.BITMAP.DRAW gobm,bmp,0,0 ny=INT(nx/sx*sy) rx=sx/nx ry=sy/ny FOR j=1 TO nn x[j]=INT(RND()*nx) y[j]=INT(RND()*ny) x1=x[j]*rx y1=y[j]*ry x2=x1+rx y2=y1+ry FOR i=1 TO n GR.COLOR 255-i/n*255,255,255,255,1 GR.RECT go[i,j],x1,y1,x2,y2 NEXT i vx[j]=INT(RND()*3)-1 IF vx[j]=0 THEN vy[j]=INT(RND()*2)*2-1 ENDIF NEXT j FOR j=1 TO nn-1 val[j]=(RND()-0.5) vrd[j]=(RND()-0.5) vgn[j]=(RND()-0.5) vbu[j]=(RND()-0.5) al[j]=127 rd[j]=127 gn[j]=127 bu[j]=127 NEXT j DO FOR j=1 TO nn-1 al[j]+=val[j] rd[j]+=vrd[j] gn[j]+=vgn[j] bu[j]+=vbu[j] IF (al[j]>255)|(al[j]<0) THEN al[j]-=val[j] val[j]=-val[j] ENDIF IF (rd[j]>255)|(rd[j]<0) THEN rd[j]-=vrd[j] vrd[j]=-vrd[j] ENDIF IF (gn[j]>255)|(gn[j]<0) THEN gn[j]-=vgn[j] vgn[j]=-vgn[j] ENDIF IF (bu[j]>255)|(bu[j]<0) THEN bu[j]-=vbu[j] vbu[j]=-vbu[j] ENDIF NEXT j GR.TOUCH tt,tx,ty IF tt&!ott THEN d=1e99 FOR j=1 TO nn IF HYPOT(tx/rx-x[j],ty/ry-y[j])0.95 THEN IF vx[j]<>0 THEN vy[j]=INT(RND()*2)*2-1 vx[j]=0 ELSE vx[j]=INT(RND()*2)*2-1 vy[j]=0 ENDIF ENDIF x[j]+=vx[j] y[j]+=vy[j] IF x[j]>=nx THEN x[j]=nx-1 vx[j]=0 IF y[j]<1 THEN vy[j]=1 ELSEIF y[j]>(ny-1) THEN vy[j]=-1 ELSE vy[j]=INT(RND()*2)*2-1 ENDIF y[j]+=vy[j] ELSEIF x[j]<0 THEN x[j]=0 vx[j]=0 IF y[j]<1 THEN vy[j]=1 ELSEIF y[j]>(ny-1) THEN vy[j]=-1 ELSE vy[j]=INT(RND()*2)*2-1 ENDIF y[j]+=vy[j] ENDIF IF y[j]>=ny THEN y[j]=ny-1 vy[j]=0 IF x[j]<1 THEN vx[j]=1 ELSEIF x[j]>(nx-1) THEN vx[j]=-1 ELSE vx[j]=INT(RND()*2)*2-1 ENDIF x[j]+=vx[j] ELSEIF y[j]<0 THEN y[j]=0 vy[j]=0 IF x[j]<1 THEN vx[j]=1 ELSEIF x[j]>(nx-1) THEN vx[j]=-1 ELSE vx[j]=INT(RND()*2)*2-1 ENDIF x[j]+=vx[j] ENDIF FOR i=n TO 2 STEP -1 GR.GET.VALUE go[i-1,j],"left",x1, "top",y1,"right",x2,"bottom",y2 GR.MODIFY go[i,j],"left",x1, "top",y1,"right",x2,"bottom",y2 NEXT i x1=x[j]*rx y1=y[j]*ry x2=x1+rx y2=y1+ry GR.MODIFY go[1,j],"left",x1, "top",y1,"right",x2,"bottom",y2 NEXT j GR.BITMAP.DRAWINTO.START bmp FOR i=1 TO nn-1 GR.COLOR al[i],rd[i],gn[i],bu[i],1 FOR j=i TO nn IF HYPOT(x[i]-x[j],y[i]-y[j])