Följande två filer är de intressanta:
game.h
Kod: Markera allt
#ifndef GAME_H
#define GAME_H
#include <QList>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimer>
#include <QKeyEvent>
#include "physicalobject.h"
#include "player.h"
class Game : public QWidget
{
Q_OBJECT
public:
Game(QWidget *parent = 0);
void startGame();
protected:
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
private:
Player * currentPlayer;
QList<PhysicalObject *> * physicalObjects;
QList<Player *> * players;
QGraphicsScene scene;
QGraphicsView view;
QTimer timer;
private slots:
void advanceGame();
};
#endif
Kod: Markera allt
#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QTimer>
#include <QObject>
#include <QKeyEvent>
#include <iostream>
#include "game.h"
#include "physicalobject.h"
Game::Game(QWidget *parent) : QWidget(parent)
{
scene.setSceneRect(0, 0, 600, 400);
scene.setItemIndexMethod(QGraphicsScene::NoIndex);
physicalObjects = new QList<PhysicalObject *>;
//Testobjekt
physicalObjects->append(new PhysicalObject(600, 10, 0, 0, true, 0, 0)); //Övre kant
physicalObjects->append(new PhysicalObject(600, 10, 0, 0, true, 0, 390)); //Undre kant
physicalObjects->append(new PhysicalObject(10, 380, 0, 0, true, 0, 10)); //Vänster kant
physicalObjects->append(new PhysicalObject(10, 380, 0, 0, true, 590, 10)); //Höger kant
physicalObjects->append(new PhysicalObject(20, 20, 1, 1, true, 300, 200)); //Boll
physicalObjects->append(new PhysicalObject(20, 50, 0, 0, true, 400, 200)); //Paddle
currentPlayer = new Player(physicalObjects->at(4), physicalObjects->at(5), physicalObjects->at(0));
foreach (PhysicalObject *current, *physicalObjects)
{
scene.addItem(current);
}
view.setScene(&scene);
view.setRenderHint(QPainter::Antialiasing);
view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
view.setDragMode(QGraphicsView::ScrollHandDrag);
view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Pong"));
view.resize(620, 420);
view.show();
QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(advanceGame()));
}
void Game::advanceGame()
{
scene.advance();
}
void Game::startGame()
{
timer.start(10);
}
void Game::keyPressEvent(QKeyEvent *event)
{
std::cout << "Tryck\n";
switch (event->key())
{
case Qt::Key_Up:
currentPlayer->paddle->setSpeedY(-1);
break;
case Qt::Key_Down:
currentPlayer->paddle->setSpeedY(1);
break;
default:
QWidget::keyPressEvent(event);
}
}
void Game::keyReleaseEvent (QKeyEvent *event)
{
std::cout << "Släpp\n";
switch (event->key())
{
case Qt::Key_Up:
case Qt::Key_Down:
currentPlayer->paddle->setSpeedY(0);
break;
default:
QWidget::keyReleaseEvent(event);
}
}
