home *** CD-ROM | disk | FTP | other *** search
- #include "Hiscore.h"
- #include <Converter.h>
- #include <AutoPtr.h>
- #include <Resource/ResourceManager.h>
-
- #include <algorithm>
- #include <functional>
- #include <stdio.h>
-
- Hiscore::Hiscore( int max_entries )
- : max_entries( max_entries )
- {
- load();
- }
-
- Hiscore::~Hiscore()
- {}
-
- void Hiscore::add_entry( const Hiscore::Entry & entry )
- {
- entries.push_back( entry );
- std::sort( entries.begin(), entries.end(), std::not2( std::less<Hiscore::Entry>() ) );
- if( entries.size() > max_entries )
- entries.resize( max_entries );
-
- save(); // Not in destructor
- }
-
- const Hiscore::Entry & Hiscore::get_entry( int number )const
- {
- static const Entry empty;
- if( number < 0 || number >= entries.size() )
- return empty;
- return entries[ number ];
- }
-
- int Hiscore::get_worst_score()const
- {
- if( entries.empty() )
- return 0;
- return entries.back().get_score();
- }
-
- void Hiscore::save()const
- {
- FILE * fin = fopen( "hiscore.dat", "wt" );
- if( !fin )
- return;
- for( int i = 0; i < entries.size(); ++i )
- if( !entries[i].get_player_name().empty() )
- {
- fprintf( fin, "%d %s\n", entries[i].get_score(), entries[i].get_player_name().c_str() );
- }
- fclose( fin ); fin = 0;
- }
-
- void Hiscore::load()
- {
- FILE * fin = fopen( "hiscore.dat", "rt" );
- if( !fin )
- return;
- for( int i = 0; i < max_entries; ++i )
- {
- int score = 0;
- char name[128] = ""; // BUG 1 - Γετ∞εµφε ∩σ≡σ∩εδφσφΦσ. BUG 2 - φσ ≡αßε≥ασ≥ ± ∩≡εßσδα∞Φ Γ Φ∞σφα⌡
- if( fscanf( fin, "%d %s\n", &score, name ) != 2 )
- break;
- if( name[0] && score )
- entries.push_back( Entry( name, score ) );
- }
- for( ; i < max_entries; ++i )
- entries.push_back( Entry() );
- std::sort( entries.begin(), entries.end(), std::not2( std::less<Hiscore::Entry>() ) );
- fclose( fin ); fin = 0;
- }
-