1

私はマルチプレイヤーC++ベースのゲームを書いています。

ゲームのキャラクターに関する情報を保存するには、柔軟なファイル形式が必要です。

ゲームのキャラクターは、同じ属性を共有したり、ベースを使用したりしないことがよくあります

例えば:

私がこのようなことをすることを可能にするフォーマット:

#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

私はこれをすべて行う、または類似しているが運がない既存のフォーマットを探していました。必要がない限り、車輪の再発明をしたくないので、これらの機能をサポートする適切な構成ファイル形式を誰かが知っているかどうか疑問に思いました。

4

4 に答える 4

2

JSONは、最も単純なファイル形式であり、成熟したライブラリがあり、それを解釈して、好きなことを行うことができます。

{
    "FastSpaceship" : {
        "Speed" : 10,
        "Rotation" : 5 
    },
    "MotherShip" : {
        "Inherits" : "FastSpaceship",
        "ShieldRecharge" : 4,
        "WeaponA": {
            "Power": 10,
            "Range": 20,
            "style": "fireball"
        }
    },
    "SlowMotherShip": {
        "Inherits": "MotherShip",
        "Speed": 4 
    } 
}
于 2009-08-04T17:00:28.807 に答える
1

YAML?カンマと引用符のないJSONのようなものです。

于 2009-08-04T17:48:06.790 に答える
0

それがまさにあなたが話していることであるように思われるので、あなたはある種のフレームベースの表現をチェックしたいかもしれません。そのウィキペディアのページは、おそらく使用できる、または独自の実装を作成できるいくつかの既存の実装にリンクしています。

于 2009-08-04T16:44:35.000 に答える
0

たくさん検索した後、 Luaを使用してかなり良い解決策を見つけました

私が見つけたLuaは、もともと構成ファイル言語として設計されていましたが、その後、完全なプログラミング言語に進化しました。

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

Luaの印刷機能を使用すると、設定が正しいかどうかを簡単にテストできます。構文は私が望むほど良くはありませんが、私が望むものに非常に近いので、もう少し書き出すのは気になりません。

ここでコードを使用するhttp://windrealm.com/tutorials/reading-a-lua-configuration-file-from-c.php設定をC++プログラムに読み込むことができます

于 2009-08-05T16:03:35.563 に答える