author | andyq <andyq> | 2002-12-21 18:37:35 (UTC) |
---|---|---|
committer | andyq <andyq> | 2002-12-21 18:37:35 (UTC) |
commit | c32f49c53600fe2aa5d9610221b73c08499ffd69 (patch) (unidiff) | |
tree | 292aa0137fe6b2cd7e7eb7dd84cefa05f36216ab | |
parent | 491ac1e10a2caceb5003b0649f0cb0131e9b81fd (diff) | |
download | opie-c32f49c53600fe2aa5d9610221b73c08499ffd69.zip opie-c32f49c53600fe2aa5d9610221b73c08499ffd69.tar.gz opie-c32f49c53600fe2aa5d9610221b73c08499ffd69.tar.bz2 |
Added bit of eye candy - press 'e' to make smoke trails fade out (at expense of a little speed), and made fly game scoring zones better
-rw-r--r-- | noncore/games/sfcave/sfcave.cpp | 105 | ||||
-rw-r--r-- | noncore/games/sfcave/sfcave.h | 8 |
2 files changed, 93 insertions, 20 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 | |||
@@ -11,13 +11,13 @@ | |||
11 | #endif | 11 | #endif |
12 | #include <qdir.h> | 12 | #include <qdir.h> |
13 | 13 | ||
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 |
21 | #define MAX_DOWN_THRUST 4.0 | 21 | #define MAX_DOWN_THRUST 4.0 |
22 | #define MAX_UP_THRUST -3.5 | 22 | #define MAX_UP_THRUST -3.5 |
23 | 23 | ||
@@ -101,12 +101,33 @@ double SFCave::MaxUpThrustVals[3][3] = {{ -3.5, -3.5, -3.5 }, // S | |||
101 | { -3.5, -4.0, -5.0 } }; // Fly | 101 | { -3.5, -4.0, -5.0 } }; // Fly |
102 | 102 | ||
103 | double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // SFCave | 103 | double SFCave::MaxDownThrustVals[3][3] = {{ 4.0, 4.0, 4.0 }, // SFCave |
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 | ||
110 | bool movel; | 131 | bool movel; |
111 | 132 | ||
112 | 133 | ||
@@ -175,12 +196,13 @@ SFCave :: SFCave( int spd, QWidget *w, char *name ) | |||
175 | 196 | ||
176 | currentGameType = cfg.readNumEntry( "gameType", 0 ); | 197 | currentGameType = cfg.readNumEntry( "gameType", 0 ); |
177 | currentGameDifficulty = cfg.readNumEntry( "difficulty", 0 ); | 198 | currentGameDifficulty = cfg.readNumEntry( "difficulty", 0 ); |
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 ); |
184 | 206 | ||
185 | // setUp(); | 207 | // setUp(); |
186 | crashLineLength = -1; | 208 | crashLineLength = -1; |
@@ -223,23 +245,25 @@ void SFCave :: setUp() | |||
223 | { | 245 | { |
224 | score = 0; | 246 | score = 0; |
225 | offset = 0; | 247 | offset = 0; |
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 | { |
232 | thrustUp = UpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; | 256 | thrustUp = UpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; |
233 | noThrust = DownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; | 257 | noThrust = DownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; |
234 | maxUpThrust = MaxUpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; | 258 | maxUpThrust = MaxUpThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; |
235 | maxDownThrust = MaxDownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; | 259 | maxDownThrust = MaxDownThrustVals[SFCAVE_GAME_TYPE][currentGameDifficulty];; |
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; |
243 | } | 267 | } |
244 | else if ( CURRENT_GAME_TYPE == GATES_GAME ) | 268 | else if ( CURRENT_GAME_TYPE == GATES_GAME ) |
245 | { | 269 | { |
@@ -253,12 +277,19 @@ void SFCave :: setUp() | |||
253 | else | 277 | else |
254 | { | 278 | { |
255 | thrustUp = UpThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; | 279 | thrustUp = UpThrustVals[FLY_GAME_TYPE][currentGameDifficulty]; |
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; |
262 | lastGateBottomY = 0; | 293 | lastGateBottomY = 0; |
263 | 294 | ||
264 | user.setRect( 50, sWidth/2, 4, 4 ); | 295 | user.setRect( 50, sWidth/2, 4, 4 ); |
@@ -315,18 +346,20 @@ void SFCave :: run() | |||
315 | draw(); | 346 | draw(); |
316 | state = STATE_RUNNING; | 347 | state = STATE_RUNNING; |
317 | replay = true; | 348 | replay = true; |
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 | ||
330 | case STATE_RUNNING: | 363 | case STATE_RUNNING: |
331 | { | 364 | { |
332 | if ( nrFrames % 2 == 0 ) | 365 | if ( nrFrames % 2 == 0 ) |
@@ -429,27 +462,37 @@ void SFCave :: handleGameGates() | |||
429 | } | 462 | } |
430 | 463 | ||
431 | } | 464 | } |
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 | { |
472 | if ( !startScoring ) | ||
473 | { | ||
474 | if ( diff < 40 ) | ||
475 | startScoring = true; | ||
476 | } | ||
477 | |||
478 | if ( startScoring ) | ||
479 | { | ||
437 | // Update score | 480 | // Update score |
438 | // get distance between landscape and ship | 481 | // get distance between landscape and ship |
439 | int diff = mapBottom[10] - user.y(); | ||
440 | 482 | ||
441 | // the closer the difference is to 0 means more points | 483 | // the closer the difference is to 0 means more points |
442 | if ( diff < 10 ) | 484 | for ( int i = 0 ; i < 10 && flyScores[i][0] != -1 ; ++i ) |
443 | score += 5; | 485 | { |
444 | else if ( diff < 20 ) | 486 | if ( flyScores[i][0] <= diff && flyScores[i][1] > diff ) |
445 | score += 3; | 487 | { |
446 | else if ( diff < 30 ) | 488 | score += flyScores[i][2]; |
447 | score += 2; | 489 | break; |
448 | else if ( diff < 40 ) | 490 | } |
449 | score += 1; | 491 | } |
492 | } | ||
450 | } | 493 | } |
451 | 494 | ||
452 | if ( checkFlyGameCollision() ) | 495 | if ( checkFlyGameCollision() ) |
453 | { | 496 | { |
454 | if ( score > highestScore[currentGameType][currentGameDifficulty] ) | 497 | if ( score > highestScore[currentGameType][currentGameDifficulty] ) |
455 | { | 498 | { |
@@ -647,17 +690,21 @@ void SFCave :: draw() | |||
647 | p.drawLine( (i*segSize) - (offset*speed), mapTop[i], ((i+1)*segSize)-(offset*speed), mapTop[i+1] ); | 690 | p.drawLine( (i*segSize) - (offset*speed), mapTop[i], ((i+1)*segSize)-(offset*speed), mapTop[i+1] ); |
648 | 691 | ||
649 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i], ((i+1)*segSize)-(offset*speed), mapBottom[i+1] ); | 692 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i], ((i+1)*segSize)-(offset*speed), mapBottom[i+1] ); |
650 | 693 | ||
651 | if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones ) | 694 | if ( CURRENT_GAME_TYPE == FLY_GAME && showScoreZones ) |
652 | { | 695 | { |
696 | p.setPen( Qt::blue ); | ||
697 | for ( int j = 1 ; j < 10 && flyScores[j][0] != -1 ; ++j ) | ||
698 | { | ||
699 | if ( flyScores[j][2] < 0 ) | ||
653 | p.setPen( Qt::red ); | 700 | p.setPen( Qt::red ); |
654 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-10, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-10 ); | 701 | |
655 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-20, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-20 ); | 702 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-flyScores[j][0], ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-flyScores[j][0] ); |
656 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-30, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-30 ); | 703 | } |
657 | p.drawLine( (i*segSize) - (offset*speed), mapBottom[i]-40, ((i+1)*segSize)-(offset*speed), mapBottom[i+1]-40 ); | 704 | |
658 | p.setPen( Qt::white ); | 705 | p.setPen( Qt::white ); |
659 | } | 706 | } |
660 | } | 707 | } |
661 | 708 | ||
662 | // Uncomment this to show user segment (usful for checking collision boundary with landscape | 709 | // Uncomment this to show user segment (usful for checking collision boundary with landscape |
663 | // p.setPen( Qt::red ); | 710 | // p.setPen( Qt::red ); |
@@ -667,14 +714,19 @@ void SFCave :: draw() | |||
667 | // Draw user | 714 | // Draw user |
668 | p.drawRect( user ); | 715 | p.drawRect( user ); |
669 | 716 | ||
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 ) |
678 | { | 730 | { |
679 | p.fillRect( blocks[i], Qt::black ); | 731 | p.fillRect( blocks[i], Qt::black ); |
680 | p.drawRect( blocks[i] ); | 732 | p.drawRect( blocks[i] ); |
@@ -785,19 +837,26 @@ void SFCave :: keyPressEvent( QKeyEvent *e ) | |||
785 | { | 837 | { |
786 | switch( e->key() ) | 838 | switch( e->key() ) |
787 | { | 839 | { |
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 ) |
844 | { | ||
845 | if ( !replay && !press ) | ||
792 | { | 846 | { |
793 | press = true; | 847 | press = true; |
794 | replayList.append( new int( nrFrames ) ); | 848 | replayList.append( new int( nrFrames ) ); |
795 | } | 849 | } |
796 | else if ( state == STATE_CRASHED && e->key() == Key_Up ) | 850 | } |
851 | else if ( state == STATE_CRASHED ) | ||
852 | { | ||
853 | if ( e->key() == Key_Up ) | ||
797 | state = STATE_NEWGAME; | 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: |
801 | case Qt::Key_Enter: | 860 | case Qt::Key_Enter: |
802 | if ( state == STATE_CRASHED ) | 861 | if ( state == STATE_CRASHED ) |
803 | { | 862 | { |
@@ -827,23 +886,29 @@ void SFCave :: keyReleaseEvent( QKeyEvent *e ) | |||
827 | { | 886 | { |
828 | switch( e->key() ) | 887 | switch( e->key() ) |
829 | { | 888 | { |
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: |
892 | if ( state == STATE_RUNNING ) | ||
893 | { | ||
894 | if ( !replay && press ) | ||
895 | { | ||
833 | press = false; | 896 | press = false; |
834 | if ( state == STATE_RUNNING && !replay && press ) | ||
835 | replayList.append( new int( nrFrames ) ); | 897 | replayList.append( new int( nrFrames ) ); |
898 | } | ||
899 | } | ||
900 | break; | ||
836 | 901 | ||
902 | case Qt::Key_E: | ||
903 | showEyeCandy = !showEyeCandy; | ||
837 | break; | 904 | break; |
838 | 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: |
847 | if ( state == STATE_CRASHED ) | 912 | if ( state == STATE_CRASHED ) |
848 | state = STATE_NEWGAME; | 913 | state = STATE_NEWGAME; |
849 | break; | 914 | 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 | |||
@@ -35,19 +35,27 @@ public: | |||
35 | int blockHeight; | 35 | int blockHeight; |
36 | int gapHeight; | 36 | int gapHeight; |
37 | int state; | 37 | int state; |
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[]; |
47 | 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 | |||
55 | |||
48 | double thrustUp; | 56 | double thrustUp; |
49 | double noThrust; | 57 | double noThrust; |
50 | double maxUpThrust; | 58 | double maxUpThrust; |
51 | double maxDownThrust; | 59 | double maxDownThrust; |
52 | 60 | ||
53 | int gateDistance; | 61 | int gateDistance; |