Add logic for moving the platform
This commit is contained in:
parent
252f467332
commit
9b458a1eec
4 changed files with 43 additions and 4 deletions
|
@ -2,8 +2,9 @@
|
||||||
#include "./ui_mainwindow.h"
|
#include "./ui_mainwindow.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
|
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow), leftArrowPressed{false}, rightArrowPressed{false} {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
platform = std::make_shared<Platform>(this);
|
platform = std::make_shared<Platform>(this);
|
||||||
|
@ -43,3 +44,17 @@ void MainWindow::onDeleteBall(Ball* ball) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::keyPressEvent(QKeyEvent* event) {
|
||||||
|
switch (event->key()) {
|
||||||
|
case Qt::Key_Left: leftArrowPressed = true; break;
|
||||||
|
case Qt::Key_Right: rightArrowPressed = true; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::keyReleaseEvent(QKeyEvent* event) {
|
||||||
|
switch (event->key()) {
|
||||||
|
case Qt::Key_Left: leftArrowPressed = false; break;
|
||||||
|
case Qt::Key_Right: rightArrowPressed = false; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,10 @@
|
||||||
|
|
||||||
#include "ball.h"
|
#include "ball.h"
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
|
#include <QKeyEvent>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <qevent.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -18,12 +21,18 @@ class MainWindow : public QMainWindow {
|
||||||
MainWindow(QWidget* parent = nullptr);
|
MainWindow(QWidget* parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
|
bool leftArrowPressed;
|
||||||
|
bool rightArrowPressed;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onDeleteBall(Ball* ball); // Slot to handle the ball deletion
|
void onDeleteBall(Ball* ball); // Slot to handle the ball deletion
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void paintEvent(QPaintEvent*) override;
|
virtual void paintEvent(QPaintEvent*) override;
|
||||||
|
|
||||||
|
void keyPressEvent(QKeyEvent* event) override;
|
||||||
|
void keyReleaseEvent(QKeyEvent* event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow* ui;
|
Ui::MainWindow* ui;
|
||||||
QList<std::shared_ptr<Ball>> balls;
|
QList<std::shared_ptr<Ball>> balls;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <qapplication.h>
|
||||||
|
|
||||||
#define TICK_SPEED 15
|
#define TICK_SPEED 15
|
||||||
#define PLATFORM_WIDTH 100
|
#define PLATFORM_WIDTH 100
|
||||||
|
@ -7,7 +9,7 @@
|
||||||
#define PLATFORM_MARGIN_BOTTOM 80
|
#define PLATFORM_MARGIN_BOTTOM 80
|
||||||
#define SPEED 5.0
|
#define SPEED 5.0
|
||||||
|
|
||||||
Platform::Platform(QWidget* parent) : m_parent{parent} {
|
Platform::Platform(MainWindow* parent) : m_parent{parent} {
|
||||||
QRect rct = parent->rect();
|
QRect rct = parent->rect();
|
||||||
|
|
||||||
m_x = rand() % (rct.width() - PLATFORM_WIDTH);
|
m_x = rand() % (rct.width() - PLATFORM_WIDTH);
|
||||||
|
@ -23,4 +25,12 @@ void Platform::draw(QPainter& painter) {
|
||||||
|
|
||||||
void Platform::timerEvent(QTimerEvent*) {
|
void Platform::timerEvent(QTimerEvent*) {
|
||||||
m_parent->update();
|
m_parent->update();
|
||||||
|
|
||||||
|
int direction = 0;
|
||||||
|
if (m_parent->leftArrowPressed && !m_parent->rightArrowPressed)
|
||||||
|
direction = -1;
|
||||||
|
else if (m_parent->rightArrowPressed && !m_parent->leftArrowPressed)
|
||||||
|
direction = 1;
|
||||||
|
|
||||||
|
m_x += direction * SPEED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,16 @@
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
// Forward declaration, avoiding circular import of mainwindow.h
|
||||||
|
// (this probably isn't the best way to handle this, but I wasn't
|
||||||
|
// sure how else to do it.)
|
||||||
|
class MainWindow;
|
||||||
|
|
||||||
class Platform : public QTimer {
|
class Platform : public QTimer {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Platform(QWidget* parent);
|
Platform(MainWindow* parent);
|
||||||
|
|
||||||
void draw(QPainter& painter);
|
void draw(QPainter& painter);
|
||||||
|
|
||||||
|
@ -17,7 +22,7 @@ class Platform : public QTimer {
|
||||||
virtual void timerEvent(QTimerEvent*) override;
|
virtual void timerEvent(QTimerEvent*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWidget* m_parent;
|
MainWindow* m_parent;
|
||||||
double m_x;
|
double m_x;
|
||||||
double m_y;
|
double m_y;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue