2012-01-07 16 views
0

私のチームは、バックエンド用にJavascript、CodeIgniter、MySQLを使用してシミュレーションゲームを作成する予定です。PHPとMySQLの節約ゲームの進捗状況のご連絡

食べる、遊ぶ、学習するなどのアクティビティ用のボタンがあり、ゲーム環境では1日に3段階、1日、正午、夜​​が含まれます。そして、各段階で、ユーザーはそれらの活動の中から選ぶことができ、それらの活動は特定のキャラクターパラメーター(知性、フォーカス、楽しみなど)を増加させ、ゲームは次の段階に進む。それが夜になると、ゲームは翌日に進むでしょう。

ゲームの進行状況を保存する方法についてのフィードバックが必要です。ここで私は念頭に置いていたものです:

  • などのパラメータ/統計情報、お金、など、ユーザーのデータが含まれていますその(明らかに)ユーザーのためのテーブルがあります統計情報などをに分離されている必要がありますと思いますか別のテーブルがあるので、統計の増加の歴史はありますか?

  • 節約のため、すべてのアクティビティを記録するログテーブルをユーザーが使用することを考えています。したがって、1日目のフェーズ1(フェーズデー)でEatを選択すると、user_id = 1、day = 1、phase = 1、activity = eatのようにログテーブルに挿入されます。

    user_id = 1, day = 1, phase = 1, activity = eat 
    user_id = 1, day = 1, phase = 2, activity = play 
    user_id = 1, day = 1, phase = 3, activity = sleep 
    
    を彼らはゲームを続行するとき、私はこのテーブルから読み取られ、この最新の行を取得します:だから、ユーザーが再生停止し、一日1相の夜の後にゲームを終了すると、たとえば、データベースがありますuser_idに変更し、最新の行が1日目のフェーズ3であることを確認した後、ゲームインターフェイスには2日目のフェーズ1が表示されます。これは、1日のフェーズが最初から固定されている必要があることを意味します例えば、これらのフェーズの外にランダムな追加の時間フェーズ(統計を増やす追加の機会と考える)。

あなたはどう思いますか?説明が十分明確であることを願っています。

答えて

1

あなたは正しい軌道にいると思います。私はあなたがユーザーの履歴や進行状況を把握しない限り、なぜユーザーテーブルの中にお金の統計情報を保存できないのか分かりません。

しかし、プログラマーとしては、あなたは将来これらの統計を使うつもりですか?ゲームの特典などのために...貴重なデータかもしれませんが... MySQLは何十億ものレコードを処理することができるので、MySQLの限界を押し上げる心配はありません。ゲームはすでに非常に成功しています。

もし私が2番目のテーブルをセットアップし、ゲームアクションのためにxrefを設定します。特定のものを追跡する必要がある場合は、別のテーブルを使用することもできますし、そうでないかもしれません...これらの選択は、ゲームのプレイ方法によって異なります。& /または開発されています。

私は、MySQLのストアドプロシージャ(MySQL 5 +)の使用を検討することも考えています...これは非常に理解しやすいです...ロジック(if文など)を格納できる関数&通常のSQL文のようなPHPのmysql問合せからこれらの関数を呼び出すことができます。これにより、複数のSQL文を一度に実行することができます。更新、削除を選択...一つの関数で... etc ...これは私が想像すると、ゲーム開発には非常に便利です。

あなたはこのGoogle Searchに見れば:それは私が...始める助け、それはへの風だったなどMySQLのストアドプロシージャこれは、ストアドプロシージャの非常に良いガイドでのタイトルの下に文書化し、現在であります私はMySQLのサイトで直接リンクを見つけようとしましたが、それはしばらくありましたので、今どこにいるのかわかりません。

あなたのプロジェクトには幸運があります。

+0

リンクありがとうございます。私はそれに手を差し伸べるかもしれない。しかし、ちょうど、別のクエリ呼び出しと同等のストアドプロシージャではないと思いますか?つまり、1クエリ+ 1ストアドプロシージャを呼び出すコードで2クエリを呼び出す間に違いがありますか? – Henson

+0

ストアドプロシージャを使用すると、すべてのSQL文をMySQLデータベース内の関数の下に格納することができます。たとえば、1つのストアドプロシージャで行うことができるアクションを1つ選択するためには、これは、基本的にMySQLによってすでにコンパイルされているため、そのクエリを実行する準備ができている理由はいくつかありますが、ブラウザ - >コード - > MySQLとの間の通信はそれほどありません。その上に値として関数に送られたものは、自動的にSQLではなくデータとして扱われるため、SQLインジェクションの機会は少なくなります。 – jason

+0

説明に感謝します。私はちょっと今それのハングアップを取得します。 – Henson

関連する問題