按下左键有bug,出现相同数字不能叠加
var board = [];
for (var i = 0; i < 4; i++) {
board[i] = [];
for (var j = 0; j < 4; j++) {
board[i][j] = 0;
}
}
var container = document.getElementById('grid_container');
window.onload = function(){
var clear = document.getElementsByClassName('number-cell');
for (var i = clear.length; i < 0; i--) {
clear[i].parent.removeChild('clear[i]');
}
//背景色及表面小格子(无样式)归位
for (var i = 0; i < 4; i++) {
for (var j = 0; j < 4; j++) {
var gridCell = document.getElementById('grid_cell_' + i + '_' + j);
gridCell.style.left = getLeft(i);
gridCell.style.top = getTop(j);
var numberCell = document.createElement('div');
numberCell.className = 'number-cell';
numberCell.id = 'number_cell_' + i + '_' +j;
numberCell.style.left = getLeft(i);
numberCell.style.top = getTop(j);
container.appendChild(numberCell);
}
}
//随机生成1个棋格
aGridCell();
aGridCell();
}
var aGridCell = function(){
do{
var randomi = Math.floor(Math.random() * 4);
var randomj = Math.floor(Math.random() * 4);
}
while(board[randomi][randomj] != 0);
var randomCell = document.getElementById('number_cell_'+ randomi + '_' +randomj)
var randomNumber = Math.random() > 0.5 ? 4 : 2;
board[randomi][randomj] = randomNumber;
randomCell.style.left = getLeft(randomi);
randomCell.style.top = getTop(randomj);
randomCell.style.width = 100 + 'px';
randomCell.style.height = 100 + 'px';
randomCell.innerHTML = randomNumber;
randomCell.style.color = fontColor(board[randomi][randomj]);
randomCell.style.backgroundColor = backgroundColor(board[randomi][randomj])
};
var getLeft = function(i){
return 20 + 120 * i + 'px';
};
var getTop = function(j){
return 20 + 120 * j + 'px';
};
var fontColor = function(number){
if (number <= 4) {
return '#7c736a';
}
else{
return '#fff7eb';
}
}
function backgroundColor( number ){
switch( number ){
case 2:return "#eee4da";
case 4:return "#ede0c8";
case 8:return "#f2b179";
case 16:return "#f59563";
case 32:return "#f67c5f";
case 64:return "#f65e3b";
case 128:return "#edcf72";
case 256:return "#edcc61";
case 512:return "#9c0";
case 1024:return "#33b5e5";
case 2048:return "#09c";
case 4096:return "#a6c";
case 8192:return "#93c";
}
return "black";
}
window.document.addEventListener('keydown',function(e){
switch(e.keyCode){
case 37:
moveLeft();
aGridCell();
break;
case 38:
moveTop();
aGridCell();
break;
case 39:
moveRight();
aGridCell();
break;
case 40:
moveDown();
aGridCell();
break;
default:
break;
}
})
var moveLeft = function(){
if(canMoveLeft()){
for (var i = 1; i < 4; i++) {
for (var j = 0; j < 4; j++) {
if (board[i][j] != 0) {
for (var k = 0; k < i; k++) {
if (board[k][j] == 0 && noObstacles(j,i,k)) {
moveLeftAnimation(j,i,k);
board[k][j] = board[i][j];
console.log(board[k][j],board[i][j])
board[i][j] = 0;
console.log(board[i][j])
continue;
}else if (board[k][j] = board[i][j] && noObstacles(j,i,k)) {
moveLeftAnimation(j,i,k);
board[k][j] += board[i][j];
console.log(board[k][j],board[i][j])
board[i][j] = 0;
continue;
}
}
}
}
}
var clear = document.getElementsByClassName('number-cell');
for (var i = clear.length; i < 0; i--) {
clear[i].parent.removeChild('clear[i]');
}
for (var i = 0; i < 4; i++) {
for (var j = 0; j < 4; j++) {
if (board[i][j] != 0) {
var numberCell = document.getElementById('number_cell_'+ i + '_' + j);
var number = board[i][j];
numberCell.innerHTML = number;
numberCell.style.left = getLeft(i);
numberCell.style.top = getTop(j);
numberCell.style.width = 100 + 'px';
numberCell.style.height = 100 + 'px';
numberCell.style.color = fontColor(board[i][j]);
numberCell.style.backgroundColor = backgroundColor(board[i][j])
}
}
}
};
}
var canMoveLeft = function(){
for (var i = 1; i < 4; i++) {
for (var j = 0; j < 4; j++) {
if (board[i][j] != 0) {
if (board[i-1][j] == 0||board[i-1][j] == board[i][j]) {
return true;
}
}
}
}
}
var moveLeftAnimation = function(row,from,to){
var gridCell = document.getElementById('number_cell_' + from + '_' + row);
gridCell.style.left = getLeft(to);
console.log(gridCell.id,to,gridCell.style.left)
}
var noObstacles = function(row,from,to){
for (var i = to + 1; i < from; i++) {
if(board[i][row] != 0){
return false;
}
}
return true;
}
var moveTop = function(){
}
var moveRight= function(){
}
var moveDown = function(){
}而且按下左键(moveleft函数里面),我console.log(board[k][j])为什么会出现1...