author | zecke <zecke> | 2004-02-06 14:32:10 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-02-06 14:32:10 (UTC) |
commit | b033733924e5d3454bb0a810c6a70d4ff0531d2b (patch) (side-by-side diff) | |
tree | cafe130296468840db062af4a3335572804ee1f3 | |
parent | f60cbb888e72b3eaf49af6f72fa183e6d44ae389 (diff) | |
download | opie-b033733924e5d3454bb0a810c6a70d4ff0531d2b.zip opie-b033733924e5d3454bb0a810c6a70d4ff0531d2b.tar.gz opie-b033733924e5d3454bb0a810c6a70d4ff0531d2b.tar.bz2 |
Funny how much bugs one can introduce when importing Qtopia stuff.
Fixed a couple of possible sigsegv, uninitialized variables
-rw-r--r-- | noncore/games/parashoot/base.cpp | 12 | ||||
-rw-r--r-- | noncore/games/parashoot/base.h | 8 | ||||
-rw-r--r-- | noncore/games/parashoot/cannon.cpp | 24 | ||||
-rw-r--r-- | noncore/games/parashoot/cannon.h | 6 | ||||
-rw-r--r-- | noncore/games/parashoot/helicopter.cpp | 28 | ||||
-rw-r--r-- | noncore/games/parashoot/helicopter.h | 6 | ||||
-rw-r--r-- | noncore/games/parashoot/interface.cpp | 74 | ||||
-rw-r--r-- | noncore/games/parashoot/interface.h | 22 | ||||
-rw-r--r-- | noncore/games/parashoot/man.cpp | 39 |
9 files changed, 148 insertions, 71 deletions
diff --git a/noncore/games/parashoot/base.cpp b/noncore/games/parashoot/base.cpp index c03802f..cdf1dfa 100644 --- a/noncore/games/parashoot/base.cpp +++ b/noncore/games/parashoot/base.cpp @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -20,9 +20,9 @@ #include "codes.h" #include "base.h" #include "man.h" -#include <qpe/resource.h> +#include <qtopia/resource.h> #include <qregexp.h> int damage; @@ -68,4 +68,10 @@ Base::~Base() int Base::rtti() const { return base_rtti; } + +void +Base::reposition(void) +{ + move(2, canvas()->height()-50); +} diff --git a/noncore/games/parashoot/base.h b/noncore/games/parashoot/base.h index ee7f166..a4c69cc 100644 --- a/noncore/games/parashoot/base.h +++ b/noncore/games/parashoot/base.h @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -17,9 +17,9 @@ ** not clear to you. ** **********************************************************************/ -#include <qpe/sound.h> +#include <qtopia/sound.h> #include <qcanvas.h> class Base : public QCanvasSprite @@ -31,8 +31,10 @@ public: void damageBase(); int rtti() const; static bool baseDestroyed(); + void reposition(void); + private: QCanvasPixmapArray* basearray; Sound kaboom, ohdear; }; diff --git a/noncore/games/parashoot/cannon.cpp b/noncore/games/parashoot/cannon.cpp index 3c0a5fe..5671351 100644 --- a/noncore/games/parashoot/cannon.cpp +++ b/noncore/games/parashoot/cannon.cpp @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -17,9 +17,9 @@ ** not clear to you. ** **********************************************************************/ -#include <qpe/resource.h> +#include <qtopia/resource.h> #include <qregexp.h> #include "codes.h" @@ -37,12 +37,11 @@ shotsfired=0; c0.replace(QRegExp("0001"),"%1"); cannonarray->readPixmaps(c0,17); setSequence(cannonarray); setFrame(index); - move(canvas->width()/2-20, canvas->height()-32); - // co ords for barrel of cannon when upright - barrelypos = canvas->height()-32; - barrelxpos = canvas->width()/2; + + reposition(); + movedir = NoDir; moveDelay = 0; setAnimated(TRUE); show(); @@ -137,4 +136,15 @@ Cannon::~Cannon() int Cannon::rtti() const { return cannon_rtti; } + +void Cannon::reposition(void) +{ + move(canvas()->width()/2-20, canvas()->height()-32); + // co ords for barrel of cannon when upright + barrelypos = canvas()->height()-32; + barrelxpos = canvas()->width()/2; + + setFrame(index); + setCoords(); +} diff --git a/noncore/games/parashoot/cannon.h b/noncore/games/parashoot/cannon.h index 44d0c65..51b1247 100644 --- a/noncore/games/parashoot/cannon.h +++ b/noncore/games/parashoot/cannon.h @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -38,8 +38,10 @@ public: int rtti() const; int shotsFired() { return shotsfired; }; + void reposition(void); + protected: void advance(int stage); signals: diff --git a/noncore/games/parashoot/helicopter.cpp b/noncore/games/parashoot/helicopter.cpp index 0923124..036b21e 100644 --- a/noncore/games/parashoot/helicopter.cpp +++ b/noncore/games/parashoot/helicopter.cpp @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -21,9 +21,9 @@ #include "helicopter.h" #include "man.h" #include "codes.h" -#include <qpe/resource.h> +#include <qtopia/resource.h> #include <qregexp.h> static QList<Helicopter> all; @@ -36,9 +36,10 @@ Helicopter::Helicopter(QCanvas* canvas) : hits = 0; QCanvasPixmapArray* helicopterarray = new QCanvasPixmapArray(); QString h0 = Resource::findPixmap("parashoot/helicopter0001"); h0.replace(QRegExp("0001"),"%1"); - helicopterarray->readPixmaps(h0,3 ); + helicopterarray->readPixmaps(h0,4 ); + setSequence(helicopterarray); setAnimated(true); move(canvas->width(), 5); setVelocity(-2, 0); @@ -56,11 +57,20 @@ int fr = 0; void Helicopter::advance(int phase) { QCanvasSprite::advance(phase); if (phase == 0) { - setFrame(fr%3); - fr++; - checkCollision(); + if (frame() == 3) { + delete this; + return; + } + + if (hits >= 2) { + setFrame(3); + } else { + setFrame(fr%3); + fr++; + checkCollision(); + } } } void Helicopter::checkCollision() @@ -82,12 +92,8 @@ void Helicopter::dropman() void Helicopter::done() { hits++; - if (hits >= 2) { - setAnimated(false); - delete this; - } } void Helicopter::takeOff() { diff --git a/noncore/games/parashoot/helicopter.h b/noncore/games/parashoot/helicopter.h index 5cb92de..954c651 100644 --- a/noncore/games/parashoot/helicopter.h +++ b/noncore/games/parashoot/helicopter.h @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -17,9 +17,9 @@ ** not clear to you. ** **********************************************************************/ -#include <qpe/sound.h> +#include <qtopia/sound.h> #include <qcanvas.h> class Helicopter : public QCanvasSprite diff --git a/noncore/games/parashoot/interface.cpp b/noncore/games/parashoot/interface.cpp index a40426d..948b92c 100644 --- a/noncore/games/parashoot/interface.cpp +++ b/noncore/games/parashoot/interface.cpp @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -20,29 +20,33 @@ #include "interface.h" #include "man.h" -#include <qpe/resource.h> -#include <qpe/qpeapplication.h> +#include <qtopia/qpeapplication.h> +#include <qtopia/resource.h> #include <qlabel.h> #include <qmessagebox.h> #include <qapplication.h> #include <qstyle.h> -#include <qpe/qpetoolbar.h> +#include <qtoolbar.h> #include <qtoolbutton.h> ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) : QMainWindow(parent,name,f), - canvas(232, 258), + canvas( 232, 258 ), + cannon(NULL), + base(NULL), + gamestopped( true ), + waitover( false ), fanfare("level_up"), score(0) { QPEApplication::grabKeyboard(); QPEApplication::setInputMethodHint(this, QPEApplication::AlwaysOff ); + + updatespeed = 80; canvas.setAdvancePeriod(80); - QPixmap bg = Resource::loadPixmap("parashoot/sky"); - canvas.setBackgroundPixmap(bg); pb = new QCanvasView(&canvas, this); pb->setFocus(); @@ -51,11 +55,9 @@ ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) : QToolBar* toolbar = new QToolBar(this); toolbar->setHorizontalStretchable( TRUE ); setCaption( tr("ParaShoot") ); - QPixmap newicon = Resource::loadPixmap("parashoot/manicon"); - setIcon(newicon); - new QToolButton(newicon, tr("New Game"), 0, + new QToolButton( Resource::loadIconSet("new"), tr("New Game"), 0, this, SLOT(newGame()), toolbar, "New Game"); levelscore = new QLabel(toolbar); levelscore->setBackgroundMode( PaletteButton ); @@ -71,20 +73,44 @@ ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) : pauseTimer = new QTimer(this); connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) ); setFocusPolicy(StrongFocus); - - newGame(); } void ParaShoot::resizeEvent(QResizeEvent *) { QSize s = centralWidget()->size(); int fw = style().defaultFrameWidth(); canvas.resize( s.width() - fw - 2, s.height() - fw - 2); + + QImage bgimage = Resource::loadImage("parashoot/sky"); + QPixmap bgpixmap; + + bgpixmap.convertFromImage(bgimage.smoothScale(canvas.width(), + canvas.height()), QPixmap::Auto); + canvas.setBackgroundPixmap(bgpixmap); + + if (base) { + base->reposition(); + } + + if (cannon) { + cannon->reposition(); + } } +void ParaShoot::focusOutEvent (QFocusEvent *) +{ + if (!gamestopped) + canvas.setAdvancePeriod(-1); +} + +void ParaShoot::focusInEvent (QFocusEvent *) +{ + if (!gamestopped) + canvas.setAdvancePeriod(updatespeed); +} void ParaShoot::showScore( int score, int level ) { levelscore->setText(tr(" Level: %1 Score: %2 ").arg(score).arg(level) ); @@ -149,10 +175,11 @@ void ParaShoot::gameOver() " Parachuters Killed: %2\n" " Accuracy: %3% " ).arg(score).arg(shots).arg(shots * 100 / shotsFired ), &canvas); gameover->setColor(red); - gameover->setFont( QFont("times", 18, QFont::Bold) ); - gameover->move(canvas.width()/2 -110, canvas.height()/2 -50); + gameover->setFont( QFont("times", 16, QFont::Bold) ); + gameover->move((canvas.width() - gameover->boundingRect().width()) / 2, + (canvas.height() - gameover->boundingRect().height()) / 2); gameover->setZ(500); gameover->show(); gamestopped = true; waitover = false; @@ -226,25 +253,30 @@ void ParaShoot::keyPressEvent(QKeyEvent* event) case Key_Up: case Key_F1: case Key_F9: case Key_Space: - cannon->shoot(); + if ( cannon ) + cannon->shoot(); break; - case Key_Left: - cannon->pointCannon(Cannon::Left); + case Key_Left:{ + if (cannon ) + cannon->pointCannon(Cannon::Left); lastcannonkey=Key_Left; break; - case Key_Right: - cannon->pointCannon(Cannon::Right); + } + case Key_Right:{ + if ( cannon ) + cannon->pointCannon(Cannon::Right); lastcannonkey=Key_Right; break; + } default: return; } } } void ParaShoot::keyReleaseEvent(QKeyEvent* event) { - if ( lastcannonkey == event->key() ) + if ( cannon && lastcannonkey == event->key() ) cannon->pointCannon(Cannon::NoDir); } diff --git a/noncore/games/parashoot/interface.h b/noncore/games/parashoot/interface.h index 5abbe0b..dd73f53 100644 --- a/noncore/games/parashoot/interface.h +++ b/noncore/games/parashoot/interface.h @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -21,9 +21,9 @@ #include "cannon.h" #include "base.h" #include "helicopter.h" -#include <qpe/sound.h> +#include <qtopia/sound.h> #include <qmainwindow.h> #include <qtimer.h> #include <qlabel.h> @@ -31,17 +31,18 @@ class QCanvas; class Helicopter; //enum Direction{ -// left, right, up, down }; +// left, right, up, down }; class ParaShoot : public QMainWindow { Q_OBJECT - + public: - static QString appName() { return QString::fromLatin1("parashoot"); } ParaShoot(QWidget* parent=0, const char* name=0, WFlags f=0); - + static QString appName() { + return QString::fromLatin1("parashoot"); + } void clear(); void gameOver(); int mancount; void levelUp(); @@ -50,9 +51,11 @@ public: protected: virtual void keyPressEvent(QKeyEvent*); virtual void keyReleaseEvent(QKeyEvent*); virtual void resizeEvent(QResizeEvent *e); - + virtual void focusOutEvent(QFocusEvent *); + virtual void focusInEvent(QFocusEvent *); + private slots: void increaseScore(int); void newGame(); void play(); @@ -63,9 +66,8 @@ private: QCanvasView* pb; QCanvas canvas; Cannon* cannon; Base* base; - QCanvasText* gameover; QLabel* levelscore; int nomen; int level; int oldscore; @@ -76,5 +78,5 @@ private: bool waitover; Sound fanfare; int score; int lastcannonkey; -}; +}; diff --git a/noncore/games/parashoot/man.cpp b/noncore/games/parashoot/man.cpp index 8435572..94807c2 100644 --- a/noncore/games/parashoot/man.cpp +++ b/noncore/games/parashoot/man.cpp @@ -1,8 +1,8 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the @@ -17,26 +17,26 @@ ** not clear to you. ** **********************************************************************/ -#include "codes.h" +#include "codes.h" #include "man.h" #include "base.h" -#include <qpe/resource.h> +#include <qtopia/resource.h> #include <qregexp.h> int mancount; Man::Man(QCanvas* canvas) : QCanvasSprite(0, canvas), - splat("lose") + splat("lose") // No tr { manarray = new QCanvasPixmapArray(); QString m0 = Resource::findPixmap("parashoot/man0001"); m0.replace(QRegExp("0001"),"%1"); - manarray->readPixmaps(m0, 7); + manarray->readPixmaps(m0, 7); setSequence(manarray); setAnimated(true); mancount++; dead = false; @@ -44,9 +44,9 @@ Man::Man(QCanvas* canvas) : } Man::Man(QCanvas* canvas, int x, int y) : QCanvasSprite(0, canvas), - splat("bang") + splat("bang") // No tr { manarray = new QCanvasPixmapArray(); QString m0 = Resource::findPixmap("parashoot/man0001"); m0.replace(QString("0001"),"%1"); @@ -61,9 +61,9 @@ Man::Man(QCanvas* canvas, int x, int y) : if (first_time) { first_time = FALSE; QTime midnight(0, 0, 0); srand(midnight.secsTo(QTime::currentTime()) ); - } + } int yfallspeed = 0; yfallspeed = (rand() % 3) + 1; setVelocity(0, yfallspeed); @@ -91,11 +91,18 @@ void Man::advance(int phase) setFrame(f%5); f++; move(x(), canvas()->height()-26); setVelocity(-2, 0); - } + } else if (xVelocity() == -2) { + // + // There's been a resize event while this Man has + // been on the ground. Move the man back to the + // new ground location. This is not neat. + // + move(x(), canvas()->height()-26); + } } -} +} void Man::setInitialCoords() { static bool first_time = TRUE; @@ -109,9 +116,9 @@ void Man::setInitialCoords() } //check if man has reached the base void Man::checkCollision() -{ +{ if ( (x() < 23) && (y() == canvas()->height()-26)) { QCanvasItem* item; QCanvasItemList l=collisions(FALSE); for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) { @@ -122,8 +129,18 @@ void Man::checkCollision() start(); } } } + + // + // resize events may cause Man objects to appear + // outside the screen. Get rid of them if this + // is the case. + // + if ((x() < 0) || (x() > canvas()->width())) { + delete this; + return; + } } void Man::start() { |