xlib_playground

Xlib playground for experiments.
Log | Files | Refs

commit 75162ff667d611a757773ce1288c78e93bace235
parent ccc2ec76319127f7532ffa43994c9878a485623e
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 25 Dec 2022 17:42:09 +0900

fix bug

Diffstat:
Mex5/ex5.c | 39++++++++++++---------------------------
1 file changed, 12 insertions(+), 27 deletions(-)

diff --git a/ex5/ex5.c b/ex5/ex5.c @@ -12,7 +12,7 @@ #define INIT_HEIGHT (600) #define FPS (60) #define SUB_TICK (4) -#define NUM_RECT (100) +#define NUM_CIRCLE (100) #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) @@ -58,9 +58,9 @@ struct circle { Display *display; Window window; unsigned int win_width = INIT_WIDTH, win_height = INIT_HEIGHT; -GC gc, sgc[NUM_RECT]; +GC gc, sgc[NUM_CIRCLE]; Atom wm_delete_window; -struct circle circle[NUM_RECT]; +struct circle circle[NUM_CIRCLE]; int next_menu = START_MENU; @@ -98,7 +98,7 @@ setup(void) XStoreName(display, window, "UNKO"); gc = XCreateGC(display, window, 0, NULL); XSetForeground(display, gc, 0x00FFFF); - for (int i = 0; i < NUM_RECT; i++){ + for (int i = 0; i < NUM_CIRCLE; i++){ sgc[i] = XCreateGC(display, window, 0, NULL); XSetForeground(display, sgc[i], 0x00FF00); } @@ -472,7 +472,7 @@ game_play(void) #endif struct timespec ts; - for(int i = 0; i < NUM_RECT; i++){ + for(int i = 0; i < NUM_CIRCLE; i++){ circle[i].ppx = circle[i].px = rand() * (float)win_width / (float)RAND_MAX; circle[i].ppy = circle[i].py = rand() * (float)win_height / (float)RAND_MAX; circle[i].vx = rand() * 300.0 / (float)RAND_MAX - 150; @@ -480,21 +480,6 @@ game_play(void) circle[i].r = rand() * 30.0 / (float)RAND_MAX + 5; circle[i].m = circle[i].r * circle[i].r; } -/* - circle[0].ppx = circle[0].px = 100; - circle[0].ppy = circle[0].py = 400; - circle[0].vx = 100; - circle[0].vy = -100; - circle[0].r = 100; - circle[0].m = circle[0].r * circle[0].r; - circle[1].ppx = circle[1].px = 400; - circle[1].ppy = circle[1].py = 100; - circle[1].vx = -100; - circle[1].vy = 200; - circle[1].r = 100; - circle[1].m = circle[1].r * circle[1].r; - -*/ while (next_menu == GAME_PLAY){ clock_gettime(CLOCK_MONOTONIC, &ts); @@ -506,19 +491,19 @@ game_play(void) clock_gettime(CLOCK_MONOTONIC, &ts); t0 = ts.tv_nsec; - int collision[NUM_RECT] = {0}; - for (int j = 0; j < SUB_TICK; j++) { - for (int i = 0; i < NUM_RECT; i++) + int collision[NUM_CIRCLE] = {0}; + for (int k = 0; k < SUB_TICK; k++) { + for (int i = 0; i < NUM_CIRCLE; i++) circle_next_tick(&circle[i], 1000 * 1000 * 1000 / FPS / SUB_TICK); - for (int i = 0; i < NUM_RECT; i++) - for (int j = i + 1; j < NUM_RECT; j++) { + for (int i = 0; i < NUM_CIRCLE; i++) + for (int j = i + 1; j < NUM_CIRCLE; j++) { circle_handle_collision_elastic(&circle[i], &circle[j]); if (circle_test_collision(&circle[i], &circle[j])) collision[i] = collision[j] = 1; } } - for (int i = 0; i < NUM_RECT; i++) + for (int i = 0; i < NUM_CIRCLE; i++) if (collision[i] == 1) XSetForeground(display, sgc[i], 0xFFFF00); else @@ -546,7 +531,7 @@ game_play(void) 0, 0, // position win_width, win_height, // width and height False); - for (int i = 0; i < NUM_RECT; i++) { + for (int i = 0; i < NUM_CIRCLE; i++) { XDrawArc(display, window, sgc[i], circle[i].px - circle[i].r, circle[i].py - circle[i].r, // position