Javascript蠕虫游戏画布问题

时间:2014-09-18 15:52:12

标签: javascript for-loop canvas

我在画布上制作蠕虫游戏,但我无法通过我的代码绘制出来的线条。我使用少量for循环来检查来自该2D数组的每个变量。这就是我现在所拥有的。 W是代码"应该"在画布边缘画出框。 A是空气或空白,不应该做任何东西。我认为ctx.fillRect是它没有做任何事情的地方,所以我想知道如何解决它。

    var W = 9001;
    A = 9000;

var level = [
    [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W], //21*13 Grid
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W]  // Comments for easy counting
]

function drawLevel(){

    var canvas = document.createElement('canvas');
        canvas.id = "WormGame";
        canvas.width = 420;
        canvas.height =260;
        canvas.style.border = "1px solid";

    var ctx = canvas.getContext('2d');

    var body = document.getElementsByTagName("body")[0];
        body.appendChild(canvas);

    ctx.fillRect(0,0,20,20);

    for(i=0;i>20;i++){
        for(j=0;j>12;j++){
            if(level[i][j] = 9001){
            var x = 20*i;
                y = 20*j;
            ctx.fillRect(x,y,20,20);
            }
        }
    }

}

3 个答案:

答案 0 :(得分:1)

问题出在你的for循环中:

for(i=0;i>20;i++){
    for(j=0;j>12;j++){
    }
}

你说从0开始计数并循环直到i大于20但是情况永远不会是这样,因为你将i(和j)设置为0所以它会立即跳出循环。< / p>

这应该有效:

for(i=0;i<20;i++){
    for(j=0;j<12;j++){
    }
}

答案 1 :(得分:1)

由于Jonas表示你对循环的条件不正确,但你还有其他一些问题。如果陈述不正确,你就是&#39; =&#39;而不是&#39; ==&#39;并且你的循环是向后的第一个循环应该是12,第二个循环应该是20.这是它应该看起来的样子:

& #13;
&#13;
var W = 9001;
var A = 9000;
var SIZE = 20;

var level = [
    [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W], //21*13 Grid
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W], //
    [W,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,W],
    [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W]  // Comments for easy counting
];

function drawLevel(){

    var canvas = document.createElement('canvas');
        canvas.id = "WormGame";
        canvas.width = SIZE * level[0].length;
        canvas.height =SIZE * level.length;
        canvas.style.border = "1px solid";

    var ctx = canvas.getContext('2d');

    document.body.appendChild(canvas);

    ctx.fillRect(0,0,SIZE,SIZE);

    for(var i = 0; i < level.length; i++){
        for(var j = 0; j < level[i].length; j++){
            if(level[i][j] == W){
                var x = SIZE*i;
                var y = SIZE*j;
                ctx.fillRect(y,x,SIZE, SIZE);
            }
        }
    }
}

drawLevel();
&#13;
&#13;
&#13;

答案 2 :(得分:0)

循环中存在一些问题。

尝试以下

for(i=0;i<21;i++){
    for(j=0;j<13;j++){
        if(level[j][i] == 9001){
        var x = 20*i;
        var y = 20*j;
        ctx.fillRect(x,y,20,20);
        }
    }
}

首先,索引是基于0的,所以你需要它们达到13/21来迭代所有元素。

其次,if应该==进行比较,否则只是分配。

最后,给定数组初始化,第一个索引是宽度,因此检查需要写入level[j][i]或重新声明的数组。

小提琴 - http://jsfiddle.net/Lpa92b10/