From 61252071880c625b367623191cc86b3a98b8d562 Mon Sep 17 00:00:00 2001 From: BoredGuy Date: Mon, 23 Dec 2024 12:32:54 +0300 Subject: Work started on adding a level system - Levels load from tiled CSV export - Levels also draw We need to add collisions with the level and adjust the level's width and height to fit well in a 4:3 window --- Week1-Pacman/assets/Maps/maze.csv | 31 ++++++ Week1-Pacman/assets/Sprites/BigCoin.png | Bin 0 -> 344 bytes Week1-Pacman/assets/Sprites/BigCoinTransparent.png | Bin 0 -> 349 bytes Week1-Pacman/assets/Sprites/Coin.png | Bin 0 -> 322 bytes Week1-Pacman/assets/Sprites/CoinTransparent.png | Bin 0 -> 309 bytes Week1-Pacman/assets/Sprites/PacMan.png | Bin 0 -> 639 bytes Week1-Pacman/assets/Sprites/Tileset.png | Bin 0 -> 1444 bytes Week1-Pacman/assets/Sprites/atlas.png | Bin 0 -> 1699 bytes Week1-Pacman/assets/Sprites/blueGhost.png | Bin 0 -> 615 bytes Week1-Pacman/assets/Sprites/greenGhost.png | Bin 0 -> 571 bytes Week1-Pacman/assets/Sprites/orangeGhost.png | Bin 0 -> 629 bytes Week1-Pacman/assets/Sprites/redGhost.png | Bin 0 -> 572 bytes Week1-Pacman/assets/Sprites/sprites.png | Bin 0 -> 4698 bytes Week1-Pacman/assets/Sprites/yellowGhost.png | Bin 0 -> 571 bytes Week1-Pacman/src/main.c | 32 +++--- Week1-Pacman/src/map.c | 115 +++++++++++++++++++++ Week1-Pacman/src/map.h | 20 ++++ 17 files changed, 186 insertions(+), 12 deletions(-) create mode 100644 Week1-Pacman/assets/Maps/maze.csv create mode 100644 Week1-Pacman/assets/Sprites/BigCoin.png create mode 100644 Week1-Pacman/assets/Sprites/BigCoinTransparent.png create mode 100644 Week1-Pacman/assets/Sprites/Coin.png create mode 100644 Week1-Pacman/assets/Sprites/CoinTransparent.png create mode 100644 Week1-Pacman/assets/Sprites/PacMan.png create mode 100644 Week1-Pacman/assets/Sprites/Tileset.png create mode 100644 Week1-Pacman/assets/Sprites/atlas.png create mode 100644 Week1-Pacman/assets/Sprites/blueGhost.png create mode 100644 Week1-Pacman/assets/Sprites/greenGhost.png create mode 100644 Week1-Pacman/assets/Sprites/orangeGhost.png create mode 100644 Week1-Pacman/assets/Sprites/redGhost.png create mode 100644 Week1-Pacman/assets/Sprites/sprites.png create mode 100644 Week1-Pacman/assets/Sprites/yellowGhost.png create mode 100644 Week1-Pacman/src/map.c create mode 100644 Week1-Pacman/src/map.h (limited to 'Week1-Pacman') diff --git a/Week1-Pacman/assets/Maps/maze.csv b/Week1-Pacman/assets/Maps/maze.csv new file mode 100644 index 0000000..fa517af --- /dev/null +++ b/Week1-Pacman/assets/Maps/maze.csv @@ -0,0 +1,31 @@ +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 +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/assets/Sprites/BigCoin.png b/Week1-Pacman/assets/Sprites/BigCoin.png new file mode 100644 index 0000000..773569b Binary files /dev/null and b/Week1-Pacman/assets/Sprites/BigCoin.png differ diff --git a/Week1-Pacman/assets/Sprites/BigCoinTransparent.png b/Week1-Pacman/assets/Sprites/BigCoinTransparent.png new file mode 100644 index 0000000..5e0b453 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/BigCoinTransparent.png differ diff --git a/Week1-Pacman/assets/Sprites/Coin.png b/Week1-Pacman/assets/Sprites/Coin.png new file mode 100644 index 0000000..8fcdaf8 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/Coin.png differ diff --git a/Week1-Pacman/assets/Sprites/CoinTransparent.png b/Week1-Pacman/assets/Sprites/CoinTransparent.png new file mode 100644 index 0000000..09779bf Binary files /dev/null and b/Week1-Pacman/assets/Sprites/CoinTransparent.png differ diff --git a/Week1-Pacman/assets/Sprites/PacMan.png b/Week1-Pacman/assets/Sprites/PacMan.png new file mode 100644 index 0000000..490ebf0 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/PacMan.png differ diff --git a/Week1-Pacman/assets/Sprites/Tileset.png b/Week1-Pacman/assets/Sprites/Tileset.png new file mode 100644 index 0000000..b0cc61a Binary files /dev/null and b/Week1-Pacman/assets/Sprites/Tileset.png differ diff --git a/Week1-Pacman/assets/Sprites/atlas.png b/Week1-Pacman/assets/Sprites/atlas.png new file mode 100644 index 0000000..6d4af65 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/atlas.png differ diff --git a/Week1-Pacman/assets/Sprites/blueGhost.png b/Week1-Pacman/assets/Sprites/blueGhost.png new file mode 100644 index 0000000..4d15d59 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/blueGhost.png differ diff --git a/Week1-Pacman/assets/Sprites/greenGhost.png b/Week1-Pacman/assets/Sprites/greenGhost.png new file mode 100644 index 0000000..6e6454f Binary files /dev/null and b/Week1-Pacman/assets/Sprites/greenGhost.png differ diff --git a/Week1-Pacman/assets/Sprites/orangeGhost.png b/Week1-Pacman/assets/Sprites/orangeGhost.png new file mode 100644 index 0000000..8c5ff93 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/orangeGhost.png differ diff --git a/Week1-Pacman/assets/Sprites/redGhost.png b/Week1-Pacman/assets/Sprites/redGhost.png new file mode 100644 index 0000000..de4bdde Binary files /dev/null and b/Week1-Pacman/assets/Sprites/redGhost.png differ diff --git a/Week1-Pacman/assets/Sprites/sprites.png b/Week1-Pacman/assets/Sprites/sprites.png new file mode 100644 index 0000000..150ca37 Binary files /dev/null and b/Week1-Pacman/assets/Sprites/sprites.png differ diff --git a/Week1-Pacman/assets/Sprites/yellowGhost.png b/Week1-Pacman/assets/Sprites/yellowGhost.png new file mode 100644 index 0000000..1a845ce Binary files /dev/null and b/Week1-Pacman/assets/Sprites/yellowGhost.png differ diff --git a/Week1-Pacman/src/main.c b/Week1-Pacman/src/main.c index e4113be..373d795 100644 --- a/Week1-Pacman/src/main.c +++ b/Week1-Pacman/src/main.c @@ -3,6 +3,7 @@ #include #include "demo.h" #include "pacman.h" +#include "map.h" #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 @@ -25,10 +26,16 @@ int main() { SDL_Event e; struct pacman pacman = {0}; + + map_init(&demo); + + struct map map = {0}; + load_map("assets/Maps/maze.csv", &map); + for(int i = 0; i < 4; i++) init_animation(&pacman.animations[i], &(struct animation_init){ .ren = demo.ren, - .spritesheet = "assets/sprites.png", + .spritesheet = "assets/Sprites/sprites.png", .initial_angle = 90.0 * i, .initial_frame_count = 3, @@ -36,21 +43,21 @@ int main() { .initial_frames = (SDL_Rect[]) { { .x = 0, - .y = 190, - .w = 120, - .h = 130 + .y = 285, + .w = 180, + .h = 195 }, { - .x = 160, - .y = 190, - .w = 120, - .h = 130 + .x = 240, + .y = 285, + .w = 180, + .h = 195 }, { - .x = 310, - .y = 190, - .w = 130, - .h = 130 + .x = 465, + .y = 285, + .w = 195, + .h = 195 } } }); @@ -74,6 +81,7 @@ int main() { SDL_RenderClear(demo.ren); update_pacman(&pacman, dt); update_demo(&demo); + draw_map(&demo, &map); draw_pacman(&demo, &pacman); SDL_RenderPresent(demo.ren); } diff --git a/Week1-Pacman/src/map.c b/Week1-Pacman/src/map.c new file mode 100644 index 0000000..0610fd4 --- /dev/null +++ b/Week1-Pacman/src/map.c @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include "map.h" + +#define TILE_SIDE 8 + +SDL_Texture* map_texture = NULL; + +void add_map_row(const char* string, int* row, int width); + +void load_map(const char* filename, struct map* map) { + if(map->contents != NULL) { + printf("Reallocating non empty map, exitting!\n"); + exit(1); + } + + FILE* file = fopen(filename, "r"); + + if(file == NULL) { + const char* error; + + switch(errno) { + default: + error = "Unknown Error"; + } + + printf("Failed to load map %s, error: %s, exitting!\n",filename, error); + exit(1); + } + + map->height = 0; + char buffer[1024]; + + fgets(buffer, 1024, file); + buffer[1023] = '\0'; + + map->width = 1; + for (unsigned long i = 0; i < strlen(buffer); i++) { + if (buffer[i] == ',') + map->width++; + } + fseek(file, 0, SEEK_SET); + + while(fgets(buffer, 1024, file)) { + //Add another row to the map + map->height++; + map->contents = + realloc(map->contents, map->width * map->height * sizeof(int)); + + add_map_row(buffer, + &map->contents[map->width * (map->height - 1)], + map->width); + } + + fclose(file); +} + +void add_map_row(const char* line, int* row, int width) { + for(int i = 0; i < width; i++) { + sscanf(line, "%d", &row[i]); + + int length = 1; + int j = row[i]; + + if(j < 0) { + length++; + j = -j; + } + for(; j > 0; j /= 10, length++); + + line += length; + } +} + +void draw_map(struct demo* demo, struct map* map) { + + for(int i = 0; i < map->height; i++) + for(int j = 0; j < map->width; j++) { + int tile = + map->contents[i * map->width + j]; + + if(tile == -1) { + continue; + } + + SDL_Rect s = { + .x = (tile % 36) * TILE_SIDE, + .y = (tile / 36) * TILE_SIDE, + .w = TILE_SIDE, + .h = TILE_SIDE + }; + + SDL_Rect d = { + .x = j * 26, + .y = i * 20, + .w = 26, + .h = 20 + }; + + demo_rendercopy(demo, map_texture, &s, &d); + } +} + +void map_init(struct demo* demo) { + map_texture = + IMG_LoadTexture(demo->ren, "assets/Sprites/Tileset.png"); + + if(map_texture == NULL) { + printf("Failed to load map tileset, error: %s, exitting!\n", + SDL_GetError()); + exit(1); + } +} diff --git a/Week1-Pacman/src/map.h b/Week1-Pacman/src/map.h new file mode 100644 index 0000000..2161806 --- /dev/null +++ b/Week1-Pacman/src/map.h @@ -0,0 +1,20 @@ +#ifndef MAP_H_ +#define MAP_H_ + +#include "demo.h" + +struct map { + int* contents; + + int width; + int height; +}; + +/* + * Load map exported as CSV file from tiled. +*/ +void load_map(const char* filename, struct map* map); +void draw_map(struct demo* demo, struct map* map); +void map_init(struct demo* demo); + +#endif // MAP_H_ -- cgit v1.2.3