zoukankan      html  css  js  c++  java
  • 再战中原之数据表设计及在程序中的运用

    Player(玩家)
    ID int 玩家标识
    monarchID int 君主(武将ID)
    order int 军令
    color uint 颜色
    Castle(城池)
    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坐标
    General(武将)
    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 头像路径
    Equip(装备)
    ID int 装备标识
    name String 名称
    type int   类型(1-剑|2-刀|3-矛|4-防具)
    price int 价格
    value int 攻击或防御值
    weight int 重量
    condition int 购买条件(0-任何人|1-武90|2-德90|武将ID)
    Fun(功能)
    ID int 功能标识,填装备店、学校、医馆或商行的ID
    type String  类型,指定是哪种功能店,为了程序方便,这里直接填表名 
    EquipShop(装备店)
    ID int 装备店标识
    swdList String 剑列表(装备ID)
    bswList String 刀列表(装备ID)
    sprList String 矛列表(装备ID)
    armList String 防具列表(装备ID)
     School(学校)
     ID int  学校标识 
    Hospital(医馆)
    ID int 医馆标识
    price int 价格
    recover int 恢复体力值
    Firm(商行)
    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、武将出生时间地点和死亡时间配置表

  • 相关阅读:
    node的二进制权限比对设计
    如何获取和杀死node中子进程的pid,以及系统上的小坑
    node express框架下接收、发送和解析iso-8869-1编码
    node.js 小端十六进制的十进制互转以及十六进制大小端转换
    node加密rsa公钥和python解密私钥的问题
    html-pdf在centos上安装报错
    node.js 的knex 连接数据库表情编码问题
    node.js怎么调用lua脚本操作redis
    mongodb查询非空数组
    位运算
  • 原文地址:https://www.cnblogs.com/wldragon/p/3355132.html
Copyright © 2011-2022 走看看