home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2002 June / Game.EXE_06_2002.iso / Alawar / src / Hiscore.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2002-05-06  |  1.7 KB  |  76 lines

  1. #include "Hiscore.h"
  2. #include <Converter.h>
  3. #include <AutoPtr.h>
  4. #include <Resource/ResourceManager.h>
  5.  
  6. #include <algorithm>
  7. #include <functional>
  8. #include <stdio.h>
  9.  
  10. Hiscore::Hiscore( int max_entries )
  11. :    max_entries( max_entries )
  12. {
  13.     load();
  14. }
  15.  
  16. Hiscore::~Hiscore()
  17. {}
  18.  
  19. void Hiscore::add_entry( const Hiscore::Entry & entry )
  20. {
  21.     entries.push_back( entry );
  22.     std::sort( entries.begin(), entries.end(), std::not2( std::less<Hiscore::Entry>() ) );
  23.     if( entries.size() > max_entries )
  24.         entries.resize( max_entries );
  25.  
  26.     save(); // Not in destructor
  27. }
  28.  
  29. const Hiscore::Entry & Hiscore::get_entry( int number )const
  30. {
  31.     static const Entry empty;
  32.     if( number < 0 || number >= entries.size() )
  33.         return empty;
  34.     return entries[ number ];
  35. }
  36.  
  37. int Hiscore::get_worst_score()const
  38. {
  39.     if( entries.empty() )
  40.         return 0;
  41.     return entries.back().get_score();
  42. }
  43.  
  44. void Hiscore::save()const
  45. {
  46.     FILE * fin = fopen( "hiscore.dat", "wt" );
  47.     if( !fin )
  48.         return;
  49.     for( int i = 0; i < entries.size(); ++i )
  50.         if( !entries[i].get_player_name().empty() )
  51.         {
  52.             fprintf( fin, "%d %s\n", entries[i].get_score(), entries[i].get_player_name().c_str() );
  53.         }
  54.     fclose( fin ); fin = 0;
  55. }
  56.  
  57. void Hiscore::load()
  58. {
  59.     FILE * fin = fopen( "hiscore.dat", "rt" );
  60.     if( !fin )
  61.         return;
  62.     for( int i = 0; i < max_entries; ++i )
  63.     {
  64.         int score = 0;
  65.         char name[128] = ""; // BUG 1 - Γετ∞εµφε ∩σ≡σ∩εδφσφΦσ. BUG 2 - φσ ≡αßε≥ασ≥ ± ∩≡εßσδα∞Φ Γ Φ∞σφα⌡
  66.         if( fscanf( fin, "%d %s\n", &score, name ) != 2 )
  67.             break;
  68.         if( name[0] && score )
  69.             entries.push_back( Entry( name, score ) );
  70.     }
  71.     for( ; i < max_entries; ++i )
  72.             entries.push_back( Entry() );
  73.     std::sort( entries.begin(), entries.end(), std::not2( std::less<Hiscore::Entry>() ) );
  74.     fclose( fin ); fin = 0;
  75. }
  76.