Files
xv6-custom-os/maze.c
iDunnoDev 662e3795a7 Added ability to set a title for the console
Added seed value to the maze generator
Added a title lock to the console
Added a vconsole lock that locks on any virtual console change
Changed some of the locks used to free up
2022-12-18 11:42:58 +00:00

76 lines
1.7 KiB
C

#include "types.h"
#include "user.h"
uint rngnumber(void)
{
// Take from http://stackoverflow.com/questions/1167253/implementation-of-rand
static unsigned int z1 = 12345, z2 = 12345, z3 = 12345, z4 = 12345;
unsigned int b;
b = ((z1 << 6) ^ z1) >> 13;
z1 = ((z1 & 4294967294U) << 18) ^ b;
b = ((z2 << 2) ^ z2) >> 27;
z2 = ((z2 & 4294967288U) << 2) ^ b;
b = ((z3 << 13) ^ z3) >> 21;
z3 = ((z3 & 4294967280U) << 7) ^ b;
b = ((z4 << 3) ^ z4) >> 12;
z4 = ((z4 & 4294967168U) << 13) ^ b;
return (z1 ^ z2 ^ z3 ^ z4) / 2;
}
int rngrange(int start, int end, int seed)
{
if (end < start)
{
int swtmp = start;
start = end;
end = swtmp;
}
int range = end - start + 1;
return (rngnumber() + seed) % (range) + start;
}
int main(int argc, char *argv[]) {
int lines = 1000;
int seed = getpid();
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-l") == 0)
{
lines = atoi(argv[i + 1]);
}
else if (strcmp(argv[i], "-s") == 0)
{
seed = atoi(argv[i + 1]);
}
}
cls();
printf(1, "Start Maze\n");
for (int y = 0; y < lines; y++)
{
for (int x = 0; x < 80; x++)
{
int rndnum = rngrange(188, 197, seed);
switch (rndnum)
{
case 188:
rndnum = 32;
break;
case 189:
rndnum = 179;
break;
case 190:
rndnum = 180;
break;
}
printf(1, "%c", rndnum);
}
//printf(1, "\n");
sleep(10);
}
printf(1, "Maze Ended\n");
exit();
}