一、计分
- 游戏的计分规则为:每当两个相同数字块合并时,就加上这两个数字块的分值,比如2和2合并为4时,分数会加上4分。
所以修改moveDirection(direction)
中的Merge相关操作更改score
即可,然后在afterMove(hasMoved)方法
中调用updateScore()
方法。
moveDirection(direction) {
···
let move = (x, y, callback) => {
···
if (condition || this.data[x][y] == 0) {
···
} else if (this.data[destX][destY] == 0) {
···
} else if (this.data[destX][destY] == this.data[x][y]) {
···
this.score += this.data[destX][destY];
} else {
···
}
};
···
},
afterMove(hasMoved) {
if (hasMoved) {
this.updateScore(this.score);
this.addBlock();
}
},
- 预览可得,Score发生变化。
二、失败检测
- 失败条件为:a. 没有剩余空间快;b. 每一个数字块与其相邻的所有数字块均不相同。
- 修改
afterMove(hasMoved)方法
,在每次移动完做checkFail()检查
。
afterMove(hasMoved) {
...
if (this.checkFail()) {
this.fail();
}
},
- 编写
checkFail()方法
。按照a. 是否有剩余空块;b. 没有空块的情况下是否有相邻格数字相同
的顺序做判断。
checkFail() {
for (let i = 0; i < ROWS; ++i) {
for (let j = 0; j < ROWS; ++j) {
let n = this.data[i][j];
if (n == 0) return false;
if (j > 0 && this.data[i][j - 1] == n) return false;
if (j < ROWS - 1 && this.data[i][j + 1] == n) return false;
if (i > 0 && this.data[i - 1][j] == n) return false;
if (i < ROWS - 1 && this.data[i + 1][j] == n) return false;
}
}
return true;
},
- 先简单定义
fail()方法
为在控制台简单打印Game Over!
。
gameOver() {
console.log('Game Over!');
},
- 为了能快速预览
失败检测
,将game.js
设置的常量ROWS改为2
。可看到当失败时控制台打印Game Over!
。
const ROWS = 2;