-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 | |||
@@ -14,7 +14,7 @@ | |||
14 | #include "helpwindow.h" | 14 | #include "helpwindow.h" |
15 | #include "sfcave.h" | 15 | #include "sfcave.h" |
16 | 16 | ||
17 | #define CAPTION "SFCave 1.12 by AndyQ" | 17 | #define CAPTION "SFCave 1.13 by AndyQ" |
18 | 18 | ||
19 | #define UP_THRUST 0.6 | 19 | #define UP_THRUST 0.6 |
20 | #define NO_THRUST 0.8 | 20 | #define NO_THRUST 0.8 |
@@ -104,6 +104,27 @@ double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // S | |||
104 | { 4.0, 5.0, 5.5 }, // Gates | 104 | { 4.0, 5.0, 5.5 }, // Gates |
105 | { 3.5, 4.0, 5.0 } }; // Fly | 105 | { 3.5, 4.0, 5.0 } }; // Fly |
106 | 106 | ||
107 | int SFCave::flyEasyScores[7][3] = { { 0, 10, 5 }, | ||
108 | { 10, 20, 3 }, | ||
109 | { 20, 30, 2 }, | ||
110 | { 30, 40, 1 }, | ||
111 | { 50, 70, -2 }, | ||
112 | { 70, 300, -5 }, | ||
113 | { -1, -1, -1 } }; | ||
114 | int SFCave::flyNormalScores[7][3] = { { 0, 10, 5 }, | ||
115 | { 10, 20, 3 }, | ||
116 | { 20, 30, 2 }, | ||
117 | { 30, 40, 1 }, | ||
118 | { 50, 70, -2 }, | ||
119 | { 70, 300, -5 }, | ||
120 | { -1, -1, -1 } }; | ||
121 | int SFCave::flyHardScores[7][3] = { { 0, 20, 5 }, | ||
122 | { 20, 40, 3 }, | ||
123 | { 40, 100, 1 }, | ||
124 | { 100, 150, -2 }, | ||
125 | { 150, 300, -5 }, | ||
126 | { -1, -1, -1 } }; | ||
127 | |||
107 | int SFCave::initialGateGaps[] = { 75, 50, 25 }; | 128 | int SFCave::initialGateGaps[] = { 75, 50, 25 }; |
108 | 129 | ||
109 | 130 | ||
@@ -178,6 +199,7 @@ SFCave :: SFCave( int spd, QWidget *w, char *name ) | |||
178 | #endif | 199 | #endif |
179 | speed = spd; // Change to 2 for PC | 200 | speed = spd; // Change to 2 for PC |
180 | press = false; | 201 | press = false; |
202 | showEyeCandy = false; | ||
181 | 203 | ||
182 | offscreen = new QPixmap( sWidth, sHeight ); | 204 | offscreen = new QPixmap( sWidth, sHeight ); |
183 | offscreen->fill( Qt::black ); | 205 | offscreen->fill( Qt::black ); |
@@ -226,6 +248,8 @@ void SFCave :: setUp() | |||
226 | nrFrames = 0; | 248 | nrFrames = 0; |
227 | dir = 1; | 249 | dir = 1; |
228 | thrust = 0; | 250 | thrust = 0; |
251 | startScoring = false; | ||
252 | press = false; | ||
229 | 253 | ||
230 | if ( CURRENT_GAME_TYPE == SFCAVE_GAME ) | 254 | if ( CURRENT_GAME_TYPE == SFCAVE_GAME ) |
231 | { | 255 | { |
@@ -236,7 +260,7 @@ void SFCave :: setUp() | |||
236 | 260 | ||
237 | if ( currentGameDifficulty == DIFICULTY_EASY ) | 261 | if ( currentGameDifficulty == DIFICULTY_EASY ) |
238 | gateDistance = 100; | 262 | gateDistance = 100; |
239 | else if ( currentGameDifficulty == DIFICULTY_EASY ) | 263 | else if ( currentGameDifficulty == DIFICULTY_NORMAL ) |
240 | gateDistance = 60; | 264 | gateDistance = 60; |
241 | else | 265 | else |
242 | gateDistance = 40; | 266 | gateDistance = 40; |
@@ -256,6 +280,13 @@ void SFCave :: setUp() | |||
256 | noThrust = DownThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; | 280 | noThrust = DownThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; |
257 | maxUpThrust = MaxUpThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; | 281 | maxUpThrust = MaxUpThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; |
258 | maxDownThrust = MaxDownThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; | 282 | maxDownThrust = MaxDownThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; |
283 | |||
284 | if ( currentGameDifficulty == DIFICULTY_EASY ) | ||
285 | flyScores = flyEasyScores; | ||
286 | else if ( currentGameDifficulty == DIFICULTY_NORMAL ) | ||
287 | flyScores = flyNormalScores; | ||
288 | else | ||
289 | flyScores = flyHardScores; | ||
259 | } | 290 | } |
260 | 291 | ||
261 | crashLineLength = 0; | 292 | crashLineLength = 0; |
@@ -318,12 +349,14 @@ void SFCave :: run() | |||
318 | if ( replayIt ) | 349 | if ( replayIt ) |
319 | delete replayIt; | 350 | delete replayIt; |
320 | replayIt = new QListIterator<int>( replayList ); | 351 | replayIt = new QListIterator<int>( replayList ); |
352 | break; | ||
321 | case STATE_BOSS: | 353 | case STATE_BOSS: |
322 | drawBoss(); | 354 | drawBoss(); |
323 | break; | 355 | break; |
324 | 356 | ||
325 | case STATE_CRASHING: | 357 | case STATE_CRASHING: |
326 | case STATE_CRASHED: | 358 | case STATE_CRASHED: |
359 | press = false; | ||
327 | draw(); | 360 | draw(); |
328 | break; | 361 | break; |
329 | 362 | ||
@@ -432,21 +465,31 @@ void SFCave :: handleGameGates() | |||
432 | 465 | ||
433 | void SFCave :: handleGameFly() | 466 | void SFCave :: handleGameFly() |
434 | { | 467 | { |
468 | int diff = mapBottom[10] - user.y(); | ||
469 | |||
435 | if ( nrFrames % 4 == 0 ) | 470 | if ( nrFrames % 4 == 0 ) |
436 | { | 471 | { |
437 | // Update score | 472 | if ( !startScoring ) |
438 | // get distance between landscape and ship | 473 | { |
439 | int diff = mapBottom[10] - user.y(); | 474 | if ( diff < 40 ) |
440 | 475 | startScoring = true; | |
441 | // the closer the difference is to 0 means more points | 476 | } |
442 | if ( diff < 10 ) | 477 | |
443 | score += 5; | 478 | if ( startScoring ) |
444 | else if ( diff < 20 ) | 479 | { |
445 | score += 3; | 480 | // Update score |
446 | else if ( diff < 30 ) | 481 | // get distance between landscape and ship |
447 | score += 2; | 482 | |
448 | else if ( diff < 40 ) | 483 | // the closer the difference is to 0 means more points |
449 | score += 1; | 484 | for ( int i = 0 ; i < 10 && flyScores[i][0] != -1 ; ++i ) |
485 | { | ||
486 | if ( flyScores[i][0] <= diff && flyScores[i][1] > diff ) | ||
487 | { | ||
488 | score += flyScores[i][2]; | ||
489 | break; | ||
490 | } | ||
491 | } | ||
492 | } | ||
450 | } | 493 | } |
451 | 494 | ||
452 | if ( checkFlyGameCollision() ) | 495 | if ( checkFlyGameCollision() ) |
@@ -650,11 +693,15 @@ void SFCave :: draw() | |||
650 | 693 | ||
651 | if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones ) | 694 | if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones ) |
652 | { | 695 | { |
653 | p.setPen( Qt::red ); | 696 | p.setPen( Qt::blue ); |
654 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-10, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-10 ); | 697 | for ( int j = 1 ; j < 10 && flyScores[j][0] != -1 ; ++j ) |
655 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-20, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-20 ); | 698 | { |
656 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-30, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-30 ); | 699 | if ( flyScores[j][2] < 0 ) |
657 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-40, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-40 ); | 700 | p.setPen( Qt::red ); |
701 | |||
702 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-flyScores[j][0], ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-flyScores[j][0] ); | ||
703 | } | ||
704 | |||
658 | p.setPen( Qt::white ); | 705 | p.setPen( Qt::white ); |
659 | } | 706 | } |
660 | } | 707 | } |
@@ -670,8 +717,13 @@ void SFCave :: draw() | |||
670 | // Draw trails | 717 | // Draw trails |
671 | for ( int i = 0 ; i < TRAILSIZE ; ++i ) | 718 | for ( int i = 0 ; i < TRAILSIZE ; ++i ) |
672 | if ( trail[i].x() >= 0 ) | 719 | if ( trail[i].x() >= 0 ) |
720 | { | ||
721 | if ( showEyeCandy ) | ||
722 | p.setPen( Qt::white.light((int)(100.0-3*(user.x()/100.0)* (user.x()-trail[i].x())) ) ); | ||
673 | p.drawRect( trail[i].x(), trail[i].y(), 2, 2 ); | 723 | p.drawRect( trail[i].x(), trail[i].y(), 2, 2 ); |
724 | } | ||
674 | 725 | ||
726 | p.setPen( Qt::white ); | ||
675 | // Draw blocks | 727 | // Draw blocks |
676 | for ( int i = 0 ; i < BLOCKSIZE ; ++i ) | 728 | for ( int i = 0 ; i < BLOCKSIZE ; ++i ) |
677 | if ( blocks[i].y() != -1 ) | 729 | if ( blocks[i].y() != -1 ) |
@@ -788,13 +840,20 @@ void SFCave :: keyPressEvent( QKeyEvent *e ) | |||
788 | case Qt::Key_Up: | 840 | case Qt::Key_Up: |
789 | case Qt::Key_F9: | 841 | case Qt::Key_F9: |
790 | case Qt::Key_Space: | 842 | case Qt::Key_Space: |
791 | if ( state == STATE_RUNNING && !replay && !press ) | 843 | if ( state == STATE_RUNNING ) |
792 | { | 844 | { |
793 | press = true; | 845 | if ( !replay && !press ) |
794 | replayList.append( new int( nrFrames ) ); | 846 | { |
847 | press = true; | ||
848 | replayList.append( new int( nrFrames ) ); | ||
849 | } | ||
795 | } | 850 | } |
796 | else if ( state == STATE_CRASHED && e->key() == Key_Up ) | 851 | else if ( state == STATE_CRASHED ) |
797 | state = STATE_NEWGAME; | 852 | { |
853 | if ( e->key() == Key_Up ) | ||
854 | state = STATE_NEWGAME; | ||
855 | } | ||
856 | |||
798 | break; | 857 | break; |
799 | case Qt::Key_M: | 858 | case Qt::Key_M: |
800 | case Qt::Key_Return: | 859 | case Qt::Key_Return: |
@@ -830,17 +889,23 @@ void SFCave :: keyReleaseEvent( QKeyEvent *e ) | |||
830 | case Qt::Key_F9: | 889 | case Qt::Key_F9: |
831 | case Qt::Key_Space: | 890 | case Qt::Key_Space: |
832 | case Qt::Key_Up: | 891 | case Qt::Key_Up: |
833 | press = false; | 892 | if ( state == STATE_RUNNING ) |
834 | if ( state == STATE_RUNNING && !replay && press ) | 893 | { |
835 | replayList.append( new int( nrFrames ) ); | 894 | if ( !replay && press ) |
836 | 895 | { | |
896 | press = false; | ||
897 | replayList.append( new int( nrFrames ) ); | ||
898 | } | ||
899 | } | ||
837 | break; | 900 | break; |
838 | 901 | ||
902 | case Qt::Key_E: | ||
903 | showEyeCandy = !showEyeCandy; | ||
904 | break; | ||
905 | |||
839 | case Qt::Key_R: | 906 | case Qt::Key_R: |
840 | if ( state == STATE_CRASHED ) | 907 | if ( state == STATE_CRASHED ) |
841 | { | ||
842 | state = STATE_REPLAY; | 908 | state = STATE_REPLAY; |
843 | } | ||
844 | break; | 909 | break; |
845 | 910 | ||
846 | case Qt::Key_Down: | 911 | case Qt::Key_Down: |
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 | |||
@@ -38,12 +38,20 @@ public: | |||
38 | int prevState; | 38 | int prevState; |
39 | int speed; | 39 | int speed; |
40 | int crashLineLength; | 40 | int crashLineLength; |
41 | bool startScoring; | ||
42 | bool showEyeCandy; | ||
41 | 43 | ||
42 | static double UpThrustVals[3][3]; | 44 | static double UpThrustVals[3][3]; |
43 | static double DownThrustVals[3][3]; | 45 | static double DownThrustVals[3][3]; |
44 | static double MaxUpThrustVals[3][3]; | 46 | static double MaxUpThrustVals[3][3]; |
45 | static double MaxDownThrustVals[3][3]; | 47 | static double MaxDownThrustVals[3][3]; |
46 | static int initialGateGaps[]; | 48 | static int initialGateGaps[]; |
49 | |||
50 | static int flyEasyScores[7][3]; | ||
51 | static int flyNormalScores[7][3]; | ||
52 | static int flyHardScores[7][3]; | ||
53 | int flyScores[7][3]; | ||
54 | |||
47 | 55 | ||
48 | double thrustUp; | 56 | double thrustUp; |
49 | double noThrust; | 57 | double noThrust; |