Commit 7b5a6fc36c4bffa70c8e8d525968bc18b5cf4a31
1 parent
658175b4
Cleanup
Showing
1 changed file
with
27 additions
and
42 deletions
06-multiple_targets/cannon.c
1 | - | ||
2 | #include "primlib.h" | 1 | #include "primlib.h" |
3 | #include <math.h> | 2 | #include <math.h> |
4 | #include <stdlib.h> | 3 | #include <stdlib.h> |
@@ -8,57 +7,46 @@ struct target { | @@ -8,57 +7,46 @@ struct target { | ||
8 | int y; | 7 | int y; |
9 | int speed_x; | 8 | int speed_x; |
10 | int is_explosion; | 9 | int is_explosion; |
11 | - int explosion_counter; // ile razy wyswietlalismy eksplozje | 10 | + int explosion_counter; // how many times we have already displayed an |
11 | + // explosion animation | ||
12 | int color; | 12 | int color; |
13 | }; | 13 | }; |
14 | 14 | ||
15 | // Draw explosion with the center at coordinates (x,y) | 15 | // Draw explosion with the center at coordinates (x,y) |
16 | void drawExplosion(int x, int y, float scaling) { | 16 | void drawExplosion(int x, int y, float scaling) { |
17 | 17 | ||
18 | - gfx_filledTriangle(x - 7 * scaling, y - 7 * scaling, | ||
19 | - x + 7 * scaling, y + 7 * scaling, | ||
20 | - x + 22 * scaling, y - 22 * scaling, RED); | ||
21 | - gfx_filledTriangle(x - 7 * scaling, y - 7 * scaling, | ||
22 | - x + 7 * scaling, y + 7 * scaling, | ||
23 | - x - 22 * scaling, y + 22 * scaling, RED); | ||
24 | - gfx_filledTriangle(x - 7 * scaling, y + 7 * scaling, | ||
25 | - x + 7 * scaling, y - 7 * scaling, | ||
26 | - x - 22 * scaling, y - 22 * scaling, RED); | ||
27 | - gfx_filledTriangle(x - 7 * scaling, y + 7 * scaling, | ||
28 | - x + 7 * scaling, y - 7 * scaling, | ||
29 | - x + 22 * scaling, y + 22 * scaling, RED); | ||
30 | - | ||
31 | - gfx_filledTriangle(x - 13 * scaling, y, | ||
32 | - x + 13 * scaling, y, x, | 18 | + gfx_filledTriangle(x - 7 * scaling, y - 7 * scaling, x + 7 * scaling, |
19 | + y + 7 * scaling, x + 22 * scaling, y - 22 * scaling, RED); | ||
20 | + gfx_filledTriangle(x - 7 * scaling, y - 7 * scaling, x + 7 * scaling, | ||
21 | + y + 7 * scaling, x - 22 * scaling, y + 22 * scaling, RED); | ||
22 | + gfx_filledTriangle(x - 7 * scaling, y + 7 * scaling, x + 7 * scaling, | ||
23 | + y - 7 * scaling, x - 22 * scaling, y - 22 * scaling, RED); | ||
24 | + gfx_filledTriangle(x - 7 * scaling, y + 7 * scaling, x + 7 * scaling, | ||
25 | + y - 7 * scaling, x + 22 * scaling, y + 22 * scaling, RED); | ||
26 | + | ||
27 | + gfx_filledTriangle(x - 13 * scaling, y, x + 13 * scaling, y, x, | ||
33 | y - 35 * scaling, RED); | 28 | y - 35 * scaling, RED); |
34 | - gfx_filledTriangle(x - 13 * scaling, y, | ||
35 | - x + 13 * scaling, y, x, | 29 | + gfx_filledTriangle(x - 13 * scaling, y, x + 13 * scaling, y, x, |
36 | y + 35 * scaling, RED); | 30 | y + 35 * scaling, RED); |
37 | - gfx_filledTriangle(x, y - 13 * scaling, x, | ||
38 | - y + 13 * scaling, x - 35 * scaling, | 31 | + gfx_filledTriangle(x, y - 13 * scaling, x, y + 13 * scaling, x - 35 * scaling, |
39 | y, RED); | 32 | y, RED); |
40 | - gfx_filledTriangle(x, y - 13 * scaling, x, | ||
41 | - y + 13 * scaling, x + 35 * scaling, | 33 | + gfx_filledTriangle(x, y - 13 * scaling, x, y + 13 * scaling, x + 35 * scaling, |
42 | y, RED); | 34 | y, RED); |
43 | } | 35 | } |
44 | 36 | ||
45 | - | ||
46 | void draw_target(struct target *t) { | 37 | void draw_target(struct target *t) { |
47 | if (!t->is_explosion) | 38 | if (!t->is_explosion) |
48 | - gfx_filledRect(t->x - 10, t->y - 10, t->x + 10, t->y + 10, | ||
49 | - t->color); // cel | 39 | + gfx_filledRect(t->x - 10, t->y - 10, t->x + 10, t->y + 10, |
40 | + t->color); // target | ||
50 | 41 | ||
51 | if (t->is_explosion) { | 42 | if (t->is_explosion) { |
52 | drawExplosion(t->x, t->y + t->explosion_counter * 10, | 43 | drawExplosion(t->x, t->y + t->explosion_counter * 10, |
53 | t->explosion_counter / 5.0); | 44 | t->explosion_counter / 5.0); |
54 | } | 45 | } |
55 | - | ||
56 | } | 46 | } |
57 | 47 | ||
58 | - | ||
59 | void move_target(struct target *t) { | 48 | void move_target(struct target *t) { |
60 | - if(!t->is_explosion) | ||
61 | - { | 49 | + if (!t->is_explosion) { |
62 | t->x += t->speed_x; | 50 | t->x += t->speed_x; |
63 | 51 | ||
64 | if (t->x > gfx_screenWidth()) | 52 | if (t->x > gfx_screenWidth()) |
@@ -128,26 +116,23 @@ int main() { | @@ -128,26 +116,23 @@ int main() { | ||
128 | for (int i = 0; i < num_targets; ++i) | 116 | for (int i = 0; i < num_targets; ++i) |
129 | draw_target(&(t[i])); | 117 | draw_target(&(t[i])); |
130 | 118 | ||
131 | - | 119 | + // bullet position wrt the center of the bottom of the screen |
132 | int x_bullet = bullet_distance * cos(fire_angle); | 120 | int x_bullet = bullet_distance * cos(fire_angle); |
133 | int y_bullet = bullet_distance * sin(fire_angle); | 121 | int y_bullet = bullet_distance * sin(fire_angle); |
134 | - int x_bullet_pot = gfx_screenWidth() / 2 + x_bullet; | ||
135 | - int y_bullet_pot = gfx_screenHeight() - y_bullet; | ||
136 | - | ||
137 | - if (is_shooting) { | ||
138 | - // if(!is_explosion) | ||
139 | - gfx_filledCircle(gfx_screenWidth() / 2 + x_bullet, | ||
140 | - gfx_screenHeight() - y_bullet, 10, RED); // pocisk | ||
141 | 122 | ||
123 | + // bullet position wrt the top-left corner | ||
124 | + int x_bullet_tlc = gfx_screenWidth() / 2 + x_bullet; | ||
125 | + int y_bullet_tlc = gfx_screenHeight() - y_bullet; | ||
142 | 126 | ||
127 | + if (is_shooting) { | ||
128 | + gfx_filledCircle(x_bullet_tlc, y_bullet_tlc, 10, RED); // bullet | ||
143 | } | 129 | } |
144 | 130 | ||
145 | gfx_updateScreen(); | 131 | gfx_updateScreen(); |
146 | 132 | ||
147 | - if (is_shooting) | ||
148 | - { | 133 | + if (is_shooting) { |
149 | for (int i = 0; i < num_targets; ++i) { | 134 | for (int i = 0; i < num_targets; ++i) { |
150 | - if (hypot(x_bullet_pot - t[i].x, y_bullet_pot - t[i].y) < 50) { | 135 | + if (hypot(x_bullet_tlc - t[i].x, y_bullet_tlc - t[i].y) < 50) { |
151 | t[i].is_explosion = 1; | 136 | t[i].is_explosion = 1; |
152 | t[i].explosion_counter = 0; | 137 | t[i].explosion_counter = 0; |
153 | } | 138 | } |
@@ -156,7 +141,7 @@ int main() { | @@ -156,7 +141,7 @@ int main() { | ||
156 | } | 141 | } |
157 | 142 | ||
158 | for (int i = 0; i < num_targets; ++i) | 143 | for (int i = 0; i < num_targets; ++i) |
159 | - move_target(&(t[i])); | 144 | + move_target(&(t[i])); |
160 | 145 | ||
161 | if (gfx_isKeyDown(SDLK_RIGHT)) | 146 | if (gfx_isKeyDown(SDLK_RIGHT)) |
162 | angle -= 1.0 * (M_PI / 180.0); | 147 | angle -= 1.0 * (M_PI / 180.0); |