2014-12-07 53 views
2

我想要适应这个蛇游戏:http://jsfiddle.net/unsign3d/uq6YL/有一个“滚动网格”的意义上,蛇可以从网格的任何一边行走,并会出现在另一边。这种蛇游戏的例子可以在这里找到:http://codeincomplete.com/projects/snakes/。我相信解决方案是一个简单的解决方案,但不幸的是它在概念和语法上都不在我的掌握之中。没有界限的蛇游戏

这是检测碰撞代码:

function check_collision(x, y, array) { 
    //This function will check if the provided x/y coordinates exist 
    //in an array of cells or not 
    for (var i = 0; i < array.length; i++) { 
     if (array[i].x == x && array[i].y == y) return true; 
    } 
    return false; 
} 

任何帮助,将不胜感激。

+0

我认为使用这里的循环缓冲区可能是有用的,但我不知道如何实现。 – user2444319 2014-12-07 18:42:40

回答

0

我觉得这个代码部分检查蛇命中了边界与否。他会保存一些砖块,其中x,y应该没有达到(如果命中“游戏结束”)。在每个层间,运行蛇的线将更新其位置。新的头寸将以x & y的形式传递。如果它在边界单元格(数组)中的任何位置,函数将返回true,意味着它碰到了boudary。其他明智的假

0

让我们考虑一下。在游戏的原始版本中,如果蛇从棋盘上移开,游戏就结束了。我们如何实现这一点?由于我们正在使用矩形网格,因此我们知道板的边缘坐标。如果蛇的头部超出这些范围,则游戏结束。

Simple snake board

在上面的例子中,蛇不能前往(-50,-50),因为这不是在基板上的有效位置。所以随着蛇的移动,我们需要检查下一个'x'和'y'位置是否有效。如果'x'低于0或高于100,或者如果'y'低于0或高于200,蛇就不能在那里移动。在游戏的常规版本中,游戏将结束。

一旦你得到这个工作,你可以通过几个改变来实现环绕式的样式边界。首先,您需要确定边界的坐标并将其绘制在板上。现在,您将拥有新的“禁区”坐标。但是,当蛇超越界限时,不需要结束游戏,只需要改变蛇的'x'或'y'坐标。

Wrap-around snake board

例如,假设蛇行进到右侧。当他碰到边界时,他的'x'位置将在95.当发生这种情况时,我们会将其更改为5以使其出现在屏幕的左侧。同样,如果蛇向上行进并碰到边界,他的'y'位置将是5.为了使他出现在屏幕的底部,我们只需要将该位置改变为195.