-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsettings.cpp
More file actions
173 lines (124 loc) · 3.78 KB
/
Copy pathsettings.cpp
File metadata and controls
173 lines (124 loc) · 3.78 KB
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <fstream>
#include <QDebug>
using namespace std;
#include "settings.h"
void Settings::setItsLeft1(int value)
{
itsLeft1 = value;
}
void Settings::setItsRight1(int value)
{
itsRight1 = value;
}
void Settings::setItsJump1(int value)
{
itsJump1 = value;
}
void Settings::setItsTimer(const QString &value)
{
itsTimer = value;
}
QString Settings::getItsTimer() const
{
return itsTimer;
}
bool Settings::getItsTutorial() const
{
return itsTutorial;
}
void Settings::setItsTutorial(bool value)
{
itsTutorial = value;
}
Settings::Settings()
{
itsJump1 = -50;
itsLeft1 = -50;
itsRight1 = -50;
}
void Settings::split(std::string strToSplit, char charSeparation, std::vector<std::string> &vecToReturn)
{
string x="";
for(int i=0; i<(int)strToSplit.size(); ++i)
{
if(strToSplit[i]!=charSeparation) x+=strToSplit[i];
else {vecToReturn.push_back(x); x="";}
}
vecToReturn.push_back(x);
}
bool Settings::isTopFive(PlayerScore &playerScore)
{
vector<string> vecScoresNames;
vector<string>vecScores;
string lineOfFile;
bool isTop=false;
ifstream inputFile(itsHallOfFameFile);
if(!inputFile) qDebug() << "Reading error";
while(!inputFile.eof()) //cre un vecteur avec une fois sur deux le score, puis le nom du joueur, avec en indices pairs les scores et en indices impairs les noms des joueurs
{ //exemple: vecScoresNames={score1, nom1, score2, nom2 etc...}
getline(inputFile, lineOfFile);
split(lineOfFile, ',', vecScoresNames);
}
inputFile.close();
for(int i=0; i<vecScoresNames.size()-1; i+=2) //cre un vecteur que de scores pour pouvoir les comparer
{
vecScores.push_back(vecScoresNames[i]);
}
playerScore.position=0;
for(int i=0; i<vecScores.size(); ++i) //recherche de la position exacte du nouveau score dans le top cinq
{
if(playerScore.score<vecScores[i]) {playerScore.position=i; break;}
else playerScore.position=vecScores.size();
}
if(vecScores.size()>=5)
{
if(playerScore.score<vecScores[4]) isTop=true;
}
else isTop=true;
return isTop;
}
void Settings::writeHallOfFameFile(PlayerScore &playerScore)
{
ofstream outputFile(itsHallOfFameFile, ios::app);
ifstream inputFile(itsHallOfFameFile);
string lineOfFile;
vector<string> vecScoresNames;
while(!inputFile.eof())
{
getline(inputFile, lineOfFile);
split(lineOfFile, ',', vecScoresNames);
}
vecScoresNames.pop_back(); //supprime le retour a la ligne automatique du fichier qui a ete pris en compte dans le vecteur
inputFile.close();
playerScore.position*=2; //multiplication par 2 car la position a ete trouve dans le vecteur de scores or maintenant nous travaillons avec un vecteur de scores avec les noms
vector<string>::iterator it=vecScoresNames.begin()+playerScore.position;
it=vecScoresNames.insert(it, playerScore.name); //insertion du nouveau score et nom a la position trouvee precedemment
vecScoresNames.insert(it, playerScore.score);
if(vecScoresNames.size()>10) //supprime les lignes de scores et de noms qui ne sont pas dans le top cinq
{
vecScoresNames.pop_back();
vecScoresNames.pop_back();
}
ofstream out(itsHallOfFameFile); //ouvre le fichier en �criture pour effacer son contenu afin d'eviter les doublons lors du re-enregistrement
for(int i=0; i<vecScoresNames.size()-1; i+=2)
{
outputFile << vecScoresNames[i] << "," << vecScoresNames[i+1] << endl;
}
outputFile.close();
}
string Settings::getItsHallOfFameFile()
{
return itsHallOfFameFile;
}
bool Settings::validLeft(int key)
{
return(itsLeft1 == key || itsLeft2 == key);
}
bool Settings::validRight(int key)
{
return(itsRight1 == key || itsRight2 == key);
}
bool Settings::validJump(int key)
{
return(itsJump1 == key || itsJump2 == key);
}