//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;