basekernel/user/ball.c

80 lines
1.5 KiB
C
Raw Permalink Normal View History

2024-10-14 23:10:08 +02:00
/*
Copyright (C) 2016-2019 The University of Notre Dame
This software is distributed under the GNU General Public License.
See the file LICENSE for details.
*/
/*
A fun graphics demo that features text bouncing around the screen.
*/
#include "library/syscalls.h"
#include "library/stdio.h"
#include "library/string.h"
#include "library/nwindow.h"
typedef unsigned int uint32_t;
uint32_t randint(uint32_t min, uint32_t max);
void move(int *x, int *d, int min, int max);
int main(int argc, char *argv[])
{
int r = 255;
int g = 0;
int b = 0;
int x1 = 12;
int y1 = 12;
int dx1 = 4;
int dy1 = 1;
int dr = -1;
int dg = 2;
int db = 3;
struct nwindow *nw = nw_create_default();
int width = nw_width(nw);
int height = nw_height(nw);
nw_clear(nw,0, 0, width, height);
nw_flush(nw);
while(nw_getchar(nw,0)!='q') {
move(&x1, &dx1, 0, width - 80);
move(&y1, &dy1, 0, height - 1);
move(&r, &dr, 0, 255);
move(&g, &dg, 0, 255);
move(&b, &db, 0, 255);
nw_fgcolor(nw,r, g, b);
nw_string(nw,x1, y1, "basekernel");
nw_flush(nw);
syscall_process_sleep(75);
}
nw_clear(nw,0, 0, width, height);
nw_fgcolor(nw,255, 255, 255);
nw_flush(nw);
return 0;
}
uint32_t randint(uint32_t min, uint32_t max)
{
static uint32_t state = 0xF3DC1A24;
state = (state * 1299721) + 29443;
return min + ((state >> 16) % (max - min + 1));
}
void move(int *x, int *d, int min, int max)
{
*x += *d;
if(*x < min) {
*x = min;
*d = randint(1, 10);
}
if(*x > max) {
*x = max;
*d = -randint(1, 10);
}
}