再战中原之数据表设计及在程序中的运用
ID | int | 玩家标识 |
monarchID | int | 君主(武将ID) |
order | int | 军令 |
color | uint | 颜色 |
ID | int | 城池标识 |
name | String | 城池名称 |
playerID | int | 玩家标识(城池归属于哪个势力,为0则是空城) |
captainID | int | 太守标识(武将ID) |
gold | int | 金 |
rice | int | 米 |
treasure | int | 宝 |
soil | int | 土地值 |
industry | int | 产业值 |
population | int | 人口 |
disaster | int | 防灾值 |
rule | int | 统治度 |
reservist | int | 后备后数量 |
funList | String | 功能列表(武器店|学校|医馆|市场) |
genList | String | 武将列表(武将ID) |
conList | String | 连通列表(城池ID) |
x | int | 在地图上的X坐标 |
y | int | 在地图上的Y坐标 |
ID | int | 武将标识 |
name | String | 名称 |
strength | int | 体力 |
power | int | 武力 |
knowledge | int | 知识 |
loyalty | int | 忠诚度 |
morality | int | 品德 |
exp | int | 经验 |
soliders | int | 士兵数 |
weaponID | int | 武器ID(装备ID) |
armorID | int | 防具ID(装备ID) |
armyType | int | 军种(1-山|2-水|3-平原) |
status | int | 状态(0-在野|1-出仕) |
imgUrl | String | 头像路径 |
ID | int | 装备标识 |
name | String | 名称 |
type | int | 类型(1-剑|2-刀|3-矛|4-防具) |
price | int | 价格 |
value | int | 攻击或防御值 |
weight | int | 重量 |
condition | int | 购买条件(0-任何人|1-武90|2-德90|武将ID) |
ID | int | 功能标识,填装备店、学校、医馆或商行的ID |
type | String | 类型,指定是哪种功能店,为了程序方便,这里直接填表名 |
ID | int | 装备店标识 |
swdList | String | 剑列表(装备ID) |
bswList | String | 刀列表(装备ID) |
sprList | String | 矛列表(装备ID) |
armList | String | 防具列表(装备ID) |
ID | int | 学校标识 |
ID | int | 医馆标识 |
price | int | 价格 |
recover | int | 恢复体力值 |
ID | int | 商行标识 |
buyRate | int | 一百两金对应多少石米 |
sellRate | int | 一百石米对应多少两金 |
以上是游戏的数据库设计,不过没有遵循SQL的数据库设计范式。因为如果表之间存在1对n联系的话还要再增加关联表,这样增加了维护的工作量。
1、数据的使用方法是在Excel里填数据,然后使用自己写的工具通过Excel表生成一个自定义格式的数据文件和一个使用AS3语言的VO类。游戏初始化的时候按数据文件的数据实例对应的VO类。这样可以实现数据的强类型,方便编程。
2、每一个表都在程序中用一个字典储存,字典的键对应ID。
3、对于存在1:n关系的关联表,VO类保持与其相关的实例引用,而不是ID(个人认为保持引用的开销应该比int类型要小)。例如,城池表有将军列表,这里的genList为String类型,填值的格式为General|10001,10002,10003,这样在程序初始化时将该字段解析为Vector类型,并存储id为10001,10002和10003的General类型实例。所以基础表要先初始化,提供实例给依赖他的对象。对于保存对象引用的做法可能会造成意想不到的问题,比如我要持久化一个对象到本地,但并不需要他引用的对象,这样就会添加额外的开销。保存ID的话相对比较灵活,而且从自定义数据中解析成VO也不需要复杂的处理。
4、玩家进行游戏的时候会修改VO里面的数据,这些会被修改的VO实例统一组合到一个全局类。保存游戏进度时将该全局类转为ByteArray对象,压缩保存到本地。下次游戏开始时则读取该数据还原。
以上的数据表是游戏的基础,根据霸王大陆的游戏规则还有很多配置表或计算公式,如下是其中一部分,在开发到相关模块时再进行处理:
1、每回合分配行动力按武将数量及带兵数配置表(最小最大值,上一回合有剩行动力可累加到下一回合)
2、计谋消耗行动力配置表
3、战术消耗战术值配置表
4、按等级和武力兵种数量分配配置表
5、不同军种在不同地形上按士兵数量消耗行动力配置表
6、拥有城池数量可获得军令数量配置表
7、升级需要经验配置表
8、升级时按原武力确定提升武力值配置表
9、读书提升智力的上限
10、读书按智力确定费用和提升知点数配置表(在学校表里)
11、按知领悟计谋配置表
12、按条件(知,武,忠)确定计谋成功率和伤害值配置表
13、情报收集按德和知出现的情报结果配置表
14、单挑时牵制、攻击和拼命的概率配置表
15、按武将数量和带兵数量消耗粮食量的计算公式
16、单挑剑、刀、矛相克,其对应成功概率配置表
17、四月收金、五月收粮发生天灾暴动等按开发度和统治度的计算公式
18、武将出生时间地点和死亡时间配置表