lovezhangchuangxin / star-angry

星怒,一款多人星际竞技游戏
http://star-angry.mofengfeng.com/
7 stars 4 forks source link

对于数据库结构和建筑配置, 还有飞行收益计算的一些想法 (仅供参考) #10

Open Jason-2070 opened 6 days ago

Jason-2070 commented 6 days ago

仅供参考(在每个玩家都只有一个星球的大前提下)

数据库结构

{
users: {
id: {
// 账号密码等等
credit: {
xingnu_coin: number // 星怒币 XNC
money: number // 金钱
}
}
}
userData: {
id: {
planet: {
// 文明等级
civilization: number
// 飞行速度
speed: number
// 当前坐标
position: {
x: number
y: number
// z: number
}
// 目的坐标
target_position: {
x: number
y: number
// z: number
}
}
// 电力相关
electric: {
product: number
used: number
remain: number
}
building: {
metal_mine: {
level: number
product_speed: {
production: {
metal: number
}
consumption: {}
}
electric: {
product: number
used: number
}
status: number // 可以手动开关, 停用省电
}
energy_mine: {
level: number
product_speed: {
production: {
energy: number
}
consumption: {}
}
electric: {
product: number
used: number
}
status: number
}
deuterium_sintetizer: {
level: number
product_speed: {
production: {
deuterium: number
}
consumption: {}
}
electric: {
product: number
used: number
}
status: number
}
solar_plant: {
level: number
product_speed: {
production: {}
consumption: {}
}
electric: {
product: number
used: number
}
status: number
}
fusion_plant: {
level: number
product_speed: {
production: {}
consumption: {
deuterium: number
}
}
electric: {
product: number
used: number
}
status: number
}
metal_storage: {
level: number
}
energy_storage: {
level: number
}
deuterium_storage: {
level: number
}
}
// 存量资源
resources: {
metal: {
store: 'metal_store'
amount: number
}
energy: {
store: 'energy_store'
amount: number
}
deuterium: {
store: 'deuterium_store'
amount: number
}
}
// 仓库
storage: {
metal_store: number
energy_store: number
deuterium_store: number
}
}
}
}

关闭状态的建筑 产物对应仓库满了 消耗物对应资源不足 需要后端每 tick 计算完, 修改对应的 product_speed / electric 数值, 前端直接展示 升级消耗可以前端计算展示

建筑配置 相同类型的建筑有完全一致的结构

// buildingConfig
building: {
// 生产类型的建筑
metal_mine: {
name: '金属矿厂'
desc: '挖掘金属矿资源'
type: 'prod'
product: {
production: {
metal: 'Math.flood((30 * level * Math.pow(1.1, level)) * (0.1 * 11))'
}
consumption: {}
}
electric: {
power_used: 'Math.flood((10 * level * Math.pow(1.1, level)) * (0.1 * 11))'
power_product: null
}
upgrade: {
max_level: 255
unlock: {}
cost: {
metal: 'Math.floor(60 * Math.pow(1.5, level))'
energy: 'Math.floor(15 * Math.pow(1.5, level))'
}
}
}
energy_mine: {
//...
}
deuterium_sintetizer: {
//...
}
solar_plant: {
name: 'xxx'
desc: 'xxxxxx'
type: 'prod'
product: {
production: {}
consumption: {}
}
electric: {
power_used: null
power_product: 'Math.flood((20 * level * Math.pow((1.1), level)) * (0.1 * 11))'
}
upgrade: {
// ...
}
}
fusion_plant: {
name: 'xxx'
desc: 'xxxxxx'
type: 'prod'
product: {
production: {}
consumption: {
deuterium: 'Math.ceil(10 * level * Math.pow(1.1, level) * (0.1 * 11))'
}
}
electric: {
power_used: null
power_product: 'Math.floor(30 * level * Math.pow(1.05, level) * (0.1 * 11)) * 100'
}
upgrade: {
max_level: 255
unlock: {
// 前置解锁要求 20级 太阳能
solar_plant: 20
}
cost: {
//...
}
// 需不需要升级时间, 需要的话要怎么存储计算
}
}
// 存储类型的建筑
metal_storage: {
name: '金属仓库'
desc: '存储金属矿资源'
type: 'storage'
storage_name: 'metal_store'
storage_limit: 'Math.floor(2.5 * Math.pow(1.8331954764, level)) * 5000 * 1000' // 升级时更新一次 metal_store 数值就行了
upgrade: {
max_level: 255
unlock: {}
cost: {
metal: 'Math.floor(2000 * Math.pow(2, level))'
}
}
}
energy_storage: {
// ...
}
deuterium_storage: {
// ...
}
}

后续逻辑

先遍历一遍 prod 类型的建筑 计算 [power_product 总量] 和计算 [ power_used 总量] (排除掉 status 关闭状态, 产物对应 store 爆满, 消耗物不足的建筑) 根据上面数值计算剩余电量 再遍历一遍可用 prod 建筑进行生产 (剩余电量不足时削减产量)

行星发动机数量划分行星文明等级, 文明等级和行星发动机数量计算飞行速度基值 电量盈余的情况下, 根据飞行速度基值和盈余电量计算当前飞行速度, 移动行星坐标, 计算飞行获得的星怒币数量 电量亏空不进行移动, 无任何收益

玩家手动设置行星移动目标

Jason-2070 commented 6 days ago

利益冲突一般是星怒币

玩家日常飞行可以获得极少量星怒币 星怒矿区无需飞行可以获得大量星怒币

星怒矿区外是安全区, 玩家不能发起pk, 或者可以模拟pk但是不会产生任何收益和损失 (有能力可以再加个红名设定)

星系中随机出现星怒矿区(倒计时后消失), 可以同时存在多个星怒矿区(不同富饶度)

某个星怒矿区边界最多可以进出n次(假设5次, 或者直接1次), 超过次数就不能再进去了, 防止追逐的时候反复横跳

在星怒矿区里挖星怒币的时候. 可以相互追逐, 追到就算数值pk一下, 输的给他虫洞随机传走.

例如某个玩家守着一个区, 可以原地静止挖币, 和其他玩家和平共处 也可以去追其他玩家pk(仅限矿区内, 跑出去多次可能回不来了), pk完就算一下双方攻守体量, 原地落下星怒币 (攻守体量算出来, 大玩家欺负小玩家只会掉一点点).

玩家自己平衡好盈余电量提供飞行速度来互相追逐

出个道具可以在矿区内开安全模式 (x

Jason-2070 commented 6 days ago

星怒币映射现实中btc 金钱映射现实中货币

平台坐庄的币钱交易, 不是玩家之间币钱交易 因为要绑定btc价值波动,只能平台坐庄,你卖多少币,平台就给你多少金钱 (看市场行情卖,全卖的金钱多,排行上去了,但是别人屯着币的可能因为btc突然大涨,隐形财富更高)

首富榜以金钱排,按期结算排名,奖励不同数额星怒币 (比特币有涨跌行情,所以玩家不可能全部币都换成钱,会有个买和卖过程,币和钱有个动态变化,所以在这里排行也是一直变动的)

当玩家非常多的时候, 发币速度会很快 平台需要设计一些金钱回收规则, 防止全平台金钱数额过度膨胀 (目的是维持全平台金钱总额不会大量超发) 例如: