O formato de arquivo de configuração permite que as inclusões de otherfiles e a herança de configurações?
-
22-07-2019 - |
Pergunta
Eu estou escrevendo um ++ jogo baseado Multiplayer C.
Eu preciso de um formato de arquivo flexível para armazenar informações sobre os charactors jogo.
Os charactors jogo, muitas vezes, não compartilham os mesmos atributos, ou usar um basew
Por exemplo:
formato de A que permita-me a fazer algo como isto:
#include "standardsettings.config"
//include other files which this file
//then changes
FastSpaceship:
Speed: 10 //pixels/sec
Rotation: 5 //deg/sec
MotherShip : FastSpaceship //inherits all the settings of the Spaceship ship
ShieldRecharge: 4
WeaponA [ power:10,
range:20,
style:fireball]
SlowMotherShip : MotherShip //inherits all the settings of the monther ship
Speed: 4 // override speed
Eu tenho procurado por um formato pré-existente que faz tudo isso, ou é semelhante, mas sem sorte. Estou ansioso para não reinventar a roda, a menos que eu tenho que, então eu queria saber se alguém sabe qualquer formatos de arquivo de configuração boa que suportam esses recursos
Solução 4
Depois de um monte de pesquisar eu encontrei uma solução muito bom usando Lua
Lua eu descobri foi originalmente concebido como uma linguagem de arquivo de configuração, mas depois evoluiu para uma linguagem de programação completa.
Exemplo
util.lua
-- helper function needed for inheritance
function inherit(t) -- return a deep copy (incudes all subtables) of the table t
local new = {} -- create a new table
local i, v = next(t, nil) -- i is an index of t, v = t[i]
while i do
if type(v)=="table" then v=inherit(v) end -- deep copy
new[i] = v
i, v = next(t, i) -- get next index
end
return new
end
globalsettings.lua
require "util"
SpaceShip = {
speed = 1,
rotation =1
}
myspaceship.lua
require "globalsettings" -- include file
FastSpaceship = inherits(SpaceShip)
FastSpaceship.Speed = 10
FastSpaceship.Rotation = 5
MotherShip = inherits(FastSpaceship)
MotherShip.ShieldRecharge = 4
ShieldRecharge.WeaponA = {
Power = 10,
Range = 20,
Style = "fireball"
SlowMotherShip = inherits(MotherShip)
SlowMotherShip.Speed = 4
Usando a função de impressão em Lua sua também fácil de testar as configurações, se eles estão corretos. Sintaxe não é tão bom como eu gostaria, mas a sua tão perto do que eu quero, eu não vou mente escrever um pouco mais.
O utilizando o código aqui http: // windrealm.com/tutorials/reading-a-lua-configuration-file-from-c.php eu posso ler as configurações em meu programa C ++
Outras dicas
JSON é sobre o formato de arquivo mais simples ao redor, tem amadurecer bibliotecas, e você pode interpretá-lo para fazer o que quiser.
{
"FastSpaceship" : {
"Speed" : 10,
"Rotation" : 5
},
"MotherShip" : {
"Inherits" : "FastSpaceship",
"ShieldRecharge" : 4,
"WeaponA": {
"Power": 10,
"Range": 20,
"style": "fireball"
}
},
"SlowMotherShip": {
"Inherits": "MotherShip",
"Speed": 4
}
}
YAML ? É como JSON sem as vírgulas e aspas.
Você pode querer verificar para fora algum tipo de representação baseada em quadros, uma vez que parece isso é exatamente o que você está falando. Que as ligações página da Wikipedia para algumas implementações existentes que talvez você poderia usar, ou criar o seu próprio.