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