Debug_demo/GameState.cpp (62 lines of code) (raw):

#include "GameState.h" #include "Collisions.h" GameState::GameState(int fieldWidth, int fieldHeight) : field_(0, 0, fieldWidth, fieldHeight), ball_(QPointF(field_.width() / 2, field_.height() - 30), QPointF(200, -200)), paddle_(QPointF(field_.width() / 2, field_.height() - 10), 60, 20), score_(0) { int ROWS = 4, COLS = 5; int SPACING = 10; int BRICK_WIDTH = (field_.width() - SPACING) / COLS - SPACING, BRICK_HEIGHT = 30; for (int row = 0; row < ROWS; ++row) { for (int col = 0; col < COLS; ++col) { int x = BRICK_WIDTH / 2 + (BRICK_WIDTH + SPACING) * col + SPACING; int y = BRICK_HEIGHT / 2 + (BRICK_HEIGHT + SPACING) * row + SPACING; bricks_.push_back( Brick(QPointF(x, y), BRICK_WIDTH, BRICK_HEIGHT)); } } } void GameState::calc(int ms) { processCollisions(); ball_.calc(ms); for (auto &&brick : bricks_) { brick.calc(ms); } paddle_.calc(ms); } void GameState::movePaddle(int dx) { paddle_.setPos(paddle_.getPos() + QPoint(dx, 0)); } void GameState::processCollisions() { if (applyCollision(ball_, getCollisionWithWalls(ball_, getField()))) return; for (auto iter = bricks_.begin(); iter != bricks_.end(); ++iter) { if (applyCollision(ball_, getCollisionWithBrick(ball_, iter->aabb()))) { bricks_.erase(iter); score_ += 1; return; } } if (applyCollision(ball_, getCollisionWithBrick(ball_, paddle_.aabb()))) return; } QRect GameState::getField() const { return field_; } int GameState::getScore() const { return score_; } void GameState::draw(QPainter &painter) const { ball_.draw(painter); for (auto &&brick : bricks_) { brick.draw(painter); } paddle_.draw(painter); }