ZealOS/src/Demo/Games/Digits.CC
2021-07-01 19:53:42 -04:00

93 lines
1.9 KiB
HolyC
Executable File

//This loads a list of zero terminated
//strings into the sym table and
//gives a name to it. Strings like
//this are known as Define entries.
//See $LK,"ST_RAINBOW_10",A="FF:::/System/Gr/GrPalette.CC,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 $LK,"SettingsPush",A="MN: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 = CharGet(, 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;