summaryrefslogtreecommitdiff
authorandyq <andyq>2002-12-21 18:37:35 (UTC)
committer andyq <andyq>2002-12-21 18:37:35 (UTC)
commitc32f49c53600fe2aa5d9610221b73c08499ffd69 (patch) (unidiff)
tree292aa0137fe6b2cd7e7eb7dd84cefa05f36216ab
parent491ac1e10a2caceb5003b0649f0cb0131e9b81fd (diff)
downloadopie-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
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/sfcave/sfcave.cpp127
-rw-r--r--noncore/games/sfcave/sfcave.h8
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
107int 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 } };
114int 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 } };
121int 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
107int SFCave::initialGateGaps[] = { 75, 50, 25 }; 128int 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
433void SFCave :: handleGameFly() 466void 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;