私は現在小さなゲームに取り組んでいて、理解できない何かに行き詰まりました。
5つのアイテムを含む配列があります。これらのアイテムは、次のようにさまざまな位置を表します。
[1, 2, 3, 4, 5]
これらは基本的に、プレーヤーがゲームに進むときにオブジェクトを配置するために使用される異なる線です。
5秒ごとに新しいオブジェクトが表示されます。これらは別の配列からのもので、次のようになります。
[1, 2]
// 1 = single item
// 2 = double item
1と2は異なるタイプのオブジェクトであり、どちらも異なる量の行を必要とします。
問題は、これらの項目が重複することがあり、これを停止する方法がわからないことです。
出力から問題を確認できます。
Items: [1, 2]
[Item of type 1] line: 3
[available lines] [1, 2, 3, 4, 5]
[Item of type 2] line: 2
[available lines] [1, 2, 4, 5]
[1, 5]
したがって、アイテム1(1行)は3行目に配置されますが、アイテム2(2行)の場合は2行目が選択されます。これは、幅が2行であるため、最初のアイテムと重複します。
したがって、基本的に項目2の場合、1行目と4行目のみを選択できますが、これらのみを選択するロジックは見つからないようです。
おそらく20行程度に拡張され、オブジェクトが増えるので、次の行も利用できる行を選択する方法を見つける必要があります。
これを始める方法について何かアイデアはありますか?
私が現在使用しているのはこれです:
var random = Math.floor(Math.random() * (start_lines.length - 1));
var line = start_lines[random];
// If it's a barrier, delete 2 rows instead (35)
if(type == 2) {
if(line == 5) {
xPos = this._lines[random - 1] - 35;
start_lines.splice(random - 1, 2);
} else {
xPos = this._lines[random] - 35;
start_lines.splice(random, 2);
}
} else {
start_lines.splice(random, 1);
}