$SP,"<1>",1$ #define NUM_APPLES 128 I64 x[NUM_APPLES],y[NUM_APPLES], cur_apple,cur_sprite_elem_num,cur_dist, cur_x=0,cur_y=0; U8 buf[128]; U0 DrawIt(CTask *,CDC *dc) { I64 i,best_dist=MAX_I64,best_apple=0,best_sprite_elem_num=0; dc->flags|=DCF_LOCATE_NEAREST; dc->cur_x=cur_x; dc->cur_y=cur_y; dc->cur_z=0; for (i=0;inearest_sprite_elem_num=0; dc->nearest_dist=MAX_I64; SpritePlot3(dc,x[i],y[i],0,$IB,"<1>",1$); if (dc->nearest_dist<=best_dist) { //distance to nearest pixel, squared //$LK,"Sqrt","MN:Sqrt"$() is expensive so we work with distance squared. best_dist=dc->nearest_dist; best_apple=i; //Elements are the individual lines or whatever of the CSprite. best_sprite_elem_num=dc->nearest_sprite_elem_num; } } //Note: window mgr does not get preempted and //this code runs in the window manger task. cur_apple=best_apple; cur_dist=best_dist; cur_sprite_elem_num=best_sprite_elem_num; dc->color=WHITE; GrRect(dc,5,5,StrLen(buf)*FONT_WIDTH,FONT_HEIGHT); dc->color=BLACK; GrPutS(dc,5,5,buf); } U0 Main() { I64 i,msg_code,p1,p2,best_i=0,old_x,old_y; for (i=0;idraw_it=&DrawIt; Fs->win_inhibit=WIF_ALL-WIF_BORDER; do { msg_code=GetMsg(&p1,&p2,1<