📄 itemdata.cpp
字号:
// ItemData.cpp: implementation of the CItemData class.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "ItemData.h"
//---------------------------------------------------------------------
CItemData::CItemData()
{
m_dwRecordAmount = 0;
m_pIDIndex = NULL;
m_fp = NULL;
char szFilename[]="ini/itemtype.dat";
m_fp = fopen(szFilename, "rb");
MYASSERT(m_fp);
this->CreateIndexTable();
}
//---------------------------------------------------------------------
CItemData::~CItemData()
{
delete[] m_pIDIndex;
fclose(m_fp);
}
//---------------------------------------------------------------------
BOOL CItemData::CreateIndexTable()
{
// 创建索引表
// 取记录条数
fread(&m_dwRecordAmount, sizeof(DWORD), 1, m_fp);
// 为ID索引表分配内存
m_pIDIndex = new OBJID[m_dwRecordAmount];
MYASSERT(m_pIDIndex);
// 读取ID索引
fread(m_pIDIndex, sizeof(OBJID), m_dwRecordAmount, m_fp);
return true;
}
//---------------------------------------------------------------------
BOOL CItemData::GetItemTypeInfo(OBJID idType, ItemTypeInfo& infoItemType)
{
if(!m_pIDIndex)
return false;
// 初始化定位信息 -1 为没有找到
int nLocate = -1;
// 查找索引表, 当ItemType表超过300时考虑做多级索引
for(DWORD i = 0; i < m_dwRecordAmount; i++)
{
OBJID* pObjID = m_pIDIndex + i;
if(*pObjID == idType)
{
nLocate = i;
}
}
// 看看索引表中有没有
if(nLocate < 0)
return false;
// 定位文件指针
DWORD dwOffset = sizeof(DWORD) +
sizeof(OBJID) * m_dwRecordAmount +
sizeof(ItemTypeInfo) * nLocate;
fseek(m_fp, dwOffset, SEEK_SET);
// 读记录
fread(&infoItemType, sizeof(ItemTypeInfo), 1, m_fp);
return true;
}
//---------------------------------------------------------------------
void CItemData::Covert()
{
char szFilename[]="ini/itemtype.dat";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -