#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "Player.hpp"
#include "Maze.hpp"
class Game {
private:
sf::RenderWindow* window;
Player player;
Maze* maze;
int width, height;
public:
Game(int width, int height);
~Game();
void start();
void eventHandler();
bool gameOver();
sf::Text createText(const std::string &txt, const sf::Font &font, int size, sf::Color color, int posX = 0, int posY = 0);
};
onst int FPS = 60;
const float CELL_SIZE = 50;
const float TEXT_SIZE = 40;
const float PLAYER_SPEED = 6;
const std::string WELCOME = "Welcome to the Hacker's Maze";
const std::string WELCOME_FONT_PATH = "../res/fonts/retro-pixel.ttf";
const std::string PLAYER_TEXTURE_PATH = "../res/textures/anonymous.png";
Game::Game(int width, int height) : player(sf::Color::Green, PLAYER_TEXTURE_PATH, PLAYER_SPEED, CELL_SIZE / 670) {
this->width = width;
this->height = height;
this->window = new sf::RenderWindow(sf::VideoMode(width, height), "Hacker's Maze",
sf::Style::Titlebar | sf::Style::Close);
this->window->setPosition(sf::Vector2i(sf::VideoMode::getDesktopMode().width * 0.5 - window->getSize().x * 0.5, sf::VideoMode::getDesktopMode().height * 0.5 - window->getSize().y * 0.5));
this->window->setKeyRepeatEnabled(true);
this->window->setFramerateLimit(FPS);
int windowWidth = window->getSize().x;
int windowHeight = window->getSize().y;
const int mazeWidth = window->getSize().x - 100;
const int mazeHeight = window->getSize().y - 150;
this->player.setPosition(sf::Vector2f((5 + windowWidth - mazeWidth) / 2, (5 + windowHeight - mazeHeight + TEXT_SIZE) / 2));
this->maze = new Maze(sf::Vector2f((windowWidth - mazeWidth) / 2, (windowHeight - mazeHeight + TEXT_SIZE) / 2),
sf::Vector2f(mazeWidth, mazeHeight), 4,
sf::Vector2f(mazeWidth / CELL_SIZE, mazeHeight / CELL_SIZE), sf::Color(0,0,0,0), sf::Color::Green);
}
Game::~Game() {
delete maze;
delete window;
}
void Game:: start() {
while (window->isOpen() && !gameOver()) {
eventHandler();
}
}
bool Game::gameOver() {
//TODO
}
void Game::eventHandler() {
sf::Event event;
while (window->pollEvent(event)) {
if (event.type == sf::Event::Closed || (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape))
window->close();
}
sf::Font welcomeFont;
welcomeFont.loadFromFile(WELCOME_FONT_PATH);
sf::Text welcome = createText(WELCOME, welcomeFont, TEXT_SIZE, sf::Color::Green, 100, 20);
window->clear(sf::Color::Black);
maze->update();
player.move(maze);
window->draw(welcome);
player.draw(window);
maze->draw(window);
window->display();
}
sf::Text Game::createText(const std::string &txt, const sf::Font &font, int size, sf::Color color, int posX, int posY) {
sf::Text text;
text.setString(txt);
text.setCharacterSize(size);
text.setFont(font);
text.setFillColor(color);
text.setPosition(posX, posY);
return text;
}