0

我目前正在开发一款小游戏,但遇到了一些我无法弄清楚的问题。

我有一个包含 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);
}
4

2 回答 2

0

我现在所做的是首先用线循环遍历数组并检查下一行是否可用,然后将这两行推入另一个可以选择的数组中。

if(type == 2) {
    var options = [];
    for(var i = 0 ; i < start_lines.length; i++) {
        var f = start_lines[i];
        var n = start_lines[i + 1];

        if((f + 1) == n) {
            options.push([f, n]);
        }
    }

    var random = Math.floor(Math.random() * (options.length - 1));
    var option = options[random];

    var f = option[0];
    var n = option[1];

    xPos = this._lines[f] - 30;

    start_lines.splice(f - 1, 2);
    start_lines.splice(n - 1, 2);
} else {
    var random = Math.floor(Math.random() * (start_lines.length - 1));
    var line = start_lines[random];

    start_lines.splice(random, 1);
}
于 2013-03-15T07:46:19.083 回答
0

我不知道这种方法是否适合您的要求,但是如果您可以最初设置线条并在需要时随机选择线条会更好。这避免了很多混乱。

function getLines(){
  var start_lines = [1, 2, 3, 4, 5], lines = [];
  while(start_lines.length){
    var type = Math.ceil(Math.random() * 2);
    lines.push(start_lines.splice(0, type));
  }
  return lines;
}
var lines = getLines();

var random = Math.floor(Math.random() * lines.length);
console.log(lines.splice(random, 1));

在这里,我type随机选择 - 1 或 2。您必须对此进行一些更改。

jsbin:http: //jsbin.com/upabom/3/edit

于 2013-03-15T08:57:42.723 回答