Welche Konfigurationsdateiformat erlaubt es, die Einschlüsse von otherfiles und die Vererbung von Einstellungen?

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

Frage

Ich bin ein Multiplayer C ++ basiertes Spiel zu schreiben.

Ich brauche ein flexible Dateiformat Informationen über das Spiel charactors zu speichern.

Das Spiel charactors wird oft die gleichen Attribute nicht teilen, oder eine basew verwenden

Zum Beispiel:

Ein Format, das mir erlauben würde, so etwas zu tun:

#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

Ich habe für ein bereits bestehendes Format zu suchen, die all dies tut, oder sind ähnlich, aber ohne Glück. Ich bin daran interessiert, nicht das Rad neu erfinden, wenn ich nicht zu haben, so dass ich frage mich, ob jemand ein guten Konfigurationsdateiformate kennt, die diese Funktionen

Unterstützung
War es hilfreich?

Lösung 4

Nachdem eine Menge der Suche Ich habe eine ziemlich gute Lösung gefunden mit Lua

Lua fand ich ursprünglich aus wurde als Konfigurationsdatei Sprache entworfen, aber dann entwickelte sich zu einer vollständigen Programmiersprache.

Beispiel

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

Mit der Druckfunktion in Lua seine auch einfach die Einstellungen zu testen, ob sie korrekt sind. Syntax ist nicht ganz so schön, wie ich es gerne hätte, aber so nah an, was ich will, ich werde nicht Geist wieder ein wenig auszuschreiben.

Der mit dem Code hier http: // windrealm.com/tutorials/reading-a-lua-configuration-file-from-c.php ich die Einstellungen in mein C ++ Programm lesen kann

Andere Tipps

JSON ist über das einfachste Dateiformat um, hat reife Bibliotheken, und man kann es interpretieren, was Sie wollen tun.

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

YAML ? Es ist wie JSON ohne die Kommas und Anführungszeichen.

Sie möchten vielleicht eine Art von Frame-basierte Darstellung, da es scheint das ist genau das, was du redest. Dass Wikipedia-Seite Links zu einigen bestehenden Implementierungen, die vielleicht könnten Sie verwenden oder eigene erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top