|
|
@ -2,28 +2,61 @@ |
|
|
|
#include "Game.h" |
|
|
|
#include "Game.h" |
|
|
|
#include "InputWindow.h" |
|
|
|
#include "InputWindow.h" |
|
|
|
#include "Window.h" |
|
|
|
#include "Window.h" |
|
|
|
|
|
|
|
#include <random> |
|
|
|
|
|
|
|
|
|
|
|
void Game::draw(QPixmap &output) { |
|
|
|
void Game::draw(QPixmap &output) { |
|
|
|
QPainter p(&output); |
|
|
|
QPainter p(&output); |
|
|
|
|
|
|
|
|
|
|
|
p.drawText(50, 50, QString::fromStdString(std::to_string(int(window->currentFPS)))); |
|
|
|
|
|
|
|
for (auto & spectator : spectators) |
|
|
|
for (auto & spectator : spectators) |
|
|
|
spectator.draw(p); |
|
|
|
spectator.draw(p); |
|
|
|
|
|
|
|
for (auto & wall : walls) |
|
|
|
|
|
|
|
wall.draw(p); |
|
|
|
player.draw(p); |
|
|
|
player.draw(p); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Game::update(float dTime) { |
|
|
|
void Game::update(float dTime) { |
|
|
|
eTime += dTime; |
|
|
|
eTime += dTime; |
|
|
|
player.update(dTime); |
|
|
|
player.update(dTime, walls); |
|
|
|
|
|
|
|
for (auto & wall : walls) |
|
|
|
|
|
|
|
wall.update(dTime); |
|
|
|
|
|
|
|
tryCreateWall(); |
|
|
|
|
|
|
|
removeWalls(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Game::tryCreateWall() { |
|
|
|
|
|
|
|
if (Game::Random(0, 1000) > 990){ |
|
|
|
|
|
|
|
walls.emplace_back(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Game::removeWalls() { |
|
|
|
|
|
|
|
erase_if(walls, [](const Wall& wall){ |
|
|
|
|
|
|
|
return wall.isLost(); |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Game::Game() { |
|
|
|
Game::Game() { |
|
|
|
for (auto & spectator : spectators){ |
|
|
|
constexpr size_t sCount = 10; |
|
|
|
Game::eventQueue->registerListener(&spectator); |
|
|
|
const int w = WIDTH / sCount; |
|
|
|
|
|
|
|
for (size_t i = 0; i < sCount; i++){ |
|
|
|
|
|
|
|
Spectator spec; |
|
|
|
|
|
|
|
spec.pos = QPoint(int(i) * w, SPEC_Y / 2); |
|
|
|
|
|
|
|
spectators.push_back(spec); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for (auto & spec : spectators) |
|
|
|
|
|
|
|
Game::eventQueue->registerListener(&spec); |
|
|
|
InputWindow::inputQueue->registerListener(&player); |
|
|
|
InputWindow::inputQueue->registerListener(&player); |
|
|
|
instance = this; |
|
|
|
instance = this; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
GameQueue * Game::eventQueue = new GameQueue; |
|
|
|
GameQueue * Game::eventQueue = new GameQueue; |
|
|
|
Game * Game::instance = nullptr; |
|
|
|
Game * Game::instance = nullptr; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double Game::Random(double low, double high) { |
|
|
|
|
|
|
|
std::random_device device; |
|
|
|
|
|
|
|
std::mt19937 gen(device()); |
|
|
|
|
|
|
|
auto dist = std::uniform_real_distribution<double>(low, high); |
|
|
|
|
|
|
|
return dist(gen); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|