xlib_playground

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit c2d31b1964cdc6f691c9fa31f7f40fae79de4183
parent 2955b2015a96d34d2d51760cf9843628dda3e984
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 18 Dec 2022 10:08:41 +0900

refactor

Diffstat:
Mmain.c | 159++++++++++++++++++++++++++++++++++++++++---------------------------------------
1 file changed, 80 insertions(+), 79 deletions(-)

diff --git a/main.c b/main.c @@ -43,12 +43,13 @@ enum Next_Menu { int next_menu = Start_Menu; - /* function prototypes */ void setup(void); void start_menu(void); void game_init(void); void game_play(void); +void square_handle_collision(void); +void handle_inputs(void); void end_menu(void); void next_tick(float); void cleanup(void); @@ -91,6 +92,7 @@ start_menu(void) char *menu_char_s = "press <space> to start."; XClearArea(display, window, 0, 0, win_width, win_height, False); + XDrawString(display, window, fgc, win_width/2 - strlen(menu_char_q)/2, win_height/2, menu_char_q, strlen(menu_char_q)); @@ -146,74 +148,14 @@ void game_play(void) { long t0, t1, dt; - long t2; // for frame count struct timespec ts; game_init(); clock_gettime(CLOCK_MONOTONIC, &ts); - t0 = t2 = ts.tv_nsec; + t0 = ts.tv_nsec; while (next_menu == Game_Play){ - while (XPending(display) > 0) { - XEvent event; - XNextEvent(display, &event); - switch (event.type) { - case KeyPress: { - switch (XLookupKeysym(&event.xkey, 0)) { - case 'q': - next_menu = End_Menu; - break; - case 'd': - key_state[Key_D] = Key_Down; - break; - case 'a': - key_state[Key_A] = Key_Down; - break; - case 'w': - key_state[Key_W] = Key_Down; - break; - case 's': - key_state[Key_S] = Key_Down; - break; - case ' ': - key_state[Key_Space] = Key_Down; - break; - default: - break; - } - } break; - case KeyRelease: { - switch (XLookupKeysym(&event.xkey, 0)) { - case 'd': - key_state[Key_D] = Key_Up; - break; - case 'a': - key_state[Key_A] = Key_Up; - break; - case 'w': - key_state[Key_W] = Key_Up; - break; - case 's': - key_state[Key_S] = Key_Up; - break; - case ' ': - key_state[Key_Space] = Key_Up; - break; - default: - break; - } - } break; - case ClientMessage: { - if ((Atom) event.xclient.data.l[0] == wm_delete_window) { - next_menu = Quit; - } - } break; - default: - break; - } - } - XWindowAttributes window_attributes_return; XGetWindowAttributes(display, window, &window_attributes_return); win_width = window_attributes_return.width; @@ -227,7 +169,11 @@ game_play(void) t1 = ts.tv_nsec; dt = t1 - t0 > 0 ? t1 - t0 : t1 - t0 + 1000 * 1000 * 1000; } - next_tick(1.0/FPS); + + obj_next_tick(&square, 1.0/FPS); + square_handle_collision(); + handle_inputs(); + clock_gettime(CLOCK_MONOTONIC, &ts); t0 = ts.tv_nsec; @@ -244,16 +190,78 @@ end_menu(void) } void -square_handle_inputs(void) +handle_inputs(void) { + while (XPending(display) > 0) { + XEvent event; + XNextEvent(display, &event); + switch (event.type) { + case KeyPress: { + switch (XLookupKeysym(&event.xkey, 0)) { + case 'q': + next_menu = End_Menu; + break; + case 'd': + key_state[Key_D] = Key_Down; + break; + case 'a': + key_state[Key_A] = Key_Down; + break; + case 'w': + key_state[Key_W] = Key_Down; + break; + case 's': + key_state[Key_S] = Key_Down; + break; + case ' ': + key_state[Key_Space] = Key_Down; + break; + default: + break; + } + } break; + case KeyRelease: { + switch (XLookupKeysym(&event.xkey, 0)) { + case 'd': + key_state[Key_D] = Key_Up; + break; + case 'a': + key_state[Key_A] = Key_Up; + break; + case 'w': + key_state[Key_W] = Key_Up; + break; + case 's': + key_state[Key_S] = Key_Up; + break; + case ' ': + key_state[Key_Space] = Key_Up; + break; + default: + break; + } + } break; + case ClientMessage: { + if ((Atom) event.xclient.data.l[0] == wm_delete_window) { + next_menu = Quit; + } + } break; + default: + break; + } + } + + square.vx = 0; if (key_state[Key_D] == Key_Down) - square.vx = 300; + square.vx += 300; if (key_state[Key_A] == Key_Down) - square.vx = -300; + square.vx += -300; + + square.vy = 0; if (key_state[Key_S] == Key_Down) - square.vy = 300; + square.vy += 300; if (key_state[Key_W] == Key_Down) - square.vy = -300; + square.vy += -300; } void @@ -261,30 +269,23 @@ square_handle_collision(void) { if (square.px <= 0){ square.px = 0; - square.vx *= -0.7; + square.vx = 0; } if (win_width <= square.px + square.width){ square.px = win_width - square.width; - square.vx *= -0.7; + square.vx = 0; } if (square.py <= 0){ square.py = 0; - square.vy *= -0.7; + square.vy = 0; } if (win_height <= square.py + square.height){ square.py = win_height - square.height; - square.vy *= -0.7; + square.vy = 0; } } -void -next_tick(float dt) -{ - obj_next_tick(&square, dt); - square_handle_collision(); - square_handle_inputs(); -} void cleanup(void)