From 2fe29c1c0c3b546b1e547b3312e72511aaaf6613 Mon Sep 17 00:00:00 2001 From: Reimar Date: Thu, 23 Oct 2025 12:20:46 +0200 Subject: [PATCH] Implement drawing tiles --- Makefile | 1 + assets/grass_tile.png | Bin 0 -> 489 bytes assets/path_tile.png | Bin 0 -> 451 bytes src/Game.cpp | 19 +++++++++++++++-- src/Game.hpp | 4 +++- src/Map.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++ src/Map.hpp | 31 ++++++++++++++++++++++++++++ src/Player.cpp | 6 ++++++ src/Player.hpp | 8 +++++++- src/Tile.hpp | 10 +++++++++ src/main.cpp | 2 +- 11 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 assets/grass_tile.png create mode 100644 assets/path_tile.png create mode 100644 src/Map.cpp create mode 100644 src/Map.hpp create mode 100644 src/Tile.hpp diff --git a/Makefile b/Makefile index 70d6b59..ca48f21 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ OBJS= \ build/src/main.o \ + build/src/Map.o \ build/src/Game.o \ build/src/Player.o \ build/src/GameRenderer.o diff --git a/assets/grass_tile.png b/assets/grass_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..44e933811f35e8d5c6c43f3c017386190b807f0d GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEjKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?d}4kf#9d}Zjfo51s;*b3=De8Ak0{?)V>TT$X?><>&pI;OPrHU?q;ePJJ1EXo-U3d z5r>~fY!p1Kz$0Q8_TWYA5}%2uyi>Y#ChpzTlI}6l?zw19p;k;su!>+&dxw{Rk%DE$v`&m&Sn6R7(8bUH{CM%5Yac&f zl_t}jlb0=8V;+f{`qwU(=L_O^P^f#{BIT{(3Rj0!?=Dr8h4frKQP|?d_S^gMOxJ?v z3AyjCu5u}}=qNu|sCrg^`)-cP8fTGk<8`x7H%DEa7S@sXX+ih&$6?NUU)lA4Fu#7b z;vGwn>GW^?cXr5%PA}UNWg2Wgjl++72H^qn=KcuJ@{(R4VxyJq)WHF z&U!x%oLg>x*JowseK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?d}4kf#9d}Zjfo51s;*b3=De8Ak0{?)V>TT$X?><>&pI;OPrHatKRcoEzkw*o-U3d z5r>m&N~$i^v*|pzKKn5b2;?YD9 zp7P8u$+_mowB{X`#PkY_oNKnIDVnhrw0^k2=@@ibWbc6snf#Bq6tk|%JUMpcLT=z> zX{95_ST;W6`ztVKTeMJ=o#1pc&Z`m}m5-dNo?KDcqUFwBFSR6WcVC$4g$wJu3zwP} zWlJSFOQ_j@y4Cz5v+Bq9S022MQCs=j>$;`FJrrLhwK8%(d}zPRHSd{z8pc?=H literal 0 HcmV?d00001 diff --git a/src/Game.cpp b/src/Game.cpp index 07c72bd..40dce87 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -4,11 +4,11 @@ #include -Game::Game() : renderer("Zombo Shooter", 800, 450), player(&renderer) {} +Game::Game() : renderer("Zombo Shooter", 800, 450), player(&renderer), map(&renderer, 40) {} Game::~Game() = default; -void Game::run() const +void Game::run() { while (true) { SDL_Event e; @@ -18,8 +18,23 @@ void Game::run() const break; } + if (e.type == SDL_KEYDOWN) { + switch (e.key.keysym.sym) { + case SDLK_RIGHT: + case SDLK_d: + player.x_vel = 5; + case SDLK_LEFT: + case SDLK_a: + player.x_vel = -5; + } + } + + player.update(); + renderer.clear_screen(0x80, 0x40, 0xFF, 0xFF); + map.draw(player.x, player.y); + player.draw(); renderer.flush(); diff --git a/src/Game.hpp b/src/Game.hpp index bbfc822..1c25113 100644 --- a/src/Game.hpp +++ b/src/Game.hpp @@ -3,19 +3,21 @@ #include "GameRenderer.hpp" #include "Player.hpp" +#include "Map.hpp" class Game { private: GameRenderer renderer; Player player; + Map map; public: Game(); ~Game(); - void run() const; + void run(); }; #endif diff --git a/src/Map.cpp b/src/Map.cpp new file mode 100644 index 0000000..0ea33db --- /dev/null +++ b/src/Map.cpp @@ -0,0 +1,46 @@ +#include +#include +#include "Map.hpp" + +Map::Map(GameRenderer *renderer, int tile_size) : + renderer(renderer), + tile_size(tile_size), + tiles(renderer->screen_width / tile_size, std::vector(renderer->screen_height / tile_size, grass)), + tile_offset_x(-renderer->screen_width / tile_size / 2), + tile_offset_y(-renderer->screen_height / tile_size / 2) +{ + grass_sprite = renderer->load_sprite("./assets/grass_tile.png", tile_size, tile_size); + path_sprite = renderer->load_sprite("./assets/path_tile.png", tile_size, tile_size); +} + +void Map::generate_row() const +{ + +} + +void Map::generate_col() const +{ + +} + +void Map::draw(int player_x, int player_y) const +{ + for (int tile_x = 0; tile_x < tiles.size(); tile_x++) { + for (int tile_y = 0; tile_y < tiles[tile_x].size(); tile_y++) { + int screen_x = player_x + tile_x * tile_size + tile_offset_x * tile_size + renderer->screen_width / 2; + int screen_y = player_y + tile_y * tile_size + tile_offset_y * tile_size + renderer->screen_height / 2; + + if ( + screen_x < -tile_size || screen_y < -tile_size || + screen_x > renderer->screen_width || screen_y > renderer->screen_height + ) { + continue; + } + + switch (tiles[tile_x][tile_y]) { + case grass: renderer->draw_sprite(grass_sprite, screen_x, screen_y); break; + case path: renderer->draw_sprite(path_sprite, screen_x, screen_y); break; + } + } + } +} diff --git a/src/Map.hpp b/src/Map.hpp new file mode 100644 index 0000000..e0cd894 --- /dev/null +++ b/src/Map.hpp @@ -0,0 +1,31 @@ +#ifndef MAP_HPP +#define MAP_HPP + +#include +#include "Tile.hpp" +#include "Sprite.hpp" +#include "GameRenderer.hpp" + +class Map +{ +private: + GameRenderer *renderer; + std::vector> tiles; + int tile_size; + int tile_offset_x; + int tile_offset_y; + + Sprite grass_sprite; + Sprite path_sprite; + + void generate_row() const; + + void generate_col() const; + +public: + Map(GameRenderer *renderer, int tile_size); + + void draw(int player_x, int player_y) const; +}; + +#endif diff --git a/src/Player.cpp b/src/Player.cpp index 0fd03ed..57bc8f0 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -14,3 +14,9 @@ void Player::draw() const renderer->screen_height / 2 - hero_sprite.height / 2 ); } + +void Player::update() +{ + x += x_vel; + y += y_vel; +} diff --git a/src/Player.hpp b/src/Player.hpp index f17057c..3954b62 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -8,13 +8,19 @@ class Player private: GameRenderer *renderer; Sprite hero_sprite; + +public: int x = 0; int y = 0; -public: + int x_vel = 0; + int y_vel = 0; + Player(GameRenderer *renderer); void draw() const; + + void update(); }; #endif \ No newline at end of file diff --git a/src/Tile.hpp b/src/Tile.hpp new file mode 100644 index 0000000..cef7809 --- /dev/null +++ b/src/Tile.hpp @@ -0,0 +1,10 @@ +#ifndef TILE_HPP +#define TILE_HPP + +enum Tile +{ + grass, + path, +}; + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 2b1eae8..f065269 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,7 +2,7 @@ int main() { - const Game game = Game(); + Game game = Game(); game.run();