设计说明书Invisible War基于地图定位的场景交互游戏(iOS)目录第1章 数据库设计 (4)1.1 数据库总体设计 (4)1.2 数据库结构设计 (4)第2章 接口设计 (9)2.1 接口数据交换格式 (9)2.2 基于HTTP的网络请求 (9)2.3 相关接口设计 (9)2.3.1注册接口 (9)2.3.1登录陆口 (10)2.3.3获取塔信息接口 (11)2.3.4使用步数换取能量接口 (13)2.3.5获取日志信息接口 (13)第3章 服务开发运行环境 (15)3.1 接口运行环境 (15)3.2 接口发布环境 (15)第4章 系统设计 (16)4.1 系统的总体设计 (16)4.1.1 模型(Model) (16)4.1.2 视图(View) (16)4.1.3 控制器(Controller) (17)4.2 底层模块设计 (17)4.2.1网络请求模块封装设计 (17)4.2.2 全局单例模式设计 (17)4.3 注册登录模块设计 (18)4.3.1 功能描述 (18)4.3.2 逻辑设计 (18)4.4 地图定位模块设计 (19)4.4.1 功能描述 (19)4.4.2 逻辑设计 (19)4.5 能量工厂模块设计 (20)4.5.1 功能描述 (20)4.5.2 逻辑设计 (20)4.6 攻击/加固模块设计 (20)4.6.1 功能描述 (20)4.6.2 逻辑设计 (20)4.7 放置模块设计 (21)4.7.1 功能描述 (21)4.7.2 逻辑设计 (21)4.8 背包模块设计 (22)4.8.1 功能描述 (22)4.8.2 逻辑设计 (22)4.9 个人模块设计 (22)4.9.1 功能描述 (22)4.9.2 逻辑设计 (22)第1章数据库设计1.1 数据库总体设计以下是数据库总体设计的ER图,图中包括了数据库设计中所有的关系,以及所有需要的属性以及实体。
图 1 IW数据库总体ER图1.2 数据库结构设计以下是数据库结构设计:表1-1 游戏用户表(iw_users)字段名 字段描述 类型 约束 示例uid 用户的 UID int(11) PK 1user_name 用户名 varchar(255) NN 用户名user_power 用户总能力值 int(8) NN 1000user_powernow 用户当前能力值 int(8) NN 500device_code 设备码,唯一标识 varchar(255) NN 20150555 avatar_file 头像文件 varchar(128) NN touxiang.png step_num 用户当前行走步数 int(8) NN 100update_time 最新更新步数时间 datetime NN 2016-04-1000:00:00reg_time 注册时间 datetime NN 2016-04-1000:00:00last_login 最后登录时间 datetime NN 2016-04-1000:00:00 forbidden 是否禁止用户 tinyint(1) NN 0belong_group 用户阵营 tinyint(1) NN 0表1-2 宝塔表(iw_pagoda)字段名 字段描述 类型 约束 示例pid 宝塔的ID int(11) PK 1pname 塔名称 varchar(255) NN 名称uid 占领用户 int(11) NN FK 1longitude 经度 double(32,24) NN 34.1111 latitude 纬度 double(32,24) NN 117.1111 pphoto 宝塔图标 varchar(128) NN baota.png belong_group 所属阵营 tinyint(1) NN 0pintro 宝塔描述 text NN 这是一座塔表1-3 物品总表(iw_item)字段名 字段描述 类型 约束 示例item_id 物品ID int(11) PK 1item_type_id 分类的物品ID int(11) NN 1item_type 物品类别 int(11) NN 1item_name 物品名称 varchar(255) NN 武器item_photo 物品图标 varchar(128) NN item.pngitem_quality 稀有度 int(8) NN 0item_intro 物品描述 text NN 这是一个物品表1-4 装置表(iw_package)字段名 字段描述 类型 约束 示例unitid 装置的ID int(11) PK 1item_id 物品ID int(11) NN FK 1uhp 装置血量 int(8) NN 100uatk 装置攻击力 int(8) NN 100udef 装置防御力 int(8) NN 100collect_effi 采集效率 int(8) NN 100con_energy 需要消耗的能力 int(8) NN 100lifetime 生命期 int(8) NN 100表1-5 武器表(iw_package)字段名 字段描述 类型 约束 示例wid 武器的ID int(11) PK 1item_id 物品ID int(11) NN FK 1wpower 使用需耗费能量值 int(8) NN 100watk 武器攻击力 int(8) NN 100eff_type 武器效能类型 int(8) NN 1eff_level 武器效能级别 int(8) NN 1表1-6 土地表(iw_field)字段名 字段描述 类型 约束 示例fid 武器的ID int(11) PK 1pid 所属宝塔ID int(11) NN FK 1uid 装置所属人ID int(11) NN 1unitid 所放装置的ID int(11) NN 1set_time 放置时间 datetime NN 2016-04-1000:00:00fhp 所剩血量 int(8) NN 100fatk 土地的攻击力 int(8) NN 100fdef 土地的防御力 int(8) NN 100collect_effi 采集效率 int(8) NN 100expire_time 到期时间 datetime NN 2016-04-1000:00:00 fnumber 土地编号 int(8) NN 1fintro 土地描述 text 这是一块土地表1-7 宝塔掠夺日志表(iw_pagoda_log)字段名 字段描述 类型 约束 示例id 日志ID int(11) PK 1uid 用户ID int(11) NN FK 1pid 宝塔 ID int(11) NN FK 1content 日志内容 varchar(256) NN 攻击了这座塔 msg_type 日志分类 tinyint(1) NN 1add_time 发布时间 datetime NN 2016-04-1000:00:00表1-8 用户物品关联表(iw_users_item)字段名 字段描述 类型 约束 示例id 关联ID int(11) PK 1uid 用户ID int(11) NN FK 1item_id 物品ID int(11) NN FK 1item_type 物品类别 tinyint(1) NN 1item_num 物品数量 int(8) NN 1表1-9 宝塔掠夺日志表(iw_users_pagoda)字段名 字段描述 类型 约束 示例id 日志ID int(11) PK 1uid 用户ID int(11) NN FK 1pid 宝塔 ID int(11) NN FK 1rob_time 上一次掠夺时间 datetime NN 2016-04-1000:00:00表1-10 用户状态表(iw_users_status)字段名 字段描述 类型 约束 示例id 状态的ID int(11) PK 1uid 用户ID int(11) NN FK 1content 状态内容 varchar(256) NN 啊哈 longitude 经度 double(32,24) NN 34.1111 latitude 纬度 double(32,24) NN 117.1111 rob_time 发布时间 datetime NN 2016-04-1000:00:00 flag 状态查看权限 tinyint(1) NN 1表1-11 能量包表(iw_energy)字段名 字段描述 类型 约束 示例 eid 能量包的ID int(11) PK 1 item_id 物品ID int(11) NN FK 1 epower 能量值 int(8) NN 1表1-12 包裹表(iw_package)字段名 字段描述 类型 约束 示例 pgid 包裹的ID int(11) PK 1 item_id 物品ID int(11) NN FK 1第2章接口设计2.1 接口数据交换格式接口采用轻量级的JSON作为数据交换格式。
JSON 是一种轻量级的数据交换格式,采用了类似于 C 语言家族的习惯(如 C,C++,Java 等),但是本身是一种独立于语言之外的文本格式,既便于开发者阅读和编写,同时也易于机器解析和生成。
本系统在与服务器交换过程便是采用这种类型的数据,在部分本地数据的存储和应用上提供类似的构造和解析操作接口,并且在部分存储过程,也直接采用 JSON 格式写入数据库。
2.2 基于HTTP的网络请求客户端集成了HttpClient,可以直接使用HttpClient来发送HTTP请求,其实质就是把HTTP请求模拟后发给服务器。
Http连接请求包括Post方法和Get方法,Get方法获取网络服务链接数据的一般步骤如下:1. 构造HttpClient对象,管理请求。
2. 构造HttpGet对象,向服务器发起请求。
3. 发起请求,获得HttpResponse对象,从中读取数据。
Post请求的构造相较于Get要复杂一些,需要将应用提交至服务器的数据打包放入请求对象中,比如表单数据可以通过UrlEncodedFormEntity对象构造,二进制数据可以通过ByteArrayEntity对象封装。
一般情况下,DefaultHttpClient对象是线程非安全的,不能在多个线程中同时调用DefaultHttpClient对象的方法,要保证HttpClient的线程安全性,可以设置线程安全的管理对象或者选择使用AndroidHttpClient对象来替代DefaultHttpClient。
2.3 相关接口设计根据系统需要,我们总共设计了14个接口,包括注册接口、登录接口、使用步数换取能量接口、获取塔信息接口、获取用户物品背包接口、使用武器接口、获取日志接口等。