⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 highscores.cpp

📁 RGA: Biowaste Game Example This C++ application demonstrates how to create a 2D mobile game for S60
💻 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 + -