📄 highscores.cpp
字号:
#include "HighScores.h"
#include <f32file.h>
CHighScores::CHighScores() :
iLatestAddedItemIndex(KErrNotFound)
{
}
CHighScores::~CHighScores()
{
if (iFilename)
{
delete iFilename;
iFilename = NULL;
}
}
CHighScores* CHighScores::NewL(const TDesC& aFilename, TInt aMaxItems)
{
CHighScores* scores = new (ELeave)CHighScores;
CleanupStack::PushL(scores);
scores->ConstructL(aFilename, aMaxItems);
CleanupStack::Pop();
return scores;
}
void CHighScores::ConstructL(const TDesC& aFilename, TInt aMaxItems)
{
iMaxItems = aMaxItems;
iFilename = HBufC::NewL(aFilename.Length());
*iFilename = aFilename;
// fill in the default items
TInt i;
TReal score = 100.0;
for (i=0; i<iMaxItems; i++)
{
THighScoreItem item;
item.iName = _L("WasteMaster");
item.iScore = score;
iScores.AppendL(item);
if (score > 10.0)
{
score -= 10.0;
}
}
}
TInt CHighScores::Load()
{
TInt error;
RFs fs;
RFile file;
// connect to file server
error = fs.Connect();
if (error != KErrNone)
{
return error;
}
// open file for reading
error = file.Open(fs, *iFilename, EFileRead);
if (error != KErrNone)
{
fs.Close();
return error;
}
// load scores from the file
iScores.Reset();
TInt i;
for (i=0; i<iMaxItems; i++)
{
THighScoreItem item;
TPtr8 ptr((TUint8*)&item, sizeof(item), sizeof(item));
file.Read(ptr);
iScores.Append(item);
}
file.Close();
fs.Close();
return KErrNone;
}
TInt CHighScores::Save() const
{
TInt error;
RFs fs;
RFile file;
// connect to file server
error = fs.Connect();
if (error != KErrNone)
{
return error;
}
// open file for writing
error = file.Open(fs, *iFilename, EFileWrite);
if (error == KErrNotFound)
{
// file is not found, create it
error = file.Create(fs, *iFilename, EFileWrite);
}
if (error != KErrNone)
{
// failed to open or create file
fs.Close();
return error;
}
// save scores to file
TInt i;
for (i=0; i<iMaxItems; i++)
{
THighScoreItem item = iScores[i];
TPtr8 ptr((TUint8*)&item, sizeof(item), sizeof(item));
file.Write(ptr);
}
file.Close();
fs.Close();
return KErrNone;
}
TInt CHighScores::Add(const THighScoreItem& aNewScore, TBool aInsert)
{
// find right index for the new highscore
TInt i;
TInt insertedatindex = KErrNotFound;
for (i=0; i<iMaxItems; i++)
{
THighScoreItem& item = iScores[i];
if (aNewScore.iScore > item.iScore)
{
// found the slot, insert and delete the last one
insertedatindex = i;
if (aInsert)
{
iScores.Insert(aNewScore, insertedatindex);
iScores.Remove(iScores.Count() - 1);
iLatestAddedItemIndex = insertedatindex;
}
break;
}
}
return insertedatindex;
}
THighScoreItem& CHighScores::Score(TInt aIndex)
{
return iScores[aIndex];
}
TInt CHighScores::MaxItems() const
{
return iMaxItems;
}
TInt CHighScores::MaxNameLength() const
{
return iScores[0].iName.MaxLength();
}
TInt CHighScores::LatestAddedItemIndex() const
{
return iLatestAddedItemIndex;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -