From 2ba834f1656faa1f7e8437f303caba5166a3b9eb Mon Sep 17 00:00:00 2001 From: katherine Date: Sat, 13 Feb 2021 00:27:16 -0700 Subject: better input --- 01-rwalk/src/main.c | 3 ++ 02-wolfautomata/src/main.c | 3 ++ 03-wolfrand/src/main.c | 8 ++++-- 04-conway/screenshot.png | Bin 1658 -> 2183 bytes 04-conway/src/main.c | 69 +++++++++++++++++++++++++++++++++------------ 5 files changed, 63 insertions(+), 20 deletions(-) diff --git a/01-rwalk/src/main.c b/01-rwalk/src/main.c index 98ede82..3a3c81f 100644 --- a/01-rwalk/src/main.c +++ b/01-rwalk/src/main.c @@ -92,6 +92,9 @@ int main(int argc, char **argv) case ALLEGRO_EVENT_KEY_DOWN: switch(e.keyboard.keycode) { + case ALLEGRO_KEY_Q: + goto done; + case ALLEGRO_KEY_1: setting = 0; puts("1"); diff --git a/02-wolfautomata/src/main.c b/02-wolfautomata/src/main.c index ded18d3..889da85 100644 --- a/02-wolfautomata/src/main.c +++ b/02-wolfautomata/src/main.c @@ -96,6 +96,9 @@ reset: case ALLEGRO_EVENT_KEY_DOWN: switch(e.keyboard.keycode) { + case ALLEGRO_KEY_Q: + goto done; + case ALLEGRO_KEY_UP: automaton += 10; printf("%d\n", automaton); diff --git a/03-wolfrand/src/main.c b/03-wolfrand/src/main.c index b23cf81..e38dd56 100644 --- a/03-wolfrand/src/main.c +++ b/03-wolfrand/src/main.c @@ -88,12 +88,16 @@ int main(int argc, char **argv) case ALLEGRO_EVENT_KEY_DOWN: switch(e.keyboard.keycode) { + case ALLEGRO_KEY_Q: + goto done; + case ALLEGRO_KEY_1: - randomness = (randomness == 64 ? 4 : randomness * 2); + framerate = (framerate == 1 ? 8 : framerate / 2); + printf("fps: %.1f\n", FPS / ((float)framerate) ); break; case ALLEGRO_KEY_2: - framerate = (framerate == 1 ? 8 : framerate / 2); + randomness = (randomness == 64 ? 4 : randomness * 2); break; case ALLEGRO_KEY_UP: diff --git a/04-conway/screenshot.png b/04-conway/screenshot.png index f262070..ccef355 100644 Binary files a/04-conway/screenshot.png and b/04-conway/screenshot.png differ diff --git a/04-conway/src/main.c b/04-conway/src/main.c index fd591d9..75ed338 100644 --- a/04-conway/src/main.c +++ b/04-conway/src/main.c @@ -8,12 +8,14 @@ #include -#define BUF_W 512 -#define BUF_H 512 +#define BUF_W 256 +#define BUF_H 256 + +#define DISP_SCALE 3 #define SEED_BITS 4096 -#define FPS 20.0 +#define FPS 60.0 #define DO_INIT(check, desc) \ if (!(check)) { \ @@ -39,11 +41,14 @@ int main(int argc, char **argv) uint8_t bits1[BUF_H][BUF_W / 8] = {0}; uint8_t bits2[BUF_H][BUF_W / 8] = {0}; - uint8_t framerate = 2; + uint8_t framerate = 8; unsigned goframes = 1; unsigned x, y, sum; - bool pause = 1; + bool pause = true; + bool mouse_down = false; + + ALLEGRO_MOUSE_STATE ms; ALLEGRO_DISPLAY *d = NULL; ALLEGRO_BITMAP *b = NULL; @@ -57,16 +62,21 @@ int main(int argc, char **argv) DO_INIT(al_init(), "allegro"); DO_INIT(al_init_primitives_addon(), "primitives"); DO_INIT(al_install_keyboard(), "keyboard"); + DO_INIT(al_install_mouse(), "mouse"); DO_INIT(t = al_create_timer(1.0 / FPS), "timer"); DO_INIT(eq = al_create_event_queue(), "event queue"); al_set_new_display_option(ALLEGRO_SINGLE_BUFFER, 1, ALLEGRO_REQUIRE); - DO_INIT(d = al_create_display(2 * BUF_W, 2 * BUF_H), "display"); + DO_INIT(d = al_create_display( + DISP_SCALE * BUF_W, DISP_SCALE * BUF_H + ), "display" + ); al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); DO_INIT(b = al_create_bitmap(BUF_W, BUF_H), "buffer"); al_register_event_source(eq, al_get_keyboard_event_source()); + al_register_event_source(eq, al_get_mouse_event_source()); al_register_event_source(eq, al_get_display_event_source(d)); al_register_event_source(eq, al_get_timer_event_source(t)); @@ -77,13 +87,6 @@ reset: memset(bits1, 0, sizeof(bits1)); - for (x = 0; x < SEED_BITS; x++) { - bit_set( - bits1[randombytes_random() % BUF_H], - randombytes_random() % BUF_W - ); - } - while(true) { al_wait_for_event(eq, &e); @@ -92,18 +95,39 @@ reset: case ALLEGRO_EVENT_DISPLAY_CLOSE: goto done; + case ALLEGRO_EVENT_MOUSE_BUTTON_DOWN: + bit_set(bits1[e.mouse.y / DISP_SCALE], e.mouse.x / DISP_SCALE); + mouse_down = true; + break; + + case ALLEGRO_EVENT_MOUSE_BUTTON_UP: + mouse_down = false; + break; + case ALLEGRO_EVENT_KEY_DOWN: switch(e.keyboard.keycode) { + case ALLEGRO_KEY_Q: + goto done; + case ALLEGRO_KEY_1: - puts("reset"); - goto reset; + framerate = (framerate == 2 ? 16 : framerate / 2); + printf("fps: %.1f\n", FPS / ((float)framerate) ); + break; case ALLEGRO_KEY_2: - framerate = (framerate == 1 ? 8 : framerate / 2); - printf("fps: %.1f\n", FPS / ((float)framerate) ); + memset(bits1, 0, sizeof(bits1)); + for (x = 0; x < SEED_BITS; x++) { + bit_set( + bits1[randombytes_random() % BUF_H], + randombytes_random() % BUF_W + ); + } break; + case ALLEGRO_KEY_3: + goto reset; + case ALLEGRO_KEY_ENTER: pause = !pause; printf("%s\n", pause ? "pause" : "play"); @@ -118,6 +142,11 @@ reset: case ALLEGRO_EVENT_TIMER: + if (mouse_down) { + al_get_mouse_state(&ms); + bit_set(bits1[ms.y / 2], ms.x / 2); + } + if (goframes > 1) { goframes--; break; @@ -167,7 +196,11 @@ reset: al_unlock_bitmap(b); al_set_target_backbuffer(d); - al_draw_scaled_bitmap(b, 0, 0, BUF_W, BUF_H, 0, 0, 2 * BUF_W, 2 * BUF_H, 0); + al_draw_scaled_bitmap(b, + 0, 0, BUF_W, BUF_H, + 0, 0, DISP_SCALE * BUF_W, DISP_SCALE * BUF_H, + 0 + ); al_flip_display(); goframes = framerate; -- cgit v1.2.3