//This loads a lst of zero terminated //strings into the sym table and //gives a name to it. Strings like //this are known as Define entries. //See ST_RAINBOW_10 U0 PrintDigit(U8 ch) { //The %Z code displays a Define subentry if ('0'<=ch<='9') "$FG,%Z$%d$FG$",ch-'0',"ST_RAINBOW_10",ch-'0'; } U0 PrintPattern(U8 *st) { I64 ch; while (ch=*st++) PrintDigit(ch); '\n'; } U0 Digits() { I64 num,ch,i; U8 answer[1024]; SettingsPush; //See SettingsPush Fs->text_attr=DKGRAY<<4+WHITE; DocClear; //Set default background and foreground "$WW,1$$BG,DKGRAY$$FD,WHITE$" "\nThis is a memory game. " "Try to remember the digits and enter them. " "They are colored based on electrical " "engineering color codes.\n"; for (i=0;i<10;i++) "$FG,%Z$%d: %Z\n",i,"ST_RAINBOW_10",i,i,"ST_RAINBOW_10"; "$FG$\n"; //set to default background ch=PressAKey; if (ch==CH_ESC||ch==CH_SHIFT_ESC) goto dg_done; while (TRUE) { restart: num=0; //Set to zeros so we have terminators MemSet(answer,0,sizeof(answer)); while (TRUE) { DocClear; "$WW,1$$BG,DKGRAY$$FD,WHITE$\n"; "Pattern\nLength:%d\n\n",num+1; answer[num++]=RandU32%10+'0'; PrintPattern(answer); ch=PressAKey; if (ch==CH_ESC||ch==CH_SHIFT_ESC) goto dg_done; DocClear; "$WW,1$$BG,DKGRAY$$FD,WHITE$\n"; "Guess\nLength:%d\n\n",num; for (i=0;i<num;i++) { ch=GetChar(,FALSE); if (ch==CH_ESC||ch==CH_SHIFT_ESC) goto dg_done; PrintDigit(ch); if (ch!=answer[i]) { "\nScore:%d\n",num; PrintPattern(answer); Beep; Beep; ch=PressAKey; if (ch==CH_ESC||ch==CH_SHIFT_ESC) goto dg_done; else goto restart; } } } } dg_done: DocClear; SettingsPop; } Digits;