unit UScores;
interface
uses USongs;
procedure ReadScore(var Song: TSong);
procedure WriteScore(var Song: TSong);
procedure AddScore(var Song: TSong; Level: integer; Name: string; Score: integer);
implementation
uses IniFiles, SysUtils;
procedure ReadScore(var Song: TSong);
var
F: TIniFile;
S: string;
P: integer;
Lev: integer;
LevS: string;
begin
F := TIniFile.Create(Song.Path + ChangeFileExt(Song.FileName, '.sco'));
for Lev := 0 to 2 do begin
case Lev of
0: LevS := 'Easy';
1: LevS := 'Normal';
2: LevS := 'Hard';
end;
P := 1;
S := F.ReadString(LevS + IntToStr(P), 'Name', '');
while (S <> '') and (P<=5) do begin
SetLength(Song.Score[Lev], P);
Song.Score[Lev, P-1].Name := S;
Song.Score[Lev, P-1].Score := F.ReadInteger(LevS + IntToStr(P), 'Score', 0);
Inc(P);
S := F.ReadString(LevS + IntToStr(P), 'Name', '');
end;
end;
end;
procedure AddScore(var Song: TSong; Level: integer; Name: string; Score: integer);
var
S: integer;
S2: integer;
begin
S := 0;
while (S <= High(Song.Score[Level])) and (Score <= Song.Score[Level, S].Score) do
Inc(S);
// S has the number for new score
// we create new score
SetLength(Song.Score[Level], Length(Song.Score[Level]) + 1);
// we move down old scores
for S2 := High(Song.Score[Level])-1 downto S do
Song.Score[Level, S2+1] := Song.Score[Level, S2];
// we fill new score
Song.Score[Level, S].Name := Name;
Song.Score[Level, S].Score := Score;
if Length(Song.Score[Level]) > 5 then begin
SetLength(Song.Score[Level], 5);
end;
end;
procedure WriteScore(var Song: TSong);
var
F: TIniFile;
S: integer;
Lev: integer;
LevS: string;
FileName: string;
begin
FileName := Song.Path + ChangeFileExt(Song.FileName, '.sco');
if (not FileExists(FileName)) or (FileExists(FileName) and DeleteFile(FileName)) then begin
// file has been deleted -> creating new file
F := TIniFile.Create(FileName);
for Lev := 0 to 2 do begin
case Lev of
0: LevS := 'Easy';
1: LevS := 'Normal';
2: LevS := 'Hard';
end;
for S := 0 to high(Song.Score[Lev]) do begin
F.WriteString(LevS + IntToStr(S+1), 'Name', Song.Score[Lev, S].Name);
F.WriteInteger(LevS + IntToStr(S+1), 'Score', Song.Score[Lev, S].Score);
end; // for S
end; // for Lev
F.Free;
end; // if
end;
end.