summaryrefslogtreecommitdiff
authorandyq <andyq>2002-12-13 15:03:41 (UTC)
committer andyq <andyq>2002-12-13 15:03:41 (UTC)
commit28a78f938ae995fbc29f76afa84b1bee62178a79 (patch) (side-by-side diff)
tree47fdf14787de5748acafb151a63222b726a42a20
parent18c7cd23a85562cd23a4161e1006138e602a0be7 (diff)
downloadopie-28a78f938ae995fbc29f76afa84b1bee62178a79.zip
opie-28a78f938ae995fbc29f76afa84b1bee62178a79.tar.gz
opie-28a78f938ae995fbc29f76afa84b1bee62178a79.tar.bz2
Cleanup up some code, replays now know what game they were saved for, moved
the replay stuff into its own menu, and allowed the menus to have3 more items each.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/games/sfcave/sfcave.cpp355
-rw-r--r--noncore/games/sfcave/sfcave.h10
2 files changed, 213 insertions, 152 deletions
diff --git a/noncore/games/sfcave/sfcave.cpp b/noncore/games/sfcave/sfcave.cpp
index d551afe..0160d34 100644
--- a/noncore/games/sfcave/sfcave.cpp
+++ b/noncore/games/sfcave/sfcave.cpp
@@ -35,2 +35,3 @@
#define MENU_OPTIONS_MENU 1
+#define MENU_REPLAY_MENU 2
@@ -38,5 +39,6 @@
#define MENU_START_GAME 0
-#define MENU_OPTIONS 1
-#define MENU_HELP 2
-#define MENU_QUIT 3
+#define MENU_REPLAY 1
+#define MENU_OPTIONS 2
+#define MENU_HELP 3
+#define MENU_QUIT 4
@@ -48,2 +50,8 @@
+// Replay Menu Options
+#define MENU_REPLAY_START 0
+#define MENU_REPLAY_LOAD 1
+#define MENU_REPLAY_SAVE 2
+#define MENU_REPLAY_BACK 3
+
@@ -71,4 +79,8 @@ QString SFCave::gameTypes[] = { SFCAVE_GAME, GATES_GAME, FLY_GAME };
-QString SFCave::menuOptions[2][5] = { { "Start Game", "Options", "Help", "Quit", "" },
- { "Game Type - %s", "Game Difficulty - %s", "Clear High Scores for this game", "Back", "" } };
+QString SFCave::menuOptions[NR_MENUS][MAX_MENU_OPTIONS] = { { "Start Game", "Replays", "Options", "Help", "Quit", "", "", "" },
+ { "Game Type - %s", "Game Difficulty - %s", "Clear High Scores for this game", "Back", "", "", "", "" },
+ { "Play Reply", "Load Replay", "Save Replay", "Back", "", "", "", "" } };
+
+int SFCave::nrMenuOptions[NR_MENUS] = { 5, 4, 4 };
+int SFCave ::currentMenuOption[NR_MENUS] = { 0, 0, 0 };
@@ -96,4 +108,2 @@ int SFCave::initialGateGaps[] = { 75, 50, 25 };
-int SFCave::nrMenuOptions[2] = { 4, 4 };
-int SFCave ::currentMenuOption[2] = { 0, 0 };
@@ -694,3 +704,3 @@ void SFCave :: draw()
p.drawText( (sWidth/2) - (fm.width( text )/2), 135, text );
-
+/*
text = "Press r to replay";
@@ -703,2 +713,3 @@ void SFCave :: draw()
p.drawText( (sWidth/2) - (fm.width( text )/2), 180, text );
+*/
}
@@ -764,59 +775,3 @@ void SFCave :: keyPressEvent( QKeyEvent *e )
if ( state == STATE_MENU )
- {
- switch( e->key() )
- {
- case Qt::Key_Down:
- currentMenuOption[currentMenuNr] ++;
- if ( menuOptions[currentMenuNr][currentMenuOption[currentMenuNr]] == "" )
- currentMenuOption[currentMenuNr] = 0;
- break;
- case Qt::Key_Up:
- currentMenuOption[currentMenuNr] --;
- if ( currentMenuOption[currentMenuNr] < 0 )
- currentMenuOption[currentMenuNr] = nrMenuOptions[currentMenuNr]-1;
- break;
-
- case Qt::Key_Left:
- if ( currentMenuNr == MENU_OPTIONS_MENU )
- {
- if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE )
- {
- currentGameType --;
- if ( currentGameType < 0 )
- currentGameType = NR_GAME_TYPES - 1;
- }
- else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY )
- {
- currentGameDifficulty --;
- if ( currentGameDifficulty < 0 )
- currentGameDifficulty = NR_GAME_DIFFICULTIES - 1;
- }
- }
- break;
-
- case Qt::Key_Right:
- if ( currentMenuNr == MENU_OPTIONS_MENU )
- {
- if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE )
- {
- currentGameType ++;
- if ( currentGameType == NR_GAME_TYPES )
- currentGameType = 0;
- }
- else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY )
- {
- currentGameDifficulty ++;
- if ( currentGameDifficulty == NR_GAME_DIFFICULTIES )
- currentGameDifficulty = 0;
- }
- }
- break;
-
- case Qt::Key_Space:
- case Qt::Key_Return:
- case Qt::Key_Enter:
- dealWithMenuSelection();
- break;
- }
- }
+ handleMenuKeys( e );
else
@@ -838,3 +793,7 @@ void SFCave :: keyPressEvent( QKeyEvent *e )
if ( state == STATE_CRASHED )
+ {
state = STATE_MENU;
+ currentMenuNr = 0;
+ currentMenuOption[currentMenuNr] = 0;
+ }
break;
@@ -901,2 +860,162 @@ void SFCave :: keyReleaseEvent( QKeyEvent *e )
+
+void SFCave :: saveScore()
+{
+#ifdef QWS
+ Config cfg( "sfcave" );
+ cfg.setGroup( "settings" );
+ QString key = "highScore_";
+
+ cfg.writeEntry( key + gameTypes[currentGameType] + "_" + dificultyOption[currentGameDifficulty], highestScore[currentGameType][currentGameDifficulty] );
+ key += CURRENT_GAME_TYPE;
+ cfg.writeEntry( key, highestScore[currentGameType] );
+#endif
+}
+
+void SFCave :: saveReplay()
+{
+ FILE *out;
+ out = fopen( (const char *)replayFile, "w" );
+ if ( !out )
+ {
+ printf( "Couldn't write to /home/root/sfcave.replay\n" );
+ return;
+ }
+
+ // Build up string of values
+ // Format is:: <landscape seed> <game type> <difficulty> <framenr> <framenr>.......
+ QString val;
+ val.sprintf( "%d %d %d ", currentSeed, currentGameType, currentGameDifficulty );
+
+ QListIterator<int> it( replayList );
+ while( it.current() )
+ {
+ QString tmp;
+ tmp.sprintf( "%d ", (*it.current()) );
+ val += tmp;
+
+ ++it;
+ }
+ val += "\n";
+
+ QString line;
+ line.sprintf( "%d\n", val.length() );
+ fwrite( (const char *)line, 1, line.length(), out );
+
+ fwrite( (const char *)val, 1, val.length(), out );
+
+ fclose( out );
+
+ printf( "Replay saved to %s\n", (const char *)replayFile );
+
+}
+
+void SFCave :: loadReplay()
+{
+ FILE *in = fopen( (const char *)replayFile, "r" );
+
+ if ( in == 0 )
+ {
+ printf( "Couldn't load replay file!\n" );
+ return;
+ }
+
+ // Read next line - contains the size of the options
+ char line[10+1];
+ fgets( line, 10, in );
+
+ int length = -1;
+ sscanf( line, "%d", &length );
+ char *data = new char[length+1];
+
+ fread( data, 1, length, in );
+// printf( "data - %s", data );
+
+ QString sep = " ";
+ QStringList list = QStringList::split( sep, QString( data ) );
+
+ // print it out
+ QStringList::Iterator it = list.begin();
+ currentSeed = (*it).toInt();
+ ++it;
+ currentGameType = (*it).toInt();
+ ++it;
+ currentGameDifficulty = (*it).toInt();
+ ++it;
+
+ replayList.clear();
+ for ( ; it != list.end(); ++it )
+ {
+ int v = (*it).toInt();
+ replayList.append( new int( v ) );
+ }
+
+ delete data;
+
+ fclose( in );
+
+ printf( "Replay loaded from %s\n", (const char *)replayFile );
+}
+
+
+//--------------- MENU CODE ---------------------
+void SFCave :: handleMenuKeys( QKeyEvent *e )
+{
+ switch( e->key() )
+ {
+ case Qt::Key_Down:
+ currentMenuOption[currentMenuNr] ++;
+ if ( menuOptions[currentMenuNr][currentMenuOption[currentMenuNr]] == "" )
+ currentMenuOption[currentMenuNr] = 0;
+ break;
+ case Qt::Key_Up:
+ currentMenuOption[currentMenuNr] --;
+ if ( currentMenuOption[currentMenuNr] < 0 )
+ currentMenuOption[currentMenuNr] = nrMenuOptions[currentMenuNr]-1;
+ break;
+
+ case Qt::Key_Left:
+ if ( currentMenuNr == MENU_OPTIONS_MENU )
+ {
+ if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE )
+ {
+ currentGameType --;
+ if ( currentGameType < 0 )
+ currentGameType = NR_GAME_TYPES - 1;
+ }
+ else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY )
+ {
+ currentGameDifficulty --;
+ if ( currentGameDifficulty < 0 )
+ currentGameDifficulty = NR_GAME_DIFFICULTIES - 1;
+ }
+ }
+ break;
+
+ case Qt::Key_Right:
+ if ( currentMenuNr == MENU_OPTIONS_MENU )
+ {
+ if ( currentMenuOption[currentMenuNr] == MENU_GAME_TYPE )
+ {
+ currentGameType ++;
+ if ( currentGameType == NR_GAME_TYPES )
+ currentGameType = 0;
+ }
+ else if ( currentMenuOption[currentMenuNr] == MENU_GAME_DIFFICULTY )
+ {
+ currentGameDifficulty ++;
+ if ( currentGameDifficulty == NR_GAME_DIFFICULTIES )
+ currentGameDifficulty = 0;
+ }
+ }
+ break;
+
+ case Qt::Key_Space:
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ dealWithMenuSelection();
+ break;
+ }
+}
+
void SFCave :: displayMenu()
@@ -920,3 +1039,3 @@ void SFCave :: displayMenu()
// Draw options
- int pos = 170;
+ int pos = 140;
for ( int i = 0 ; menuOptions[currentMenuNr][i] != "" ; ++i, pos += 25 )
@@ -961,2 +1080,7 @@ void SFCave :: dealWithMenuSelection()
+ case MENU_REPLAY:
+ currentMenuNr = MENU_REPLAY_MENU;
+ currentMenuOption[currentMenuNr] = 0;
+ break;
+
case MENU_OPTIONS:
@@ -1012,94 +1136,29 @@ void SFCave :: dealWithMenuSelection()
}
- }
-}
-
-void SFCave :: saveScore()
-{
-#ifdef QWS
- Config cfg( "sfcave" );
- cfg.setGroup( "settings" );
- QString key = "highScore_";
-
- cfg.writeEntry( key + gameTypes[currentGameType] + "_" + dificultyOption[currentGameDifficulty], highestScore[currentGameType][currentGameDifficulty] );
- key += CURRENT_GAME_TYPE;
- cfg.writeEntry( key, highestScore[currentGameType] );
-#endif
-}
-void SFCave :: saveReplay()
-{
- FILE *out;
- out = fopen( (const char *)replayFile, "w" );
- if ( !out )
+ case MENU_REPLAY_MENU:
{
- printf( "Couldn't write to /home/root/sfcave.replay\n" );
- return;
- }
-
- // Build up string of values
- // Format is:: <landscape seed> <framenr> <framenr>.......
- QString val;
- val.sprintf( "%d ", currentSeed );
-
- QListIterator<int> it( replayList );
- while( it.current() )
+ switch( currentMenuOption[currentMenuNr] )
{
- QString tmp;
- tmp.sprintf( "%d ", (*it.current()) );
- val += tmp;
-
- ++it;
- }
- val += "\n";
+ case MENU_REPLAY_START:
+ if ( currentSeed != 0 )
+ state = STATE_REPLAY;
+ // Display No Replay
+ break;
- QString line;
- line.sprintf( "%d\n", val.length() );
- fwrite( (const char *)line, 1, line.length(), out );
- fwrite( (const char *)val, 1, val.length(), out );
+ case MENU_REPLAY_LOAD:
+ loadReplay();
+ break;
- fclose( out );
+ case MENU_REPLAY_SAVE:
+ saveReplay();
+ break;
- printf( "Replay saved to %s\n", (const char *)replayFile );
+ case MENU_REPLAY_BACK:
+ currentMenuNr = MENU_MAIN_MENU;
+ break;
}
-
-void SFCave :: loadReplay()
-{
- FILE *in = fopen( (const char *)replayFile, "r" );
-
- if ( in == 0 )
- {
- printf( "Couldn't load replay file!\n" );
- return;
}
- // Read size of next line
- char line[10+1];
- fgets( line, 10, in );
-
- int length = -1;
- sscanf( line, "%d", &length );
- char *data = new char[length+1];
-
- fread( data, 1, length, in );
-
- QString sep = " ";
- QStringList list = QStringList::split( sep, QString( data ) );
-
- // print it out
- QStringList::Iterator it = list.begin();
- currentSeed = (*it).toInt();
- ++it;
-
- replayList.clear();
- for ( ; it != list.end(); ++it )
- {
- int v = (*it).toInt();
- replayList.append( new int( v ) );
}
-
- delete data;
-
- fclose( in );
-
- printf( "Replay loaded from %s\n", (const char *)replayFile );
} \ No newline at end of file
+
diff --git a/noncore/games/sfcave/sfcave.h b/noncore/games/sfcave/sfcave.h
index 238a615..65e5ae4 100644
--- a/noncore/games/sfcave/sfcave.h
+++ b/noncore/games/sfcave/sfcave.h
@@ -14,3 +14,4 @@
-
+#define NR_MENUS 3
+#define MAX_MENU_OPTIONS 8
@@ -55,6 +56,6 @@ public:
- static QString menuOptions[2][5];
+ static QString menuOptions[NR_MENUS][MAX_MENU_OPTIONS];
int currentMenuNr;
- static int nrMenuOptions[2];
- static int currentMenuOption[2];
+ static int nrMenuOptions[NR_MENUS];
+ static int currentMenuOption[NR_MENUS];
@@ -109,2 +110,3 @@ public:
+ void handleMenuKeys( QKeyEvent * e );
void displayMenu();