//Practice tracing circles AcctRegSetDftEntry("TempleOS/CircleTrace","F64 best_score=999;\n"); AcctRegExecuteBranch("TempleOS/CircleTrace"); I64 cx,cy; F64 avg_error=0,elapsed_time=0,total_error=0,score=999; U0 SongTask(I64) { Fs->task_end_cb=&SndTaskEndCB; MusicSettingsRst; while (TRUE) Play("hEDCARCDECR"); } U0 DrawIt(CTask *task,CDC *) { U8 buf[128]; SPrintF(buf,"Error:%6.3f Time:%6.3f Score:%6.3f Best:%8.3f",avg_error,elapsed_time,score,best_score); PlotWinStr(task,buf,BLACK<<4+WHITE,0,0); } #define CIRCLE_RADIUS 100 #define CIRCUMFERENCE (2*ã*CIRCLE_RADIUS) Bool CTPlot(CDC *dc,I64 x,I64 y,I64) { F64 rad=Sqrt(Sqr(x-cx)+Sqr(y-cy)); GrPlot(dc,x,y); total_error+=Abs(rad-CIRCLE_RADIUS); return TRUE; } U0 CircleTrace() { I64 msg_code,p1,p2,x1,y1; F64 rad,t0,total_distance; CDC *dc=DCAlias; SettingsPush; //See $LK,"SettingsPush","MN:SettingsPush"$ Fs->song_task=Spawn(&SongTask,NULL,"Song",Fs); WordStat; cx=Fs->win_pixel_width/2; cy=Fs->win_pixel_height/2; Fs->win_inhibit=WIF_ALL-WIF_BORDER; DocCursor; DocClear; Fs->draw_it=&DrawIt; DCFill; dc->color=ROP_XOR+BLACK^COLOR_TRANSPARENT; GrCircle(dc,cx,cy,CIRCLE_RADIUS); do { msg_code=GetMsg(&p1,&p2, 1<color=ROP_XOR+BLACK^COLOR_TRANSPARENT; GrCircle(dc,cx,cy,CIRCLE_RADIUS); dc->color=ROP_XOR+RED^COLOR_TRANSPARENT; t0=tT; total_distance=0.001; total_error=0; x1=p1; y1=p2; do { msg_code=ScanMsg(&p1,&p2, 1<0.95*CIRCUMFERENCE) { if (score