1

私はウェブサイトとデータベースの設計に関してかなりの初心者です。これまでの経験は、非常に基本的な MS Access データベースと Codeacademy の基本コースだけでした。私は、プログラミングの歯を削るために、Web ベースのゲームの作成に手を出すことにしました。データベースの設計、特に将来のイベントのアドホックなスケジューリングについて、誰かが私に洞察を与えてくれることを期待していました。

現在の計画は、単純なスペース アドベンチャー ゲームを作成することです。星は 2 次元デカルト平面上に配置されます (したがって、各星には (X,Y) 座標があります)。したがって、次の2つの基本的な表があります。

輸送する:

  • プレーヤー (Varchar)
  • 船(ヴァルチャー)
  • CurrentXCoOrd (int)
  • CurrentYCoOrd(int)

地図

  • STARID (Int)
  • システム名 (varchar)
  • XCoOrd (整数)
  • YCoOrd (整数)

プレイヤーが座標 (1,1) にある星系に船を持っていて、座標 (2,2) にある星系への旅をしたいとします。この旅に、たとえば 10 分かかるとしたら、新星系への船の到着を記録するデータベースを設定する最善の方法は何でしょうか? (船はある座標から別の座標に移動する必要はありません。単に出発地から姿を消し、目的地に現れるだけで十分です。)

データベースを更新して船が動いていることを示し、10 分後にデータベースを更新して船の到着を表示することを検討していましたが、正直なところ、そのスケジュールをどのように設定すればよいかわかりません。それを念頭に置いて、船の発進と到着を記録する代わりに、船が着陸した時間を示すタイムスタンプで到着を記録し、それから船が動いているかどうかを計算するだけでよいと考えています。

したがって、SHIP テーブルから X および Y CoOrdinate フィールドを削除し、代わりに POSITION というテーブルを作成します。

位置:

  • プレーヤー (Varchar)
  • ArrivalTime (日時)
  • XCoOrd (整数)
  • YCoOrd (int)

次に、ウェブサイトは、船が動いているかどうかを判断するために、到着タイムスタンプが経過したかどうかを確認します.

そうすれば、プレイヤーがブラウザを閉じて後で再度開いても何も中断されず、データベースを 2 回 (起動と到着を表示) ではなく 1 回 (到着を表示) だけ更新するようになりました。これがプレイヤーの動きを追跡する実行可能な手段であるかどうか、誰か確認できますか? 私は学ぶためにこれを行っているので、提供された提案を喜んで試みます。:)

データベースは MySQL で、Web サイトは Perl です。

これは私の最初の投稿です。私の質問が十分に明確でない場合は、お詫び申し上げます。アーカイブを検索しましたが、探していたものと一致するものは見つかりませんでした。

よろしくお願いします。

4

2 に答える 2

0

一般的に、賢明なアプローチのようです。ただし、2つの提案。

  1. 「stardate」時間 (int?) を使用し、リアルタイムとの間で変換することを検討してください。サーバーがオフラインであるためにゲームを一時停止する必要がある場合は、そのようにすることができます。

  2. アクション (ジャーニー テーブル) を記録するか、結果 (ポジション テーブル) を記録するか、またはその両方を記録するかを決定します。

監査/巻き戻し + リプレイの観点からは、一連のアクション テーブル (旅、着陸、攻撃、修理) が理にかなっています。ただし、「プレイの現在の状態」については、おそらくゲーム開始以降のすべてのアクションを再実行したくないでしょう。冗長ではありますが、タイムスタンプ付きの通常の「結果」テーブル (位置、ship_damages、ship_stores) を使用すると、「現在の」状態または過去の重要なポイントを追跡できます。テーブルは、開始状態とその後のすべてのアクションから再生成でき、キャッシュとして扱うことができます。直接更新する必要はありません。新しいアクションをデータベースに追加するときは、トリガーに任せてください。

最後に、データベースのニーズに合わせてDBIx::Classを検討してください。サイズが大きく、使いこなすまでに時間がかかる場合がありますが、言語に関係なく、オブジェクトベースの db ラッパーとしては優れたものの 1 つです。

于 2013-09-10T07:15:23.197 に答える
0

DepartureTime と ArrivalTime をキャプチャします。船が出発するときに両方を設定しますDepartureTime = NOW(), ArrivalTime = NOW() + INTERVAL 10 MINUTE。船が動いているときNOW() BETWEEN DepartureTime AND ArrivalTime.

于 2013-09-09T20:54:38.573 に答える