17.1.3添加equal方法

  在游戏中,需要知道两个块是否位于同一位置,例如,如果苹果和贪吃蛇的头部位于同一位置,这意味着,贪吃蛇会吃掉苹果。另一方面,如果贪吃蛇的头部和尾部位于同一位置,那么贪吃蛇碰到了自己。

  为了使得比较块的位置更为容易,我们给Block构造方法原型添加了equal方法,当在一个块对象上调用equal并传递另一个对象作为一个参数,如果两个对象位于相同的位置,它将返回true(否则的话,返回false)。代码如下:


Block.prototype.equal = function (otherBlock) {
return this.col === otherBlock.col && this.row === otherBlock.row;
};

  该方法相当简单直接,如果两个块(this和otherBlock)具有相同的col和cow属性(也就是,如果this.col等于therBlock.col,并且this.row等于otherBlock.row),那么,它们位于相同的位置,并且该方法返回true。

  例如,创建名为apple和head的两个新的块,看看它们是否位于相同的位置:


var apple = new Block(2, 5);
var head = new Block(3, 5);
head.equal(apple);
false

  尽管apple和head拥有相同的row属性(5),但其col属性是不同的。如果我们将head设置为一个新的块对象,并且向左移动一列,那么现在该方法告诉我们这两个对象位于相同的位置:


head = new Block(2, 5);
head.equal(apple);
true

  注意,写作head.equal(apple) 还是apple.equal(head)没有任何区别,在这两种情况下,我们是在进行同样的比较。

  稍后将使用equal方法来检查贪吃蛇是否吃到苹果或者碰到自己。