在单机游戏中有几十个场景道具,每一个都有各自的状态(获得、未获得、获得个数)等等,如果在游戏中平凡涉及到这些道具的实时存储,那么使用文本就会稍慢、可以使用sqlite数据库来完成。

下载地址:http://www.sqlite.org/download.html

下载后,在项目中导入sqlite3.c和sqlite3.h两个文件即可。

附上使用代码:(如果表不存在,创建两个表、存储两种道具,再获取两个表中的数据)

        #include "sqlite/sqlite3.h"
      m_pDb = NULL; //sqlite3 *m_pDb; string path = "infor\\data.db"; //创建的txt文本,随便改个后缀名
#if CC_TARGET_PLATFORM != CC_PLATFORM_WIN32
path = CCFileUtils::sharedFileUtils()->getWritablePath()+"infor\\data.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,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,sql.getCString(),NULL,NULL,NULL);
if(result != SQLITE_OK)
CCLog("insert data failed!");
} // special tool
sql = "CREATE TABLE special_tool(ID INTEGER PRIMARY KEY,state INTEGER DEFAULT 0,count INTEGER DEFAULT 0)";
result = sqlite3_exec(m_pDb, sql.getCString(), NULL,NULL,NULL);
if(result != SQLITE_OK)
CCLog("create table failed");
for (int i=0; i<20; ++i)
{
sql.initWithFormat("insert into special_tool values(%d, 0, 0)", i+1);
result = sqlite3_exec(m_pDb,sql.getCString(),NULL,NULL,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",&re,&r,&c,NULL);
CCLog("special_tool row is %d,column is %d",r,c); m_specialItemState.clear();
m_specialItem.clear();
for (int i=0; i< 20; ++i)
{
CCLog("row %d ---> id = %s, state = %s, count = %s", i+1, re[c + i*c], 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);
}

其实在程序中存储道具用的vector可以换成一个hash表,因为表中元素的主键是线性增长的,这样访问每个元素的时间复杂度仅o(1)。

data.db(创建的数据库文件)里面插入数据后,想看一下有些什么数据、或者策划人员负责维护里面的数据表,可以下载sqlite database browser,一个非常不错的浏览sqlite数据库的工具。

下载地址:http://sourceforge.net/projects/sqlitebrowser/

最新文章

  1. spriing boot 实战
  2. ssh 与 irc
  3. dede 简略标题调用标签
  4. Atitit 数据存储的数据表连接attilax总结
  5. JS自总结
  6. 用户列表-投资记录sql
  7. Css杂谈
  8. eclipse对项目整理分类
  9. 从date中获取相应信息
  10. gulp.watch监听文件
  11. bzoj2426
  12. BZOJ3479: [Usaco2014 Mar]Watering the Fields
  13. ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
  14. 201521123036 《Java程序设计》第7周学习总结
  15. python 小练习题做起来
  16. FastReport.Net
  17. 解压文件出错解决方法(invalid compressed data--format violated)
  18. Kali Linux 初始化配置:Apache2 /SSH /FTP
  19. bzoj2856: [ceoi2012]Printed Circuit Board
  20. 【转】Git 安装和使用教程

热门文章

  1. web服务器分析与设计(五)--一些总结
  2. Java学习笔记(3)
  3. 在Raspberry Pi上安装XBMC
  4. Codeforces Round #364 (Div.2) D:As Fast As Possible(模拟+推公式)
  5. HDU4864:Task(贪心)
  6. coco2d-x 纹理研究
  7. rsync 无密码传输文件
  8. nginx 502 错误
  9. JSF 2 textbox example
  10. HDU 5776 sum (思维题)