7

ゲームプログラミングを再開しています。10 年前、私は qbasic でゲームを作成していましたが、それ以来、ゲームのプログラミングを行っていないため、かなり錆びています。私は常にプログラミングを行ってきましたが、現在は Web 開発者/DBA/管理者です。いくつか質問がありますが、投稿ごとに 1 つに制限します。

私が取り組んでいるゲームは、非常に大きな世界になるでしょう。URWに多少似ていますが、さらに広い世界で、より「RPG」に似ています。

私が決定しようとしてきたのは、マップをレイアウトし、保存し、アクセスする最良の方法は何かということです。sqlite を使用してデータを保存するというアイデアを思いつきました。その後、sqlite db をゲームの保存ファイルとして使用することもできました。

これをどのように行うべきか、または他のストレージ方法のアイデアについてのヒントはありますか?

私のゲームの要件は次のとおりです。

  • ゲームの世界で見つけるには、完全なランダム アクセスが必要です (NPC、モンスター、動物はすべて常にアクティブになります)。
  • 私は Stackless Python 3.1 を使用しています。多くの作業を行わない限り、オプションはかなり限られています。
  • 非常に広い世界を処理できる必要があります。
  • 同時実行のサポートはプラスになりますが、必要になるとは思いません。
4

3 に答える 3

11

外部要因によって強制的に使用されない限り、リレーショナル データベースを台無しにしないでください。

Python のpickle, shelveを見てください。

Shelve は高速で、スケーリングも良好です。これにより、Python 表現と非 Python 表現の間の面倒な変換がなくなります。


編集。

さらに重要なアドバイス。テクノロジーの選択に行き詰まらないでください。場所、アイテム、キャラクター、ルールなどを機能させます。パイソンで。できるだけ簡単かつ正確に。

コアモデル、正確性、および物事が機能することを証明するための基本的な機能セット以外には、脳のカロリーを 1 つも消費しないでください。

実際に機能するモデルができて、いくつかの洗練された単体テストを実行できるようになったら、テクノロジの選択を行うことができます。

モデルを作成したら、何百万もの場所に意味のあるスケールアップを行い、必要なストレージの種類を確認できます。モデルは変更できません。それがアプリケーションの本質です。パフォーマンスを調整するために変更できるのは、アクセス レイヤーと永続レイヤーのみです。

于 2009-10-30T15:53:29.560 に答える
3

あなたが求めているのは、タイプの空間インデックスのようです。非常に大規模な 2D ゲームの場合、quadtreeを使用することをお勧めします。Quadtree は、大部分の RPG タイプのゲームの場合と同様に、広いエリアがあり、アクティビティがそのエリアのローカライズされた領域で発生する傾向がある場合にうまく機能します。これにより、ストレージ要件が低く抑えられ、衝突検出も高速化されることが期待されます。

ゲームの保存に関しては、頻繁に変更されることを心配している場合は、プレイヤーやモンスターの統計などをデータベースに入れることができます. 実際のレベル レイアウトについては、ゲームに固有のバイナリ ファイル形式を使用することをお勧めします。通常、レベル レイアウトで実行する必要があるデータベース タイプのクエリは多くなく、独自の形式を使用して優れた最適化を行うことができます。四分木のような形式をデータベースに保存する方法がわかりません (可能だと確信していますが)。

于 2009-10-30T16:22:35.337 に答える
1

非リレーショナル データベースを使用して大量のデータを格納しています。64 ビット ハードウェアで作業できる場合、MongoDBとそのPython ドライバーは非常に優れています。Stackless でこれが正しいかどうかはわかりませんが、可能性はあります。

于 2009-11-02T12:02:29.857 に答える