Welche Konfigurationsdateiformat erlaubt es, die Einschlüsse von otherfiles und die Vererbung von Einstellungen?
-
22-07-2019 - |
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ützungLö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.