From b033733924e5d3454bb0a810c6a70d4ff0531d2b Mon Sep 17 00:00:00 2001 From: zecke Date: Fri, 06 Feb 2004 14:32:10 +0000 Subject: Funny how much bugs one can introduce when importing Qtopia stuff. Fixed a couple of possible sigsegv, uninitialized variables --- (limited to 'noncore') 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -21,7 +21,7 @@ #include "base.h" #include "man.h" -#include +#include #include @@ -69,3 +69,9 @@ 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -18,7 +18,7 @@ ** **********************************************************************/ -#include +#include #include @@ -32,6 +32,8 @@ public: 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -18,7 +18,7 @@ ** **********************************************************************/ -#include +#include #include @@ -38,10 +38,9 @@ shotsfired=0; 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); @@ -138,3 +137,14 @@ 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -39,6 +39,8 @@ public: int shotsFired() { return shotsfired; }; + void reposition(void); + protected: void advance(int stage); 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -22,7 +22,7 @@ #include "man.h" #include "codes.h" -#include +#include #include @@ -37,7 +37,8 @@ Helicopter::Helicopter(QCanvas* canvas) : 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); @@ -57,9 +58,18 @@ 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(); + } } } @@ -83,10 +93,6 @@ 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -18,7 +18,7 @@ ** **********************************************************************/ -#include +#include #include 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -21,27 +21,31 @@ #include "interface.h" #include "man.h" -#include -#include +#include +#include #include #include #include #include -#include +#include #include 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(); @@ -52,9 +56,7 @@ ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) : 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); @@ -72,8 +74,6 @@ ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) : connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) ); setFocusPolicy(StrongFocus); - - newGame(); } @@ -82,8 +82,34 @@ 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 ) { @@ -150,8 +176,9 @@ void ParaShoot::gameOver() " 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; @@ -227,16 +254,21 @@ void ParaShoot::keyPressEvent(QKeyEvent* event) 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; } @@ -245,6 +277,6 @@ void ParaShoot::keyPressEvent(QKeyEvent* event) 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -22,7 +22,7 @@ #include "base.h" #include "helicopter.h" -#include +#include #include #include @@ -32,15 +32,16 @@ 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; @@ -51,7 +52,9 @@ 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(); @@ -64,7 +67,6 @@ private: QCanvas canvas; Cannon* cannon; Base* base; - QCanvasText* gameover; QLabel* levelscore; int nomen; int level; @@ -77,4 +79,4 @@ private: 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,7 +1,7 @@ /********************************************************************** -** 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 @@ -18,11 +18,11 @@ ** **********************************************************************/ -#include "codes.h" +#include "codes.h" #include "man.h" #include "base.h" -#include +#include #include @@ -30,12 +30,12 @@ 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++; @@ -45,7 +45,7 @@ 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"); @@ -62,7 +62,7 @@ Man::Man(QCanvas* canvas, int x, int y) : first_time = FALSE; QTime midnight(0, 0, 0); srand(midnight.secsTo(QTime::currentTime()) ); - } + } int yfallspeed = 0; yfallspeed = (rand() % 3) + 1; setVelocity(0, yfallspeed); @@ -92,9 +92,16 @@ void Man::advance(int phase) 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() { @@ -110,7 +117,7 @@ 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); @@ -123,6 +130,16 @@ void Man::checkCollision() } } } + + // + // 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() -- cgit v0.9.0.2