[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdegames/bomber/src
From: Stefan Majewsky <majewsky () gmx ! net>
Date: 2012-04-14 23:58:38
Message-ID: 20120414235838.1584FAC89B () svn ! kde ! org
[Download RAW message or body]
SVN commit 1289573 by majewsky:
Port Bomber from KGameCanvas to QGraphicsView.
Patch by Mehmet Emre. Thanks very much!
CCMAIL: maemre2@gmail.com
(Please remember to close the review request.)
M +18 -10 board.cpp
M +18 -6 board.h
M +1 -1 bomber.cpp
M +30 -27 bomberwidget.cpp
M +4 -4 bomberwidget.h
M +13 -15 building.cpp
M +4 -7 building.h
M +4 -4 explodable.cpp
M +2 -2 explodable.h
M +2 -1 main.cpp
--- trunk/KDE/kdegames/bomber/src/board.cpp #1289572:1289573
@@ -21,14 +21,15 @@
#include "building.h"
#include "bomb.h"
-#include "kgamecanvas.h"
+#include "settings.h"
-#include <kdebug.h>
#include <KRandom>
#include <Phonon/MediaObject>
#include <KStandardDirs>
#include <QTimer>
+#include <QGraphicsScene>
+#include <QGraphicsView>
/** The value that the plane velocity increases by */
const qreal PLANE_INC_VELOCITY = 0.0005;
@@ -49,16 +50,16 @@
/** This time in milliseconds that the bomb exploding animation is played for */
const unsigned int BOMB_EXPLODE_TIME = 1000;
-BomberBoard::BomberBoard(KGameRenderer *renderer, KGameCanvasAbstract *canvas,
- QWidget *parent) :
- QObject(parent), KGameCanvasGroup(canvas), m_renderer(renderer), m_bomb(NULL)
+BomberBoard::BomberBoard(KGameRenderer *renderer, QGraphicsView* view, QObject *parent) :
+ QGraphicsScene(parent), m_renderer(renderer), m_view(view)
{
+ m_bomb = NULL;
m_clock = new QTimer(this);
m_clock->setInterval(GAME_DELAY);
connect(m_clock, SIGNAL(timeout()), this, SLOT(tick()));
m_plane = new Plane(m_renderer, this);
m_plane->resize(m_tileSize);
- m_plane->raise();
+ this->addItem(m_plane);
m_plane->show();
resetPlane();
clear();
@@ -85,6 +86,8 @@
void BomberBoard::resize(QSize& size)
{
+ setBackgroundBrush(m_renderer->spritePixmap("background", size));
+
unsigned int minTileSizeWidth = size.width() / TILE_NUM_W;
unsigned int minTileSizeHeight = size.height() / TILE_NUM_H;
@@ -155,7 +158,6 @@
Building *building = new Building(m_renderer, this, i + 1, height);
building->resize(m_tileSize);
- building->raise();
building->show();
m_buildings.append(building);
@@ -224,9 +226,8 @@
if (m_bomb == NULL && m_plane->state() == Explodable::Moving)
{
QPointF planePos = m_plane->position();
- m_bomb
- = new Bomb(m_renderer, this, planePos.x(), planePos.y() + 1, m_tileSize);
- m_bomb->raise();
+ m_bomb = new Bomb(m_renderer, this, planePos.x(), planePos.y() + 1, m_tileSize);
+ this->addItem(m_bomb);
m_bomb->show();
}
}
@@ -287,6 +288,13 @@
delete bomb;
}
+void BomberBoard::settingsChanged()
+{
+ setSounds(BomberSettings::playSounds());
+ setBackgroundBrush(m_renderer->spritePixmap("background", m_view->size()));
+ redraw();
+}
+
void BomberBoard::planeExploded()
{
m_plane->setState(Plane::Exploded);
--- trunk/KDE/kdegames/bomber/src/board.h #1289572:1289573
@@ -18,7 +18,7 @@
#ifndef BOARD_H
#define BOARD_H
-#include <KGameCanvas>
+#include <QGraphicsScene>
#include <KGameRenderer>
#include <QSize>
@@ -39,7 +39,7 @@
* This class used to represent the game board. This makes sure all the game objects
* get moved and redrawn every second. It also checks for any collisions
*/
-class BomberBoard: public QObject, public KGameCanvasGroup
+class BomberBoard: public QGraphicsScene
{
Q_OBJECT
@@ -47,11 +47,11 @@
/**
* The constructor used to create the board.
- * \param renderer The Render used to renderer game objects
- * \param canvas The object were the games objects are drawn onto
+ * \param renderer The renderer used to render game objects
+ * \param view The graphics view object which this board is bound to
* \param parent The widget which the board is inserted into
*/
- explicit BomberBoard(KGameRenderer *renderer, KGameCanvasAbstract *canvas = NULL, QWidget *parent = 0);
+ explicit BomberBoard(KGameRenderer *renderer, QGraphicsView* view, QObject *parent = 0);
~BomberBoard();
@@ -131,9 +131,16 @@
*/
void levelCleared();
+public slots:
+ /**
+ * This is called when the settings change to save the settings
+ */
+ void settingsChanged();
+
private slots:
/** This is called once a second to update and draw all the game objects */
void tick();
+
/**
* This is called when a plane has finished exploding
*/
@@ -169,9 +176,11 @@
*/
void crashed();
+ /** This is the renderer used to render game objects */
KGameRenderer *m_renderer;
+
+ /** This is the size of a tiling block */
QSize m_tileSize;
-
QTimer *m_clock;
Phonon::MediaObject *m_audioPlayer;
@@ -192,6 +201,9 @@
/** This is the number of blocks that make up the buildings */
unsigned int m_buildingBlocks;
+
+ /** This is the graphics view object which this board is bound. */
+ QGraphicsView *m_view;
};
#endif
--- trunk/KDE/kdegames/bomber/src/bomber.cpp #1289572:1289573
@@ -22,7 +22,7 @@
#include <KAction>
#include <KActionCollection>
-#include <kdebug.h>
+#include <KConfigDialog>
#include <KLocale>
#include <KMessageBox>
#include <krandom.h>
--- trunk/KDE/kdegames/bomber/src/bomberwidget.cpp #1289572:1289573
@@ -19,10 +19,12 @@
#include "bomberwidget.h"
#include "settings.h"
-#include <QPalette>
#include <QTimer>
+#include <QGraphicsView>
+#include <QGraphicsItem>
#include <KLocale>
+#include <sys/stat.h>
#define NEW_LIVE_AT_SCORE 10000;
@@ -31,33 +33,43 @@
static const unsigned int GAME_TIME_DELAY = 1000;
static const unsigned int TICKS_PER_SECOND = 1000 / GAME_TIME_DELAY;
+/** The z-value for overlays */
+static const unsigned int OVERLAY_Z_VALUE = 1000;
BomberGameWidget::BomberGameWidget(KgThemeProvider *provider, QWidget *parent) :
- KGameCanvasWidget(parent), m_state(BeforeFirstGame), m_level(0),m_lives(0), m_time(0)
- , m_renderer(provider)
+ QGraphicsView(parent), m_state(BeforeFirstGame), m_level(0),m_lives(0), m_time(0),
+ m_renderer(provider)
{
+ // Gameboard
m_board = new BomberBoard(&m_renderer, this, this);
connect(m_board, SIGNAL(onPlaneCrash()), this, SLOT(onPlaneCrashed()));
connect(m_board, SIGNAL(onBombHit()), this, SLOT(onBombHit()));
connect(m_board, SIGNAL(levelCleared()), this, SLOT(onLevelCleared()));
+ setScene(m_board);
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setFrameStyle(QFrame::NoFrame);
+ setCacheMode(QGraphicsView::CacheBackground); // Optimize caching
+ setFocusPolicy(Qt::StrongFocus);
+ setAlignment(Qt::AlignLeft | Qt::AlignTop);
+ // Overlay
+ m_overlay = new QGraphicsPixmapItem();
- m_overlay = new KGameCanvasPixmap(this);
+ m_board->addItem(m_overlay);
- m_overlay->raise();
- m_overlay->hide();
-
m_clock = new QTimer(this);
m_clock->setInterval(GAME_TIME_DELAY);
connect(m_clock, SIGNAL(timeout()), this, SLOT(tick()));
setMouseTracking(true);
+ generateOverlay();
}
BomberGameWidget::~BomberGameWidget()
{
delete m_board;
- delete m_overlay;
+ //delete m_overlay; // m_overlay is implicitly deleted by m_board
}
unsigned int BomberGameWidget::level() const
@@ -141,12 +153,7 @@
void BomberGameWidget::settingsChanged()
{
- m_board->setSounds(BomberSettings::playSounds());
-
- QPalette palette;
- palette.setBrush(backgroundRole(), m_renderer.spritePixmap("background", size()));
- setPalette(palette);
- redraw();
+ m_board->settingsChanged();
}
void BomberGameWidget::setSounds(bool val)
@@ -197,16 +204,8 @@
void BomberGameWidget::resizeEvent(QResizeEvent *ev)
{
- QPalette palette;
- palette.setBrush(backgroundRole(), m_renderer.spritePixmap("background", ev->size()));
- setPalette(palette);
- setAutoFillBackground(true);
-
QSize boardSize = ev->size();
m_board->resize(boardSize);
- m_board->moveTo((ev->size().width() - boardSize.width()) / 2,
- (ev->size().height() - boardSize.height()) / 2);
-
redraw();
}
@@ -260,20 +259,23 @@
{
if (size().isEmpty())
return;
-
+ QGraphicsItem* item;
switch (m_state)
{
case BeforeFirstGame:
- m_board->hide();
+ foreach (item, m_board->items())
+ item->hide();
generateOverlay();
m_overlay->show();
break;
case Running:
- m_board->show();
+ foreach (item, m_board->items())
+ item->show();
m_overlay->hide();
break;
default:
- m_board->show();
+ foreach (item, m_board->items())
+ item->show();
generateOverlay();
m_overlay->show();
break;
@@ -334,7 +336,8 @@
p.end();
m_overlay->setPixmap(px);
- m_overlay->moveTo((size().width() - itemWidth) / 2, (size().height() - itemHeight) / 2);
+ m_overlay->setPos((size().width() - itemWidth) / 2, (size().height() - itemHeight) / 2);
+ m_overlay->setZValue(OVERLAY_Z_VALUE);
}
void BomberGameWidget::onLevelCleared()
--- trunk/KDE/kdegames/bomber/src/bomberwidget.h #1289572:1289573
@@ -22,8 +22,7 @@
#include "board.h"
-#include <KGameCanvas>
-#include <KGameRenderer>
+#include <QGraphicsView>
#include <QMouseEvent>
class KgThemeProvider;
@@ -31,7 +30,7 @@
/**
* This is the main game widget class. It manages things like the lives, source coutns and game states.
*/
-class BomberGameWidget: public KGameCanvasWidget
+class BomberGameWidget: public QGraphicsView
{
Q_OBJECT
@@ -184,7 +183,8 @@
QTimer *m_clock;
BomberBoard *m_board;
- KGameCanvasPixmap *m_overlay;
+ QGraphicsPixmapItem *m_overlay;
+
};
#endif
--- trunk/KDE/kdegames/bomber/src/building.cpp #1289572:1289573
@@ -19,7 +19,7 @@
#include "building.h"
#include "board.h"
-
+#include <KGameRenderedItem>
#include <KRandom>
/**
@@ -49,6 +49,8 @@
Building::~Building()
{
+ foreach (KGameRenderedItem *tile, m_buildingTiles)
+ m_board->removeItem(tile);
qDeleteAll(m_buildingTiles);
}
@@ -60,6 +62,8 @@
for (unsigned int i = 1; i <= m_height - height; i++)
{
m_buildingTiles.at(m_height - i)->hide();
+ m_board->removeItem(m_buildingTiles.at(m_height - i));
+ delete m_buildingTiles.at(m_height - i);
m_buildingTiles.removeAt(m_height - i);
}
}
@@ -93,26 +97,20 @@
const QString pixmap = QString::fromLatin1("roof_%1_0").arg(style);
m_buildingTiles.append(createBuildingTile(pixmap));
m_boundingRect.moveTo(m_xPos, BUILD_BASE_LOCATION - m_height + 1);
+ foreach (KGameRenderedItem *tile, m_buildingTiles)
+ m_board->addItem(tile);
}
-KGameCanvasRenderedPixmap *Building::createBuildingTile(const QString& pixmap)
+KGameRenderedItem *Building::createBuildingTile(const QString& pixmap)
{
- KGameCanvasRenderedPixmap* tile = new KGameCanvasRenderedPixmap(m_renderer, pixmap, m_board);
+ KGameRenderedItem* tile = new KGameRenderedItem(m_renderer, pixmap);
tile->setRenderSize(QSize(32, 64));
return tile;
}
-void Building::raise()
-{
- foreach(KGameCanvasRenderedPixmap *tile, m_buildingTiles)
- {
- tile->raise();
- }
-}
-
void Building::show()
{
- foreach(KGameCanvasRenderedPixmap *tile, m_buildingTiles)
+ foreach(KGameRenderedItem *tile, m_buildingTiles)
{
tile->show();
}
@@ -124,9 +122,9 @@
static_cast<unsigned int> (BUILDING_RELATIVE_HEIGHT * size.height()));
for (int i = 0; i < m_buildingTiles.size(); i++)
{
- KGameCanvasRenderedPixmap *tile = m_buildingTiles.at(i);
+ KGameRenderedItem *tile = m_buildingTiles.at(i);
tile->setRenderSize(tileSize);
- tile->moveTo(m_board->mapPosition(QPointF(m_xPos, BUILD_BASE_LOCATION - i)));
+ tile->setPos(m_board->mapPosition(QPointF(m_xPos, BUILD_BASE_LOCATION - i)));
}
}
@@ -148,4 +146,4 @@
unsigned int Building::height() const
{
return m_height;
-}
+}
\ No newline at end of file
--- trunk/KDE/kdegames/bomber/src/building.h #1289572:1289573
@@ -23,7 +23,7 @@
#include <QtCore/QSize>
#include <QtCore/QList>
-class KGameCanvasRenderedPixmap;
+class KGameRenderedItem;
class KGameRenderer;
class BomberBoard;
@@ -61,10 +61,7 @@
*/
void setFrame(unsigned int frame);
- /** Restacks the building item on the top of the canvas. */
- void raise();
-
- /** Show the building item on the game canvas */
+ /** Show the building item on the game scene */
void show();
/**
@@ -95,13 +92,13 @@
* \param pixmap The pixmap the building tile should be created with
* \return The new created building tile
*/
- KGameCanvasRenderedPixmap *createBuildingTile(const QString& pixmap);
+ KGameRenderedItem *createBuildingTile(const QString& pixmap);
unsigned int m_height;
QRectF m_boundingRect;
KGameRenderer *m_renderer;
BomberBoard *m_board;
- QList<KGameCanvasRenderedPixmap*> m_buildingTiles;
+ QList<KGameRenderedItem*> m_buildingTiles;
qreal m_xPos;
};
--- trunk/KDE/kdegames/bomber/src/explodable.cpp #1289572:1289573
@@ -36,7 +36,7 @@
Explodable::Explodable(const QString& mainSvg, const QString& explosionSvg,
qreal relativeWidth, qreal relativeHeight, KGameRenderer *renderer,
BomberBoard *board) :
- KGameCanvasRenderedPixmap(renderer, mainSvg, board), m_board(board), m_mainSvg(
+ KGameRenderedItem(renderer, mainSvg), m_board(board), m_mainSvg(
mainSvg), m_explosionSvg(explosionSvg)
{
setRenderSize(QSize(32, 64));
@@ -45,7 +45,7 @@
resetPixmaps();
m_state = Moving;
m_nextBoundingRect.setSize(QSizeF(m_relativeWidth, m_relativeHeight));
- moveTo(m_board->mapPosition(QPointF(m_xPos, m_yPos)));
+ setPos(m_board->mapPosition(QPointF(m_xPos, m_yPos)));
}
Explodable::~Explodable()
@@ -61,7 +61,7 @@
void Explodable::update()
{
setFrame(frame() + 1);
- moveTo(m_board->mapPosition(QPointF(m_xPos, m_yPos)));
+ setPos(m_board->mapPosition(QPointF(m_xPos, m_yPos)));
}
void Explodable::resize(const QSize& tileSize)
@@ -81,7 +81,7 @@
EXPLOSION_RELATIVE_SIZE_H * tileSize.height()
));
}
- moveTo(m_board->mapPosition(QPointF(m_xPos, m_yPos)));
+ setPos(m_board->mapPosition(QPointF(m_xPos, m_yPos)));
}
void Explodable::setVelocity(qreal vX)
--- trunk/KDE/kdegames/bomber/src/explodable.h #1289572:1289573
@@ -19,14 +19,14 @@
#ifndef EXPLODABLE_H
#define EXPLODABLE_H
-#include "kgamecanvas.h"
+#include <KGameRenderedItem>
class BomberBoard;
/**
* This is a game object that can explode.
*/
-class Explodable: public KGameCanvasRenderedPixmap
+class Explodable: public KGameRenderedItem
{
public:
/** The states that a bomb can be in */
--- trunk/KDE/kdegames/bomber/src/main.cpp #1289572:1289573
@@ -20,7 +20,6 @@
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <KDE/KLocale>
-#include <kdebug.h>
static const char description[] = I18N_NOOP("Arcade bombing game");
@@ -33,6 +32,8 @@
KLocalizedString(), 0, "jp@stanwood.org.uk");
about.addAuthor(ki18n("John-Paul Stanford"), KLocalizedString(),
"jp@stanwood.org.uk");
+ about.addAuthor(ki18n("Mehmet Emre"), ki18n("Porting to QGraphicsView."),
+ "maemre2@gmail.com");
KCmdLineArgs::init(argc, argv, &about);
KApplication app;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic