私はRPGを開発していて、敵データベースの構築を開始する必要があるところにいます。これに関連するいくつかの課題と、私が検討してきたいくつかの解決策があります。
敵のデータベースで私がしなければならないことは次のとおりです。
次のデータを表す必要がある2つの主要な敵クラスがあります。
以下を含む基本敵クラス:
Base Stats
Status Resistance Table
Elemental Resistance Table
Steal Table
Drop Table
Level
Unique ID
Base XP
AI Hook
Name
Display Name
そして、次のフィールドを追加して、機器を追加する機能を追加する派生クラス:
Main Weapon
Secondary Weapon/Equipment
Armor
Accessories
今後、必要に応じてフィールドやクラスを追加する予定です。敵をデータベース化するための2つの可能な形式を検討しました。
XMLファイル
基本的には次のようにします。
<?xml version="1.0" encoding="utf-8"?>
<Enemies>
<Enemy name="Red Dragon" type="BaseEnemy" level="56" displayname="Red Dragon">
<Stats HP="55000" MP="2500" SP="2500" Strength="212" Vitality="125" Magic="200" Spirit="162" Skill="111" Speed="109" Evasion="100" MgEvasion="100" Accuracy="100" Luck="55"/>
<StatusResistances>
<Resistance name="Sleep" value="100" />
<Resistance name="Stop" value="100" />
</StatusResistances>
<ElementResistances>
<Resistance name="Fire" value="75" />
</ElementResistances>
<LootTable>
<Item name="Elixir" rate="0.03" count="1"/>
</LootTable>
<DropTable>
<Item name="Elixir" rate="0.03" count="1"/>
</DropTable>
<AIScript value="BasicBehaviour.py" />
<BaseXP value="4800"/>
</Enemy>
<Enemy name="Gaverick 1" type="HumanoidEnemy" level="33" displayname="Gaverick">
<!--Same Stuff as above here-->
<Equipment>
<Weapon name="Dark Eclipse"/>
<Armor name="Terra Defense"/>
<Accessory name="Ribbon"/>
</Equipment>
</Enemy>
</Enemies>
利点:
- パラメータを追加/再配置する必要がある場合、拡張が簡単
- デフォルト値を割り当てるのは簡単
- 構成ファイル、タイルマップ、リソースの説明の読み込み用に含まれているXMLパーサー(pugixml)を既に持っています
短所:
- 潜在的に遅い(私のデータベースはおそらく数百の敵にヒットするでしょう)
- は任意の敵を照会できないため、すべての敵をメモリに保持する必要がある可能性があります。
- これは、変更された敵データもロードするためにゲームを再起動する必要があることを意味します
SQLite
このため、基本的に、必要なすべてのデータを表す列を含むテーブルを作成し、不要なフィールドは空のままにします
メリット
- 任意のクエリにより、不要な敵データをメモリから除外できる
- より構造化された感じ
- ファイルサイズが小さい
短所
- パラメータの順序を拡張/再配置するのがより困難
- 未使用のフィールドへの不要なオーバーヘッド
- sqliteのデータベースインターフェイスラッパーを作成する必要があります
これを念頭に置いて、私は他の人が何をしたかについてのいくつかの外部の経験を得ることに興味がありました。私はこれをまったく間違っていると思うかもしれません。もしそうなら、ここにある2つの可能性の代替案を提案してください。
さらに、これらの可能性のいずれかを改善する方法についての提案があれば幸いです。本当に、私が正しい軌道に乗っているかどうかを知りたいだけです。
無料のライブラリを自由に使用でき、すでにブーストを組み込んでいます