📄 highscoremodel.cpp
字号:
// HighScoreModel.cpp: implementation of the CHighScoreModel class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FivePlus.h"
#include "HighScoreModel.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_SERIAL( CHighScoreModel, CObject, 1 )
CHighScoreModel::CHighScoreModel(int nMaxSize)
{
m_nMaxSize = nMaxSize;
}
CHighScoreModel::~CHighScoreModel()
{
while ( !m_lstScoreRecord.IsEmpty() ) {
CScoreRecord* pScoreRecord = m_lstScoreRecord.RemoveHead();
delete pScoreRecord;
}
}
void CHighScoreModel::Serialize(CArchive &ar)
{
int count = m_lstScoreRecord.GetCount();
if (ar.IsStoring())
{
ar << count;
POSITION pos = m_lstScoreRecord.GetHeadPosition();
while ( pos ){
CScoreRecord* pScoreRecord = m_lstScoreRecord.GetNext(pos);
pScoreRecord->Serialize(ar);
}
}
else
{
ar >> count;
for ( int i = 0; i < count; i++ ){
CScoreRecord* pScoreRecord = new CScoreRecord;
pScoreRecord->Serialize(ar);
m_lstScoreRecord.AddTail(pScoreRecord);
}
}
}
BOOL CHighScoreModel::UpBoard(CScoreRecord* scoreRecord)
{
POSITION pos = m_lstScoreRecord.GetTailPosition();
BOOL bEnd = FALSE;
while ( pos && (!bEnd)){
CScoreRecord* pScoreRecord = m_lstScoreRecord.GetPrev(pos);
if (scoreRecord->m_nScore <= pScoreRecord->m_nScore){
bEnd = TRUE;
}
}
if ( pos ){
m_lstScoreRecord.GetNext(pos);
m_lstScoreRecord.InsertAfter(pos, scoreRecord);
}
else
m_lstScoreRecord.AddHead(scoreRecord);
if ( m_lstScoreRecord.GetCount() > m_nMaxSize )
delete m_lstScoreRecord.RemoveTail();
return TRUE;
}
BOOL CHighScoreModel::CanUpBoard(int score)
{
if ( m_lstScoreRecord.GetCount() < 9 ){
return ( score > 0 );
}else{
CScoreRecord* pScoreRecord = m_lstScoreRecord.GetTail();
if ( score > pScoreRecord->m_nScore )
return TRUE;
return FALSE;
}
}
CString CHighScoreModel::GetString()
{
POSITION pos = m_lstScoreRecord.GetHeadPosition();
char buffer[1024];
int j = 0;
int count = 0;
while ( pos ){
count++;
CScoreRecord* pScoreRecord = m_lstScoreRecord.GetNext(pos);
j += sprintf(buffer + j, "%d", count);
j += sprintf(buffer + j, "%6d ", pScoreRecord->m_nScore);
j += sprintf(buffer + j, "%s", pScoreRecord->m_szName);
if ( pos )
j += sprintf(buffer + j, "%s", "\n");
}
j += sprintf(buffer + j, "%s", "\0");
return buffer;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -