Diffstat (limited to 'noncore/games/bounce/game.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/games/bounce/game.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/noncore/games/bounce/game.cpp b/noncore/games/bounce/game.cpp index bbd3d0b..5ef9f15 100644 --- a/noncore/games/bounce/game.cpp +++ b/noncore/games/bounce/game.cpp | |||
@@ -21,25 +21,25 @@ | |||
21 | 21 | ||
22 | /* OPIE */ | 22 | /* OPIE */ |
23 | #include <opie2/odebug.h> | 23 | #include <opie2/odebug.h> |
24 | #include <qpe/qpeapplication.h> | 24 | #include <qpe/qpeapplication.h> |
25 | using namespace Opie::Core; | 25 | using namespace Opie::Core; |
26 | 26 | ||
27 | /* QT */ | 27 | /* QT */ |
28 | #include <qtimer.h> | 28 | #include <qtimer.h> |
29 | 29 | ||
30 | /* STD */ | 30 | /* STD */ |
31 | #include <stdlib.h> | 31 | #include <stdlib.h> |
32 | 32 | ||
33 | #define TILE_SIZE 9 | 33 | #define TILE_SIZE 9 |
34 | 34 | ||
35 | #define TILE_FIRST ((FIELD_WIDTH-2)*(FIELD_HEIGHT-2)) | 35 | #define TILE_FIRST ((FIELD_WIDTH-2)*(FIELD_HEIGHT-2)) |
36 | #define TILE_FREE (TILE_FIRST + 0) | 36 | #define TILE_FREE (TILE_FIRST + 0) |
37 | #define TILE_BORDER (TILE_FIRST + 1) | 37 | #define TILE_BORDER (TILE_FIRST + 1) |
38 | #define TILE_WALLEND (TILE_FIRST + 2) | 38 | #define TILE_WALLEND (TILE_FIRST + 2) |
39 | #define TILE_WALLUP (TILE_FIRST + 3) | 39 | #define TILE_WALLUP (TILE_FIRST + 3) |
40 | #define TILE_WALLDOWN (TILE_FIRST + 4) | 40 | #define TILE_WALLDOWN (TILE_FIRST + 4) |
41 | #define TILE_WALLLEFT (TILE_FIRST + 5) | 41 | #define TILE_WALLLEFT (TILE_FIRST + 5) |
42 | #define TILE_WALLRIGHT (TILE_FIRST + 6) | 42 | #define TILE_WALLRIGHT (TILE_FIRST + 6) |
43 | 43 | ||
44 | #define GAME_DELAY 15 | 44 | #define GAME_DELAY 15 |
45 | #define BALL_ANIM_DELAY 60 | 45 | #define BALL_ANIM_DELAY 60 |
@@ -58,25 +58,25 @@ void Arrow::update() | |||
58 | { | 58 | { |
59 | if ( m_vertical ) | 59 | if ( m_vertical ) |
60 | setFrame( 0 ); | 60 | setFrame( 0 ); |
61 | else | 61 | else |
62 | setFrame( 1 ); | 62 | setFrame( 1 ); |
63 | } | 63 | } |
64 | 64 | ||
65 | void Arrow::changeDirection() | 65 | void Arrow::changeDirection() |
66 | { | 66 | { |
67 | m_vertical = ! m_vertical; | 67 | m_vertical = ! m_vertical; |
68 | update(); | 68 | update(); |
69 | } | 69 | } |
70 | 70 | ||
71 | 71 | ||
72 | Ball::Ball(QCanvasPixmapArray* array, QCanvas* canvas) | 72 | Ball::Ball(QCanvasPixmapArray* array, QCanvas* canvas) |
73 | : QCanvasSprite( array, canvas ), m_animDelay( 0 ), m_soundDelay( MS2TICKS(BALL_ANIM_DELAY)/2 ) | 73 | : QCanvasSprite( array, canvas ), m_animDelay( 0 ), m_soundDelay( MS2TICKS(BALL_ANIM_DELAY)/2 ) |
74 | { | 74 | { |
75 | } | 75 | } |
76 | 76 | ||
77 | void Ball::update() | 77 | void Ball::update() |
78 | { | 78 | { |
79 | m_animDelay--; | 79 | m_animDelay--; |
80 | if ( m_animDelay<=0 ) | 80 | if ( m_animDelay<=0 ) |
81 | { | 81 | { |
82 | m_animDelay = MS2TICKS(BALL_ANIM_DELAY); | 82 | m_animDelay = MS2TICKS(BALL_ANIM_DELAY); |
@@ -91,50 +91,50 @@ void Ball::update() | |||
91 | void Ball::advance(int stage) | 91 | void Ball::advance(int stage) |
92 | { | 92 | { |
93 | bool reflectX = false; | 93 | bool reflectX = false; |
94 | bool reflectY = false; | 94 | bool reflectY = false; |
95 | 95 | ||
96 | // check for collisions | 96 | // check for collisions |
97 | if ( collide(xVelocity(), 0) ) reflectX = true; | 97 | if ( collide(xVelocity(), 0) ) reflectX = true; |
98 | if ( collide(0, yVelocity()) ) reflectY = true; | 98 | if ( collide(0, yVelocity()) ) reflectY = true; |
99 | if ( !reflectX && !reflectY && collide(xVelocity(), yVelocity()) ) reflectX = reflectY = true; | 99 | if ( !reflectX && !reflectY && collide(xVelocity(), yVelocity()) ) reflectX = reflectY = true; |
100 | 100 | ||
101 | // emit collision | 101 | // emit collision |
102 | QRect r = boundingRect(); | 102 | QRect r = boundingRect(); |
103 | r.moveBy( xVelocity(), yVelocity() ); | 103 | r.moveBy( static_cast<int>(xVelocity()), static_cast<int>( yVelocity() ) ); |
104 | JezzField* field = (JezzField *)canvas(); | 104 | JezzField* field = (JezzField *)canvas(); |
105 | 105 | ||
106 | int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE ); | 106 | int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE ); |
107 | int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE ); | 107 | int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE ); |
108 | int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE ); | 108 | int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE ); |
109 | int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE ); | 109 | int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE ); |
110 | 110 | ||
111 | if ( ul!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.top() / TILE_SIZE, ul ); else | 111 | if ( ul!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.top() / TILE_SIZE, ul ); else |
112 | if ( ur!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.top() / TILE_SIZE, ur ); else | 112 | if ( ur!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.top() / TILE_SIZE, ur ); else |
113 | if ( bl!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.bottom() / TILE_SIZE, bl ); else | 113 | if ( bl!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.bottom() / TILE_SIZE, bl ); else |
114 | if ( br!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.bottom() / TILE_SIZE, br ); | 114 | if ( br!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.bottom() / TILE_SIZE, br ); |
115 | 115 | ||
116 | // apply reflection | 116 | // apply reflection |
117 | if ( reflectX ) setXVelocity( -xVelocity() ); | 117 | if ( reflectX ) setXVelocity( -xVelocity() ); |
118 | if ( reflectY ) setYVelocity( -yVelocity() ); | 118 | if ( reflectY ) setYVelocity( -yVelocity() ); |
119 | 119 | ||
120 | // update field | 120 | // update field |
121 | update(); | 121 | update(); |
122 | QCanvasSprite::advance( stage ); | 122 | QCanvasSprite::advance( stage ); |
123 | } | 123 | } |
124 | 124 | ||
125 | bool Ball::collide( double dx, double dy ) | 125 | bool Ball::collide( double dx, double dy ) |
126 | { | 126 | { |
127 | QRect r = boundingRect(); | 127 | QRect r = boundingRect(); |
128 | r.moveBy( dx, dy ); | 128 | r.moveBy( static_cast<int>( dx ), static_cast<int>( dy ) ); |
129 | JezzField* field = (JezzField *)canvas(); | 129 | JezzField* field = (JezzField *)canvas(); |
130 | 130 | ||
131 | int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE ); | 131 | int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE ); |
132 | int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE ); | 132 | int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE ); |
133 | int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE ); | 133 | int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE ); |
134 | int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE ); | 134 | int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE ); |
135 | 135 | ||
136 | return ( ul!=TILE_FREE || ur!=TILE_FREE || bl!=TILE_FREE || br!=TILE_FREE ); | 136 | return ( ul!=TILE_FREE || ur!=TILE_FREE || bl!=TILE_FREE || br!=TILE_FREE ); |
137 | } | 137 | } |
138 | 138 | ||
139 | /*************************************************************************/ | 139 | /*************************************************************************/ |
140 | 140 | ||
@@ -290,25 +290,25 @@ void JezzView::changeCursor() | |||
290 | else | 290 | else |
291 | { | 291 | { |
292 | setCursor( sizeHorCursor ); | 292 | setCursor( sizeHorCursor ); |
293 | } | 293 | } |
294 | } | 294 | } |
295 | 295 | ||
296 | /*************************************************************************/ | 296 | /*************************************************************************/ |
297 | 297 | ||
298 | JezzGame::JezzGame( int ballNum, QWidget *parent, const char *name ) | 298 | JezzGame::JezzGame( int ballNum, QWidget *parent, const char *name ) |
299 | : QWidget( parent, name ), m_wall1( 0 ), m_wall2( 0 ), | 299 | : QWidget( parent, name ), m_wall1( 0 ), m_wall2( 0 ), |
300 | m_text( 0 ), m_running( false ), m_percent( 0 ), m_pictured( false ) | 300 | m_text( 0 ), m_running( false ), m_percent( 0 ), m_pictured( false ) |
301 | { | 301 | { |
302 | QString path = QPEApplication::qpeDir()+"pics/bounce/"; | 302 | QString path = QPEApplication::qpeDir()+"pics/bounce/"; |
303 | 303 | ||
304 | // load gfx | 304 | // load gfx |
305 | m_ballPixmaps = new QCanvasPixmapArray( path + "ball%1.png", 25 ); | 305 | m_ballPixmaps = new QCanvasPixmapArray( path + "ball%1.png", 25 ); |
306 | for ( unsigned n=0; n < m_ballPixmaps->count(); n++ ) | 306 | for ( unsigned n=0; n < m_ballPixmaps->count(); n++ ) |
307 | m_ballPixmaps->image(n)->setOffset( 0, 0 ); | 307 | m_ballPixmaps->image(n)->setOffset( 0, 0 ); |
308 | 308 | ||
309 | m_arrowPixmaps = new QCanvasPixmapArray( path + "arrow%1.png", 2 ); | 309 | m_arrowPixmaps = new QCanvasPixmapArray( path + "arrow%1.png", 2 ); |
310 | for ( unsigned n=0; n < m_arrowPixmaps->count(); n++ ) | 310 | for ( unsigned n=0; n < m_arrowPixmaps->count(); n++ ) |
311 | m_arrowPixmaps->image(n)->setOffset( 0, 0 ); | 311 | m_arrowPixmaps->image(n)->setOffset( 0, 0 ); |
312 | 312 | ||
313 | QPixmap tiles( path + "tiles.png" ); | 313 | QPixmap tiles( path + "tiles.png" ); |
314 | 314 | ||
@@ -338,25 +338,25 @@ JezzGame::JezzGame( int ballNum, QWidget *parent, const char *name ) | |||
338 | 338 | ||
339 | // create balls | 339 | // create balls |
340 | for ( int n=0; n<ballNum; n++ ) | 340 | for ( int n=0; n<ballNum; n++ ) |
341 | { | 341 | { |
342 | Ball *ball = new Ball( m_ballPixmaps, m_field ); | 342 | Ball *ball = new Ball( m_ballPixmaps, m_field ); |
343 | m_balls.append( ball ); | 343 | m_balls.append( ball ); |
344 | ball->setVelocity( ((rand() & 1)*2-1)*2, ((rand() & 1)*2-1)*2 ); | 344 | ball->setVelocity( ((rand() & 1)*2-1)*2, ((rand() & 1)*2-1)*2 ); |
345 | ball->setFrame( rand() % 25 ); | 345 | ball->setFrame( rand() % 25 ); |
346 | ball->move( 4*TILE_SIZE + ( rand() - 50 ) % ( (FIELD_WIDTH-8)*TILE_SIZE ), | 346 | ball->move( 4*TILE_SIZE + ( rand() - 50 ) % ( (FIELD_WIDTH-8)*TILE_SIZE ), |
347 | 4*TILE_SIZE + rand() % ( (FIELD_HEIGHT-8)*TILE_SIZE ) ); | 347 | 4*TILE_SIZE + rand() % ( (FIELD_HEIGHT-8)*TILE_SIZE ) ); |
348 | ball->show(); | 348 | ball->show(); |
349 | } | 349 | } |
350 | 350 | ||
351 | // create arrow | 351 | // create arrow |
352 | arrow = new Arrow( m_arrowPixmaps, m_field ); | 352 | arrow = new Arrow( m_arrowPixmaps, m_field ); |
353 | arrow->show(); | 353 | arrow->show(); |
354 | 354 | ||
355 | // create text label | 355 | // create text label |
356 | m_text = new QCanvasText( m_field ); | 356 | m_text = new QCanvasText( m_field ); |
357 | 357 | ||
358 | // create game clock | 358 | // create game clock |
359 | m_clock = new QTimer( this ); | 359 | m_clock = new QTimer( this ); |
360 | connect( m_clock, SIGNAL(timeout()), this, SLOT(tick()) ); | 360 | connect( m_clock, SIGNAL(timeout()), this, SLOT(tick()) ); |
361 | m_clock->start( GAME_DELAY ); | 361 | m_clock->start( GAME_DELAY ); |
362 | 362 | ||
@@ -365,25 +365,25 @@ JezzGame::JezzGame( int ballNum, QWidget *parent, const char *name ) | |||
365 | } | 365 | } |
366 | 366 | ||
367 | JezzGame::~JezzGame() | 367 | JezzGame::~JezzGame() |
368 | { | 368 | { |
369 | m_balls.clear(); | 369 | m_balls.clear(); |
370 | delete m_view; | 370 | delete m_view; |
371 | delete m_field; | 371 | delete m_field; |
372 | delete m_ballPixmaps; | 372 | delete m_ballPixmaps; |
373 | } | 373 | } |
374 | 374 | ||
375 | void JezzGame::display( QString text, int size ) | 375 | void JezzGame::display( QString text, int size ) |
376 | { | 376 | { |
377 | odebug << "This function \"display\" shouldn't be called!!!" << oendl; | 377 | odebug << "This function \"display\" shouldn't be called!!!" << oendl; |
378 | if ( !text.isEmpty() ) | 378 | if ( !text.isEmpty() ) |
379 | { | 379 | { |
380 | QFont font( "Helvetica", size, QFont::Bold ); | 380 | QFont font( "Helvetica", size, QFont::Bold ); |
381 | font.setStyleHint( QFont::Helvetica ); | 381 | font.setStyleHint( QFont::Helvetica ); |
382 | m_text->setFont( font ); | 382 | m_text->setFont( font ); |
383 | m_text->setText( text ); | 383 | m_text->setText( text ); |
384 | 384 | ||
385 | QRect size = m_text->boundingRect(); | 385 | QRect size = m_text->boundingRect(); |
386 | m_text->move( ( FIELD_WIDTH*TILE_SIZE - size.width() ) / 2, | 386 | m_text->move( ( FIELD_WIDTH*TILE_SIZE - size.width() ) / 2, |
387 | ( FIELD_HEIGHT*TILE_SIZE - size.height() ) / 2 ); | 387 | ( FIELD_HEIGHT*TILE_SIZE - size.height() ) / 2 ); |
388 | 388 | ||
389 | m_text->show(); | 389 | m_text->show(); |
@@ -404,25 +404,26 @@ void JezzGame::stop() | |||
404 | } | 404 | } |
405 | 405 | ||
406 | 406 | ||
407 | void JezzGame::makeBlack() | 407 | void JezzGame::makeBlack() |
408 | { | 408 | { |
409 | // copy current field into buffer | 409 | // copy current field into buffer |
410 | for ( int y=0; y<FIELD_HEIGHT; y++ ) | 410 | for ( int y=0; y<FIELD_HEIGHT; y++ ) |
411 | for ( int x=0; x<FIELD_WIDTH; x++ ) | 411 | for ( int x=0; x<FIELD_WIDTH; x++ ) |
412 | m_buf[x][y] = m_field->tile( x, y ); | 412 | m_buf[x][y] = m_field->tile( x, y ); |
413 | 413 | ||
414 | // fill areas that contains a ball | 414 | // fill areas that contains a ball |
415 | for ( Ball *ball=m_balls.first(); ball!=0; ball=m_balls.next() ) | 415 | for ( Ball *ball=m_balls.first(); ball!=0; ball=m_balls.next() ) |
416 | fill( ball->x()/TILE_SIZE, ball->y()/TILE_SIZE ); | 416 | fill( static_cast<int>( ball->x()/TILE_SIZE ), |
417 | static_cast<int>( ball->y()/TILE_SIZE ) ); | ||
417 | 418 | ||
418 | // areas still free can be blacked now | 419 | // areas still free can be blacked now |
419 | for ( int y=0; y<FIELD_HEIGHT; y++ ) | 420 | for ( int y=0; y<FIELD_HEIGHT; y++ ) |
420 | for ( int x=0; x<FIELD_WIDTH; x++ ) | 421 | for ( int x=0; x<FIELD_WIDTH; x++ ) |
421 | { | 422 | { |
422 | if ( m_buf[x][y]==TILE_FREE ) | 423 | if ( m_buf[x][y]==TILE_FREE ) |
423 | m_field->setGameTile( x, y, true ); | 424 | m_field->setGameTile( x, y, true ); |
424 | } | 425 | } |
425 | 426 | ||
426 | m_field->update(); | 427 | m_field->update(); |
427 | m_view->repaint(); | 428 | m_view->repaint(); |
428 | 429 | ||