//Conway's Game of Life CDC *dc[2]; //dbl buf I64 cur_dc,; Bool restart; U0 DrawIt(CTask *,CDC *dc2) { dc[cur_dc]->flags|=DCF_NO_TRANSPARENTS; GrBlot(dc2,0,0,dc[cur_dc]); } U0 AnimateTask(I64) { I64 x,y,x1,y1,cnt,next_dc; while (TRUE) { next_dc=cur_dc^1; start_over: restart=FALSE; DCClear(dc[next_dc]); for (y=1;yparent_task->pix_height-1;y++) { for (x=1;xparent_task->pix_width-1;x++) { cnt=0; for (y1=y-1;y1<=y+1;y1++) for (x1=x-1;x1<=x+1;x1++) if (GrPeek(dc[cur_dc],x1,y1)==GREEN) cnt++; if (restart) goto start_over; if (GrPeek(dc[cur_dc],x,y)==GREEN) { if (cnt==3) { dc[next_dc]->color=GREEN; GrPlot(dc[next_dc],x,y); } } else { // if (cnt==3) {//Use this for the classic rules if (cnt==2) { dc[next_dc]->color=GREEN; GrPlot(dc[next_dc],x,y); } } } Yield; } Sleep(50); cur_dc=next_dc; } } public U0 Life() { I64 msg_code,cnt,x1,y1,x2,y2,arg1,arg2; dc[0]=DCNew(GR_WIDTH,GR_HEIGHT); dc[1]=DCNew(GR_WIDTH,GR_HEIGHT); cur_dc=0; restart=FALSE; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ AutoComplete; WinBorder; WinMax; DocClear; DCFill; Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Fs->draw_it=&DrawIt; Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; do { msg_code=GetMsg(&arg1,&arg2,1<color=GREEN; dc[cur_dc]->thick=0.04*ms.speed; GrLine3(dc[cur_dc],x1,y1,0,x2,y2,0); restart=TRUE; msg_code=GetMsg(&arg1,&arg2,1<