Quale formato di file di configurazione consente le inclusioni di altri file e l'ereditarietà delle impostazioni?

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

Domanda

Sto scrivendo un gioco basato su C ++ multiplayer.

Ho bisogno di un formato di file flessibile per archiviare informazioni sui personaggi del gioco.

I personaggi del gioco spesso non condividono gli stessi attributi o usano un basew

Ad esempio:

Un formato che mi consentirebbe di fare qualcosa del genere:

#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

Ho cercato un formato preesistente che fa tutto questo, o è simile, ma senza fortuna. Sono impaziente di non reinventare la ruota a meno che non sia necessario, quindi mi chiedevo se qualcuno conosce dei buoni formati di file di configurazione che supportano queste funzionalità

È stato utile?

Soluzione 4

Dopo molte ricerche ho trovato una soluzione abbastanza buona usando Lua

Lua ho scoperto che originariamente era progettato come un linguaggio di file di configurazione, ma poi si è evoluto in un linguaggio di programmazione completo.

Esempio

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

Utilizzando la funzione di stampa in Lua è anche facile testare le impostazioni se sono corrette. La sintassi non è così bella come mi piacerebbe, ma è così vicina a ciò che voglio, non mi dispiacerà scrivere un po 'di più.

L'uso del codice qui http: // windrealm.com/tutorials/reading-a-lua-configuration-file-from-c.php Riesco a leggere le impostazioni nel mio programma C ++

Altri suggerimenti

JSON riguarda il formato di file più semplice in circolazione, ha librerie mature e puoi interpretarlo per fare tutto quello che vuoi.

{
    "FastSpaceship" : {
        "Speed" : 10,
        "Rotation" : 5 
    },
    "MotherShip" : {
        "Inherits" : "FastSpaceship",
        "ShieldRecharge" : 4,
        "WeaponA": {
            "Power": 10,
            "Range": 20,
            "style": "fireball"
        }
    },
    "SlowMotherShip": {
        "Inherits": "MotherShip",
        "Speed": 4 
    } 
}

YAML ? È come JSON senza virgole e virgolette.

Potresti voler dare un'occhiata a una sorta di basata su frame , poiché sembra questo è esattamente ciò di cui stai parlando. Quella pagina di Wikipedia si collega ad alcune implementazioni esistenti che forse potresti usare o creare le tue.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top