别踩白块JavaScript


别踩白块

别踩白块

开始游戏暂停游戏 停止游戏

分数: 0

下面为script文件


var BTN_PLAY_ID = 'play';  
var BTN_PAUSE_ID = 'pause';  
var BTN_STOP_ID = 'stop';  
var MAIN_ID = 'mainID';  
var GRADE = 'grade';  var main, allRow, grade, stopFlag = false;  
window.onload = function() {  main = document.getElementById(MAIN_ID); //黑白格的容器  allRow = getAllRow(); //每一行黑白格  grade = document.getElementById(GRADE); //当前分数  //开始游戏(点击)  var play = document.getElementById(BTN_PLAY_ID);  play.onclick = startGame;  //暂停游戏(点击)  var pause = document.getElementById(BTN_PAUSE_ID);  pause.onclick = pauseGame;  //停止游戏(点击)  var stop = document.getElementById(BTN_STOP_ID);  stop.onclick = stopGame;  //按键控制  document.onkeyup = function(event) {  keyPlay(event);  };  //鼠标控制  mousePlay();  
};  //得到每一行黑白格  
function getAllRow() {  allRow = [];  var row01 = document.getElementById('row01');  var row02 = document.getElementById('row02');  var row03 = document.getElementById('row03');  var row04 = document.getElementById('row04');  var row05 = document.getElementById('row05');  //allRow[0] 到 allRow[4] ,从界面来看是从下往上的  allRow.push(row05);  allRow.push(row04);  allRow.push(row03);  allRow.push(row02);  allRow.push(row01);  initAllRowInfo();  return allRow;  
}  //初始化allRow数组的信息  
function initAllRowInfo() {  for(var i = 0; i < allRow.length; i++) {  //标识每一行是否有黑格,还有黑格的位置  allRow[i].hasBlackGrid = false;  allRow[i].blackGridPos = -1;  //把现有的黑格变成白格  var row = allRow[i].getElementsByTagName('div');  for(var j = 0; j < row.length; j++) {  row[j].style.background = '#fff';  row[j].rowPos = i; //表示在allRow的哪一位置  row[j].colPos = j; //表示在该行中的哪个位置  }  }  
}  //点击开始游戏  
function startGame() {  stopFlag = false;  main.style.borderTop = 'none';  main.style.borderBottom = 'none';  initialGame();  
}  //初始化游戏,包括黑白格  
function initialGame() {  //移动黑白格  rowMove(5,15);  
}  var timer;  
//移动黑白格(lSpeed表示位移速度(定时器每触发黑白格移动的像素),tSpeed表示时间速度(定时器隔多久触发)  
function rowMove(lSpeed, tSpeed) {  clearInterval(timer);  //让每一行黑白格进行定时移动  var n = 1; //用于延迟 黑格的加入  var hasBlack = false; //游戏中还没有黑格  timer = setInterval(function() {  var flag = false; //标识该行是否已从上往下移出了容器,如果是,则对allRow中的顺序进行调整  for(var i = 0; i < allRow.length; i++) {  var obj = allRow[i];  isGameOver(obj); //判断游戏是否结束  if(obj.offsetTop >= 530) {  flag = true; //有行移出了容器,那么该行一定是allRow[0]  obj.style.top = -120 + 'px';  //将一行白格中的一个变为黑格  //延迟时间已到 并且 该行木有黑格  if(n > 50 && !obj.hasBlackGrid) {  //随机一行中第几个白格变成黑格  var k = Math.floor(Math.random() * 4);  obj.getElementsByTagName('div')[k].style.background = '#000';  obj.hasBlackGrid = true;  obj.blackGridPos = k;  //游戏中有黑格了  hasBlack = true;  }  }  obj.style.top = obj.offsetTop + lSpeed + 'px';  }  if(!hasBlack) {  n++;  }  //对移出该容器的行在allRow中的顺序进行调整,移出容器的行移动到allRow的尾部  if(flag) {  var tempRow01 = allRow[0];  allRow.shift(); //删除数组的第一个元素  allRow.push(tempRow01); //将原来位置第一的元素加入到数组的尾部  }  }, tSpeed);  
}  //暂停游戏  
function pauseGame() {  clearInterval(timer);  stopFlag = true;  
}  //停止游戏  
function stopGame() {  //初始化分数  grade.innerHTML = '0';  //停止移动  clearInterval(timer);  stopFlag = true;  main.style.borderTop = '1px solid darkturquoise';  main.style.borderBottom = '1px solid darkturquoise';  //每一行的位置初始化  allRow[0].style.top = 400 + 'px';  allRow[1].style.top = 270 + 'px';  allRow[2].style.top = 140 + 'px';  allRow[3].style.top = 10 + 'px';  allRow[4].style.top = -120 + 'px';  initAllRowInfo();  
}  
//当踩到黑格时,黑格颜色发生“正确”变化(通知用户)  
// blackRowPos 黑格所在的行在allRow中的位置; blackGridPos 黑格在该行中的位置  
function rightChange(blackRowPos, blackGridPos) {  //修改标志  allRow[blackRowPos].hasBlackGrid = false;  allRow[blackRowPos].blackGridPos = -1;  grade.innerHTML = (parseInt(grade.innerHTML) + 1) + '';  var grid = allRow[blackRowPos].getElementsByTagName('div')[blackGridPos];  grid.style.background = 'green';  setTimeout(function() {  grid.style.background = '#fff';  }, 50);  
}  //鼠标控制  
function mousePlay() {  for(var i = 0; i < allRow.length; i++) {  var row = allRow[i].getElementsByTagName('div');  for(var j = 0; j < row.length; j++) {  row[j].onclick = function() {  var _this = this;  if(_this.style.background == 'rgb(0, 0, 0)') {  var tt = _this.parentNode;  //修改 这一行的 标记——没有黑格了  tt.hasBlackGrid = false;  tt.blackGridPos = -1;  //修改分数  grade.innerHTML = (parseInt(grade.innerHTML) + 1) + '';  _this.style.background = 'green';  setTimeout(function() {  _this.style.background = '#fff';  }, 50);  } else if(_this.style.background == 'rgb(255, 255, 255)') {  gameOver(_this);  }  };  }  }  
}  //判断游戏是否结束  
function isGameOver(obj) {  var temp1 = obj.offsetTop + obj.offsetHeight;  var temp2 = main.offsetTop + main.offsetHeight - 20;  if(temp1 > temp2) {  if(obj.hasBlackGrid) {  obj.hasBlackGrid = false;  var index = obj.blackGridPos;  obj.blackGridPos = -1;  gameOver(obj.getElementsByTagName('div')[index]);  }  }  
}  //游戏结束  
function gameOver(errorGrid) {  errorGrid.style.background = 'red';  setTimeout(function() {  errorGrid.style.background = '#fff';  setTimeout(function() {  errorGrid.style.background = 'red';  alert('游戏结束,您最后的得分是:' + grade.innerHTML + '!');  stopGame();  }, 100);  }, 100);  if(bgMusic.play) {  bgMusic.pause();  }  
}  function getClass(parent, className) {  var p = document.getElementById(parent);  var tt = p.getElementsByTagName('*');  var arr = [];  for(var i = 0; i < tt.length; i++) {  if(tt[i].className == className) {  arr.push(tt[i]);  }  }  return arr;  
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部