commit 75162ff667d611a757773ce1288c78e93bace235
parent ccc2ec76319127f7532ffa43994c9878a485623e
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 25 Dec 2022 17:42:09 +0900
fix bug
Diffstat:
M | ex5/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