-rw-r--r-- | noncore/games/sfcave/sfcave.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/noncore/games/sfcave/sfcave.cpp b/noncore/games/sfcave/sfcave.cpp index 93f5f82..d551afe 100644 --- a/noncore/games/sfcave/sfcave.cpp +++ b/noncore/games/sfcave/sfcave.cpp @@ -797,126 +797,128 @@ void SFCave :: keyPressEvent( QKeyEvent *e ) 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; } } else { switch( e->key() ) { case Qt::Key_Up: case Qt::Key_F9: case Qt::Key_Space: - if ( !press ) + if ( !replay && !press ) { press = true; replayList.append( new int( nrFrames ) ); } break; case Qt::Key_M: case Qt::Key_Return: case Qt::Key_Enter: if ( state == STATE_CRASHED ) state = STATE_MENU; break; case Qt::Key_Z: showScoreZones = !showScoreZones; break; default: e->ignore(); break; } } } void SFCave :: keyReleaseEvent( QKeyEvent *e ) { if ( state == STATE_MENU ) { } else { switch( e->key() ) { case Qt::Key_F9: case Qt::Key_Space: case Qt::Key_Up: - if ( press ) + if ( !replay && press ) { press = false; replayList.append( new int( nrFrames ) ); } break; case Qt::Key_R: if ( state == STATE_CRASHED ) { state = STATE_REPLAY; } break; case Qt::Key_Down: if ( state == STATE_CRASHED ) state = STATE_NEWGAME; break; case Qt::Key_S: - saveReplay(); + if ( state == STATE_CRASHED ) + saveReplay(); break; case Qt::Key_L: - loadReplay(); + if ( state == STATE_CRASHED ) + loadReplay(); break; default: e->ignore(); break; } } } void SFCave :: displayMenu() { offscreen->fill( Qt::black ); QPainter p( offscreen ); p.setPen( Qt::white ); QFont f( "Helvetica", 16 ); p.setFont( f ); QFontMetrics fm = p.fontMetrics(); QString text = "SFCave"; p.drawText( (sWidth/2) - (fm.width( text )/2), 60, text ); text = "Written by Andy Qua"; p.drawText( (sWidth/2) - (fm.width( text )/2), 85, text ); // Draw options int pos = 170; for ( int i = 0 ; menuOptions[currentMenuNr][i] != "" ; ++i, pos += 25 ) { if ( currentMenuOption[currentMenuNr] == i ) @@ -1036,61 +1038,68 @@ void SFCave :: saveReplay() // Build up string of values // Format is:: <landscape seed> <framenr> <framenr>....... QString val; val.sprintf( "%d ", currentSeed ); 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 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 |