File: ScoreKeeper.hpp

package info (click to toggle)
criticalmass 1%3A1.0.0-1.5
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 18,740 kB
  • sloc: ansic: 47,628; cpp: 25,167; sh: 12,025; xml: 3,532; perl: 3,271; makefile: 662; python: 66; awk: 40; lisp: 33
file content (110 lines) | stat: -rw-r--r-- 2,192 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Description:
//   Score keeper.
//
// Copyright (C) 2001 Frank Becker
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation;  either version 2 of the License,  or (at your option) any  later
// version.
//
// This program is distributed in the hope that it will be useful,  but  WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
//
#ifndef _ScoreKeeper_hpp_
#define _ScoreKeeper_hpp_

#include <string>
#include <vector>

#include <time.h>

#include <Singleton.hpp>

using namespace std;

struct ScoreData
{
    int score;
    string name;
    time_t time;
    int goodiesCaught;
    int goodiesMissed;
};

inline bool operator< (const ScoreData &s1, const ScoreData &s2)
{
    // ">" since we want highscore first
    return s1.score > s2.score;
}

class ScoreKeeper
{
friend class Singleton<ScoreKeeper>;
public:
    ~ScoreKeeper();
    ScoreKeeper( void);

    int getCurrentScore( void)
    {
	return _leaderBoard[_currentIndex].score;
    }

    void resetCurrentScore( void);

    int addToCurrentScore( int value);

    void incGoodiesCaught( void);
    void incGoodiesMissed( void);

    int getScore( unsigned int index)
    {
	if( index < _leaderBoard.size())
	{
	    return _leaderBoard[ index].score;
	}

	return 0;
    }

    const string getInfoText( unsigned int index);

    int getHighScore( void)
    {
	return _leaderBoard[0].score;
    }

    int boardSize( void)
    {
	return (int)_leaderBoard.size();
    }

    bool currentIsTopTen( void)
    {
	return  _currentIndex < 10;
    }

    void setName( const string &name)
    {
	_leaderBoard[_currentIndex].name = name;
    }

    void load( void);
    void save( void);
    void draw( void);

private:
    ScoreKeeper( const ScoreKeeper&);
    ScoreKeeper &operator=(const ScoreKeeper&);

    void updateLeaderBoard( void);
    void dump( void);

    unsigned int _currentIndex;
    vector<ScoreData> _leaderBoard;
};

typedef Singleton<ScoreKeeper> ScoreKeeperS;

#endif