mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-06-07 08:14:48 +00:00
93 lines
1.9 KiB
HolyC
Executable File
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;
|