2012-01-10 4 views
1

私はゲームを作っています。ゲームの一部はオブジェクトを収集することです。カテゴリの各オブジェクトがプロパティを持つように、「多様性」のポイントを取得します。特定のプロパティを持つオブジェクトを収集した場合、そのプロパティの乗数は、そのプロパティを持つ他のオブジェクトに適用されなくなります。ポイントは、収集した各プロパティのすべてのユニキュー値を結合し、そのプロパティの係数を掛けて計算されます。例:オブジェクト収集ゲームのためのMongoDBアルゴリズム

Points 
Category: Toys 
Base: 2 
Shape: 7 
Material: 10 
Color: 5 

Bouncy ball:    Snow Globe: 
category: sphere   category: sphere  
shape: round    shape: round 
material: rubber   material: glass 
color: swirls   color: clear 

Collected: 
bases = my_objects.length * base = 2 * 2 = 4 
shapes = array('round').length * 7 
materials = array('rubber', 'glass') * 10 
color = array('swirls', 'red') * 5 

score = bases + shapes + materials + color = 4 + 7 + 20 + 10 = 41 

オブジェクトは、nosqlドキュメント(mongodb)として格納されます。私の質問は、収集されていないオブジェクトがユーザーのスコアに最大のポイントを追加する順序で、データベースから残りのすべてのオブジェクトを選択する最善の方法です。まだ

答えて

0

さらに問題を調査すると、私の目標は無関係です。何か他のものが収集されるとすぐに、どのオブジェクトが最も多くのポイントを生成するかの全体的な順序が大幅に変わるので、最初は順序付けのポイントがありません。

0

ストア文書におけるスコアの合計と(必要に応じてインデックスを使用して)、次にあなたが降順で並べ替えることができ

あなたはMongoの中の「+ B + Cでソート」ことができないことがありそうであるように最高

+0

各文書のスコアは、ログインした人物と以前に収集したものによって異なります。ドキュメントに保存するには、ユーザーが新しいオブジェクトを収集するたびに、何百万ものオブジェクトのスコアを再計算する必要があります – chris

関連する問題