O formato de arquivo de configuração permite que as inclusões de otherfiles e a herança de configurações?

StackOverflow https://stackoverflow.com/questions/1228545

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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top