2010/12/11(土)モンスターデータベース構想その2

出現場所のデータ構造

JavaScript上ではこの構造でよさそう。

//hiernode: 階層データの各ノード生成
function hiernode(name, child) {
	return new hiernode.fn.init(name, child);
}

//hiernode: 共通プロパティ
hiernode.fn = {
	//init: hiernodeのコンストラクタ
	init: function(name, child){
		this.name = name;
		this.child = child || [];         //子要素
		this.length = this.child.length ; //子要素の長さ、登録後は長さを変更しない
		this.is_leaf = (this.length==0) ; //子要素がないときtrue
	},
	//nameを返却
	toString: function(){
		return this.name;
	}
};

//prototypeに設定
hiernode.fn.init.prototype = hiernode.fn;

//サンプル: 階層データ生成
var area_list = [
	hiernode("エミル世界",[
		 hiernode("フィールド",[
			 "東アクロニア平原"
			,"西アクロニア平原"
			,"南アクロニア平原"
			,"北アクロニア平原"
			])
		,hiernode("ダンジョン",[
			 hiernode("氷結の坑道",[ "1F","2F","3F"])
			])
		,hiernode("インスタンスダンジョン",[
			 "黒き王"
			,"急襲アンデッドの城"
			,"仮想空間での死闘"
			,"迷宮探索"
			,"蜘蛛の宮殿"
			,"迷宮の刺客"
			,"潜む白い影"
			,"デスメイズ"
			,"戦慄のプリズン"
			,"2体のキング"
			,hiernode("地下迷宮",[ "第1階層","第2階層","第3階層","第4階層","第5階層","第6階層","第7階層","第8階層","第9階層","第10階層"])
			,"地下に巣くう者"
			,hiernode("集う魔物",[ "第1階層","第2階層","第3階層","第4階層","第5階層"])
			,"残存するモンスターの駆除"
			,"遺跡荒らしを追い出せ"
			,hiernode("超兵器の破壊",[ "全階層","第1階層","第2階層","第3階層"])
			,"遺跡の宝探し"
			,"東の扉"
			,"西の扉1"
			,"西の扉2"
			,"南の扉1"
			,"南の扉2"
			,"北の扉1"
			,"北の扉2"
			,"遺跡の奥へ…1"
			,"遺跡の奥へ…2"
			])
		])
	,hiernode("タイタニア世界",[
		 "フィールド"
		,"ダンジョン"
		,hiernode("インスタンスダンジョン",[
			 "忘却の庭園Ⅰ"
			,"忘却の庭園Ⅱ"
			,"忘却の庭園Ⅲ"
			,"忘却の庭園Ⅳ"
			])
		])
	,hiernode("ドミニオン世界",[
		 "フィールド"
		,"ダンジョン"
		])
	,hiernode("その他",[
		 hiernode("ディメンションダンジョン",[
			 hiernode("ディメンション廃炭鉱",[ "B1F","B2F","B3F"])
			,hiernode("ディメンション大陸の洞窟",[ "B1F","B2F","B3F","B4F","B5F"])
			,hiernode("ディメンションノーザンダンジョン",[ "北西区画","北東区画","南西区画","南東区画"])
			,hiernode("ディメンションイーストダンジョン",[ "D原初の森","Dイーストダンジョン","D毒の湿原"])
			,hiernode("ディメンション氷結の坑道",[ "1F","2F","3F"])
			,hiernode("ディメンションサウスダンジョン",[ "1F","2F","3F"])
			])
		,hiernode("無限回廊",[
			 "B1F~B20F"
			,"B21F~B40F"
			])
		,"都市攻防戦"
		,"イベント"
		])
	];

//参照
var temp = area_list[0];
alert(temp.toString()); //"エミル世界"

temp = temp.child[1];
alert(temp.toString()); //"ダンジョン"

temp = temp.child[0];
alert(temp.toString()); //"氷結の坑道"

temp = temp.child[0];
alert(temp.toString()); //"1F"

このデータは、検索、登録時のセレクトボックスなどに使う予定。

サーバーサイドでどうやって管理するかはまだ考え中ですが、

  • 順序関係が変わると、出現場所=0/0/1/0 などのデータの意味が変わってしまう。
  • そもそもこの構造をデータベースに上手く格納できるのか?

という問題があるので、これに関してはデータベース以外の方法を探すかも。

結構クリティカルな情報なので、自由な登録・編集はもしかしたらできない方がいいのかもしれません^^;*1

*1 : 少なくとも削除は許可できない