Implement drawing tiles
This commit is contained in:
parent
f735117edd
commit
2fe29c1c0c
1
Makefile
1
Makefile
@ -1,5 +1,6 @@
|
|||||||
OBJS= \
|
OBJS= \
|
||||||
build/src/main.o \
|
build/src/main.o \
|
||||||
|
build/src/Map.o \
|
||||||
build/src/Game.o \
|
build/src/Game.o \
|
||||||
build/src/Player.o \
|
build/src/Player.o \
|
||||||
build/src/GameRenderer.o
|
build/src/GameRenderer.o
|
||||||
|
|||||||
BIN
assets/grass_tile.png
Normal file
BIN
assets/grass_tile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 489 B |
BIN
assets/path_tile.png
Normal file
BIN
assets/path_tile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 451 B |
19
src/Game.cpp
19
src/Game.cpp
@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
Game::Game() : renderer("Zombo Shooter", 800, 450), player(&renderer) {}
|
Game::Game() : renderer("Zombo Shooter", 800, 450), player(&renderer), map(&renderer, 40) {}
|
||||||
|
|
||||||
Game::~Game() = default;
|
Game::~Game() = default;
|
||||||
|
|
||||||
void Game::run() const
|
void Game::run()
|
||||||
{
|
{
|
||||||
while (true) {
|
while (true) {
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
@ -18,8 +18,23 @@ void Game::run() const
|
|||||||
break;
|
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);
|
renderer.clear_screen(0x80, 0x40, 0xFF, 0xFF);
|
||||||
|
|
||||||
|
map.draw(player.x, player.y);
|
||||||
|
|
||||||
player.draw();
|
player.draw();
|
||||||
|
|
||||||
renderer.flush();
|
renderer.flush();
|
||||||
|
|||||||
@ -3,19 +3,21 @@
|
|||||||
|
|
||||||
#include "GameRenderer.hpp"
|
#include "GameRenderer.hpp"
|
||||||
#include "Player.hpp"
|
#include "Player.hpp"
|
||||||
|
#include "Map.hpp"
|
||||||
|
|
||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
GameRenderer renderer;
|
GameRenderer renderer;
|
||||||
Player player;
|
Player player;
|
||||||
|
Map map;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Game();
|
Game();
|
||||||
|
|
||||||
~Game();
|
~Game();
|
||||||
|
|
||||||
void run() const;
|
void run();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
46
src/Map.cpp
Normal file
46
src/Map.cpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
31
src/Map.hpp
Normal file
31
src/Map.hpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#ifndef MAP_HPP
|
||||||
|
#define MAP_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "Tile.hpp"
|
||||||
|
#include "Sprite.hpp"
|
||||||
|
#include "GameRenderer.hpp"
|
||||||
|
|
||||||
|
class Map
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
GameRenderer *renderer;
|
||||||
|
std::vector<std::vector<Tile>> 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
|
||||||
@ -14,3 +14,9 @@ void Player::draw() const
|
|||||||
renderer->screen_height / 2 - hero_sprite.height / 2
|
renderer->screen_height / 2 - hero_sprite.height / 2
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Player::update()
|
||||||
|
{
|
||||||
|
x += x_vel;
|
||||||
|
y += y_vel;
|
||||||
|
}
|
||||||
|
|||||||
@ -8,13 +8,19 @@ class Player
|
|||||||
private:
|
private:
|
||||||
GameRenderer *renderer;
|
GameRenderer *renderer;
|
||||||
Sprite hero_sprite;
|
Sprite hero_sprite;
|
||||||
|
|
||||||
|
public:
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int y = 0;
|
int y = 0;
|
||||||
|
|
||||||
public:
|
int x_vel = 0;
|
||||||
|
int y_vel = 0;
|
||||||
|
|
||||||
Player(GameRenderer *renderer);
|
Player(GameRenderer *renderer);
|
||||||
|
|
||||||
void draw() const;
|
void draw() const;
|
||||||
|
|
||||||
|
void update();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
10
src/Tile.hpp
Normal file
10
src/Tile.hpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef TILE_HPP
|
||||||
|
#define TILE_HPP
|
||||||
|
|
||||||
|
enum Tile
|
||||||
|
{
|
||||||
|
grass,
|
||||||
|
path,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
const Game game = Game();
|
Game game = Game();
|
||||||
|
|
||||||
game.run();
|
game.run();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user