在单机游戏中有几十个场景道具,每一个都有各自的状态(获得、未获得、获得个数)等等,如果在游戏中平凡涉及到这些道具的实时存储,那么使用文本就会稍慢、可以使用sqlite数据库来完成。
#include "sqlite/sqlite3.h"
m_pDb = NULL; //sqlite3 *m_pDb;
string path = "infordata.db"; //创建的txt文本,随便改个后缀名
#if CC_TARGET_PLATFORM != CC_PLATFORM_WIN32
path = CCFileUtils::sharedFileUtils()->getWritablePath()+"infordata.db";
#endif
CCString sql;
int result;
result = sqlite3_open(path.c_str(),&m_pDb);
if(result != SQLITE_OK)
{
CCLog("open database failed,number%d",result);
m_pDb = NULL;
return;
}
// help map
sql = "CREATE TABLE help_map(ID INTEGER PRIMARY KEY,count INTEGER DEFAULT 0)";
result = sqlite3_exec(m_pDb,sql.getCString(),NULL,NULL);
if(result != SQLITE_OK)
CCLog("create table failed");
for (int i=0; i<100; ++i)
{
sql.initWithFormat("insert into help_map values(%d,0)",i+1);
result = sqlite3_exec(m_pDb,NULL);
if(result != SQLITE_OK)
CCLog("insert data failed!");
}
// special tool
sql = "CREATE TABLE special_tool(ID INTEGER PRIMARY KEY,state INTEGER DEFAULT 0,NULL);
if(result != SQLITE_OK)
CCLog("create table failed");
for (int i=0; i<20; ++i)
{
sql.initWithFormat("insert into special_tool values(%d,NULL);
if(result != SQLITE_OK)
CCLog("insert data failed!");
}
//select
char **re;
int r,c;
{
//第3个参数是查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。
//它内存布局是:第一行是字段名称,后面是紧接着是每个字段的值
// col个数据之后才是表数据,之前的是列名字
result = sqlite3_get_table(m_pDb,"select * from help_map",&re,&r,&c,NULL);
CCLog("help_map: row is %d,column is %d",r,c);
m_helpMap.clear();
for (int i=0; i< 100; ++i)
{
CCLog("row %d ---> id = %s,count = %s",i+1,re[c + i*c],re[c + i*c +1]);
int val = CCString(re[c + i*c +1]).intValue();
m_helpMap.push_back(val);
}
sqlite3_free_table(re);
}
{
result = sqlite3_get_table(m_pDb,"select * from special_tool",NULL);
CCLog("special_tool row is %d,c);
m_specialItemState.clear();
m_specialItem.clear();
for (int i=0; i< 20; ++i)
{
CCLog("row %d ---> id = %s,state = %s,re[c + i*c +1],re[c + i*c + 2]);
int val = CCString(re[c + i*c +1]).intValue();
m_specialItemState.push_back(val);
val = CCString(re[c + i*c +2]).intValue();
m_specialItem.push_back(val);
}
sqlite3_free_table(re);
}
data.db(创建的数据库文件)里面插入数据后,想看一下有些什么数据、或者策划人员负责维护里面的数据表,可以下载sqlite database browser,一个非常不错的浏览sqlite数据库的工具。