summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoredGuy <osome3717@gmail.com>2024-12-30 18:46:31 +0300
committerBoredGuy <osome3717@gmail.com>2024-12-30 18:46:31 +0300
commit6f7d1bb16ff266f4126a46c6acb132dd9f80cd86 (patch)
tree126fc32cfae7dc53f3f4b1769453ff1b1fb336b4
parent6f3fe42d5888e70fe195b6bbf32b7bdd4059415b (diff)
Smoother Movement
Tis all
-rw-r--r--Week1-Pacman/assets/Maps/maze.csv58
-rw-r--r--Week1-Pacman/src/animation.c5
-rw-r--r--Week1-Pacman/src/animation.h1
-rw-r--r--Week1-Pacman/src/main.c20
-rw-r--r--Week1-Pacman/src/map.c4
-rw-r--r--Week1-Pacman/src/pacman.c67
-rw-r--r--Week1-Pacman/src/pacman.h3
7 files changed, 103 insertions, 55 deletions
diff --git a/Week1-Pacman/assets/Maps/maze.csv b/Week1-Pacman/assets/Maps/maze.csv
index fa517af..3cb43bb 100644
--- a/Week1-Pacman/assets/Maps/maze.csv
+++ b/Week1-Pacman/assets/Maps/maze.csv
@@ -1,31 +1,29 @@
-283,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,286
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
-319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358
+283,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,286
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,192,194,-1,-1,-1,-1,-1,197,199,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,228,265,-1,-1,-1,-1,-1,-1,271,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,228,265,-1,-1,-1,-1,-1,-1,271,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,336,337,337,337,337,337,337,337,343,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
+319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322
391,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,394
diff --git a/Week1-Pacman/src/animation.c b/Week1-Pacman/src/animation.c
index 0747ba1..7e4bb57 100644
--- a/Week1-Pacman/src/animation.c
+++ b/Week1-Pacman/src/animation.c
@@ -64,3 +64,8 @@ void draw_animation(struct demo* demo,
NULL,
SDL_FLIP_NONE);
}
+
+void reset_animation(struct animation* animation) {
+ animation->current_frame = 0;
+ animation->current_time = 0;
+}
diff --git a/Week1-Pacman/src/animation.h b/Week1-Pacman/src/animation.h
index e6c717a..390e3f5 100644
--- a/Week1-Pacman/src/animation.h
+++ b/Week1-Pacman/src/animation.h
@@ -34,5 +34,6 @@ void free_animation(struct animation* animation);
void draw_animation(struct demo* demo,
const struct animation* animation,
const SDL_Rect* d_rect);
+void reset_animation(struct animation* animation);
#endif // ANIMATION_H_
diff --git a/Week1-Pacman/src/main.c b/Week1-Pacman/src/main.c
index 90e085b..041dfb8 100644
--- a/Week1-Pacman/src/main.c
+++ b/Week1-Pacman/src/main.c
@@ -10,7 +10,6 @@
#define WINDOW_HEIGHT 600
int main() {
- int counter = 0;
SDL_Init(SDL_INIT_EVERYTHING);
struct demo demo = {0};
@@ -64,6 +63,8 @@ int main() {
}
});
pacman.facing = FACING_DOWN;
+ pacman.xpos = 100;
+ pacman.ypos = 200;
int then = SDL_GetTicks();
@@ -81,26 +82,11 @@ int main() {
then = now;
SDL_RenderClear(demo.ren);
- update_pacman(&pacman, dt);
+ update_pacman(&pacman, dt, &map);
update_demo(&demo);
draw_map(&demo, &map);
draw_pacman(&demo, &pacman);
SDL_RenderPresent(demo.ren);
-
- SDL_Rect r = {
- .x = pacman.xpos,
- .y = pacman.ypos,
- .w = 40,
- .h = 40
- };
-
- for(int i = 0; i < map.collider_count; i++) {
- if(is_colliding(&r, &map.colliders[i])) {
- printf("%d: Collision!\n", counter);
- counter++;
- break;
- }
- }
}
SDL_DestroyRenderer(demo.ren);
diff --git a/Week1-Pacman/src/map.c b/Week1-Pacman/src/map.c
index 7df77af..d5efc9d 100644
--- a/Week1-Pacman/src/map.c
+++ b/Week1-Pacman/src/map.c
@@ -77,9 +77,9 @@ void add_map_row(const char* line, struct map* map) {
map->colliders[map->collider_count - 1] =
(SDL_Rect) {
.x = i * 26,
- .y = (map->height - 1) * 26,
+ .y = (map->height - 1) * 20,
.w = 26,
- .h = 26
+ .h = 20
};
}
diff --git a/Week1-Pacman/src/pacman.c b/Week1-Pacman/src/pacman.c
index f3a4769..de9774d 100644
--- a/Week1-Pacman/src/pacman.c
+++ b/Week1-Pacman/src/pacman.c
@@ -1,10 +1,13 @@
#include <SDL2/SDL.h>
#include <stdbool.h>
#include "pacman.h"
+#include "collision.h"
#define PACMAN_SPEED 261
#define PACMAN_SIDE 40
+SDL_Rect* get_colliding_tile(struct pacman* pacman, struct map* map);
+
void handle_pacman_input(SDL_Event* e, struct pacman* pacman) {
if(e->type == SDL_KEYDOWN) {
@@ -25,19 +28,56 @@ void handle_pacman_input(SDL_Event* e, struct pacman* pacman) {
}
}
-void update_pacman(struct pacman* pacman, float dt) {
-
+void update_pacman(struct pacman* pacman, float dt, struct map* map) {
if(pacman->facing == FACING_UP) {
pacman->ypos -= PACMAN_SPEED * dt;
+
+ SDL_Rect* colliding_tile =
+ get_colliding_tile(pacman, map);
+
+ if(colliding_tile != NULL) {
+ pacman->ypos =
+ colliding_tile->y + colliding_tile->h;
+ } else {
+ update_animation(&pacman->animations[pacman->facing], dt);
+ }
} else if(pacman->facing == FACING_DOWN) {
pacman->ypos += PACMAN_SPEED * dt;
+
+ SDL_Rect* colliding_tile =
+ get_colliding_tile(pacman, map);
+
+ if(colliding_tile != NULL) {
+ pacman->ypos =
+ colliding_tile->y - PACMAN_SIDE;
+ } else {
+ update_animation(&pacman->animations[pacman->facing], dt);
+ }
} else if(pacman->facing == FACING_LEFT) {
pacman->xpos -= PACMAN_SPEED * dt;
- } else {
+
+ SDL_Rect* colliding_tile =
+ get_colliding_tile(pacman, map);
+
+ if(colliding_tile != NULL) {
+ pacman->xpos =
+ colliding_tile->x + colliding_tile->w;
+ } else {
+ update_animation(&pacman->animations[pacman->facing], dt);
+ }
+ } else if(pacman->facing == FACING_RIGHT) {
pacman->xpos += PACMAN_SPEED * dt;
- }
- update_animation(&pacman->animations[pacman->facing], dt);
+ SDL_Rect* colliding_tile =
+ get_colliding_tile(pacman, map);
+
+ if(colliding_tile != NULL) {
+ pacman->xpos =
+ colliding_tile->x - PACMAN_SIDE;
+ } else {
+ update_animation(&pacman->animations[pacman->facing], dt);
+ }
+ }
}
void draw_pacman(struct demo* demo, const struct pacman* pacman) {
@@ -53,3 +93,20 @@ void draw_pacman(struct demo* demo, const struct pacman* pacman) {
draw_animation(demo, current_animation, &d_rect);
}
+
+SDL_Rect* get_colliding_tile(struct pacman* pacman, struct map* map) {
+ SDL_Rect r = (SDL_Rect){
+ .x = pacman->xpos,
+ .y = pacman->ypos,
+ .w = PACMAN_SIDE,
+ .h = PACMAN_SIDE
+ };
+
+ for(int i = 0; i < map->collider_count; i++) {
+ if(is_colliding(&r, &map->colliders[i])) {
+ return &map->colliders[i];
+ }
+ }
+
+ return NULL;
+}
diff --git a/Week1-Pacman/src/pacman.h b/Week1-Pacman/src/pacman.h
index e1610af..3bb0681 100644
--- a/Week1-Pacman/src/pacman.h
+++ b/Week1-Pacman/src/pacman.h
@@ -4,6 +4,7 @@
#include <SDL2/SDL.h>
#include "animation.h"
#include "demo.h"
+#include "map.h"
enum facing {
FACING_RIGHT,
@@ -26,7 +27,7 @@ struct pacman {
};
void handle_pacman_input(SDL_Event* e, struct pacman* pacman);
-void update_pacman(struct pacman* pacman, float dt);
+void update_pacman(struct pacman* pacman, float dt, struct map* map);
void draw_pacman(struct demo* demo, const struct pacman* pacman);
#endif // PACMAN_H_