-rw-r--r-- | noncore/games/sfcave/sfcave.cpp | 127 | ||||
-rw-r--r-- | noncore/games/sfcave/sfcave.h | 8 |
2 files changed, 104 insertions, 31 deletions
diff --git a/noncore/games/sfcave/sfcave.cpp b/noncore/games/sfcave/sfcave.cpp index c1e4532..d6d28b2 100644 --- a/noncore/games/sfcave/sfcave.cpp +++ b/noncore/games/sfcave/sfcave.cpp @@ -15,5 +15,5 @@ #include "sfcave.h" -#define CAPTION "SFCave 1.12 by AndyQ" +#define CAPTION "SFCave 1.13 by AndyQ" #define UP_THRUST 0.6 @@ -105,4 +105,25 @@ double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // S { 3.5, 4.0, 5.0 } }; // Fly +int SFCave::flyEasyScores[7][3] = { { 0, 10, 5 }, + { 10, 20, 3 }, + { 20, 30, 2 }, + { 30, 40, 1 }, + { 50, 70, -2 }, + { 70, 300, -5 }, + { -1, -1, -1 } }; +int SFCave::flyNormalScores[7][3] = { { 0, 10, 5 }, + { 10, 20, 3 }, + { 20, 30, 2 }, + { 30, 40, 1 }, + { 50, 70, -2 }, + { 70, 300, -5 }, + { -1, -1, -1 } }; +int SFCave::flyHardScores[7][3] = { { 0, 20, 5 }, + { 20, 40, 3 }, + { 40, 100, 1 }, + { 100, 150, -2 }, + { 150, 300, -5 }, + { -1, -1, -1 } }; + int SFCave::initialGateGaps[] = { 75, 50, 25 }; @@ -179,4 +200,5 @@ SFCave :: SFCave( int spd, QWidget *w, char *name ) speed = spd; // Change to 2 for PC press = false; + showEyeCandy = false; offscreen = new QPixmap( sWidth, sHeight ); @@ -227,4 +249,6 @@ void SFCave :: setUp() dir = 1; thrust = 0; + startScoring = false; + press = false; if ( CURRENT_GAME_TYPE == SFCAVE_GAME ) @@ -237,5 +261,5 @@ void SFCave :: setUp() if ( currentGameDifficulty == DIFICULTY_EASY ) gateDistance = 100; - else if ( currentGameDifficulty == DIFICULTY_EASY ) + else if ( currentGameDifficulty == DIFICULTY_NORMAL ) gateDistance = 60; else @@ -257,4 +281,11 @@ void SFCave :: setUp() maxUpThrust = MaxUpThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; maxDownThrust = MaxDownThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; + + if ( currentGameDifficulty == DIFICULTY_EASY ) + flyScores = flyEasyScores; + else if ( currentGameDifficulty == DIFICULTY_NORMAL ) + flyScores = flyNormalScores; + else + flyScores = flyHardScores; } @@ -319,4 +350,5 @@ void SFCave :: run() delete replayIt; replayIt = new QListIterator<int>( replayList ); + break; case STATE_BOSS: drawBoss(); @@ -325,4 +357,5 @@ void SFCave :: run() case STATE_CRASHING: case STATE_CRASHED: + press = false; draw(); break; @@ -433,19 +466,29 @@ void SFCave :: handleGameGates() void SFCave :: handleGameFly() { + int diff = mapBottom[10] - user.y(); + if ( nrFrames % 4 == 0 ) { - // Update score - // get distance between landscape and ship - int diff = mapBottom[10] - user.y(); - - // the closer the difference is to 0 means more points - if ( diff < 10 ) - score += 5; - else if ( diff < 20 ) - score += 3; - else if ( diff < 30 ) - score += 2; - else if ( diff < 40 ) - score += 1; + if ( !startScoring ) + { + if ( diff < 40 ) + startScoring = true; + } + + if ( startScoring ) + { + // Update score + // get distance between landscape and ship + + // the closer the difference is to 0 means more points + for ( int i = 0 ; i < 10 && flyScores[i][0] != -1 ; ++i ) + { + if ( flyScores[i][0] <= diff && flyScores[i][1] > diff ) + { + score += flyScores[i][2]; + break; + } + } + } } @@ -651,9 +694,13 @@ void SFCave :: draw() if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones ) { - p.setPen( Qt::red ); - p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-10, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-10 ); - p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-20, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-20 ); - p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-30, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-30 ); - p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-40, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-40 ); + p.setPen( Qt::blue ); + for ( int j = 1 ; j < 10 && flyScores[j][0] != -1 ; ++j ) + { + if ( flyScores[j][2] < 0 ) + p.setPen( Qt::red ); + + p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-flyScores[j][0], ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-flyScores[j][0] ); + } + p.setPen( Qt::white ); } @@ -671,6 +718,11 @@ void SFCave :: draw() for ( int i = 0 ; i < TRAILSIZE ; ++i ) if ( trail[i].x() >= 0 ) + { + if ( showEyeCandy ) + p.setPen( Qt::white.light((int)(100.0-3*(user.x()/100.0)* (user.x()-trail[i].x())) ) ); p.drawRect( trail[i].x(), trail[i].y(), 2, 2 ); + } + p.setPen( Qt::white ); // Draw blocks for ( int i = 0 ; i < BLOCKSIZE ; ++i ) @@ -789,11 +841,18 @@ void SFCave :: keyPressEvent( QKeyEvent *e ) case Qt::Key_F9: case Qt::Key_Space: - if ( state == STATE_RUNNING && !replay && !press ) + if ( state == STATE_RUNNING ) { - press = true; - replayList.append( new int( nrFrames ) ); + if ( !replay && !press ) + { + press = true; + replayList.append( new int( nrFrames ) ); + } } - else if ( state == STATE_CRASHED && e->key() == Key_Up ) - state = STATE_NEWGAME; + else if ( state == STATE_CRASHED ) + { + if ( e->key() == Key_Up ) + state = STATE_NEWGAME; + } + break; case Qt::Key_M: @@ -831,15 +890,21 @@ void SFCave :: keyReleaseEvent( QKeyEvent *e ) case Qt::Key_Space: case Qt::Key_Up: - press = false; - if ( state == STATE_RUNNING && !replay && press ) - replayList.append( new int( nrFrames ) ); - + if ( state == STATE_RUNNING ) + { + if ( !replay && press ) + { + press = false; + replayList.append( new int( nrFrames ) ); + } + } break; + case Qt::Key_E: + showEyeCandy = !showEyeCandy; + break; + case Qt::Key_R: if ( state == STATE_CRASHED ) - { state = STATE_REPLAY; - } break; diff --git a/noncore/games/sfcave/sfcave.h b/noncore/games/sfcave/sfcave.h index 65e5ae4..f95558d 100644 --- a/noncore/games/sfcave/sfcave.h +++ b/noncore/games/sfcave/sfcave.h @@ -39,4 +39,6 @@ public: int speed; int crashLineLength; + bool startScoring; + bool showEyeCandy; static double UpThrustVals[3][3]; @@ -45,4 +47,10 @@ public: static double MaxDownThrustVals[3][3]; static int initialGateGaps[]; + + static int flyEasyScores[7][3]; + static int flyNormalScores[7][3]; + static int flyHardScores[7][3]; + int flyScores[7][3]; + double thrustUp; |