shake.js
资源名称:Snake.rar [点击查看]
上传用户:pzy1211
上传日期:2022-04-09
资源大小:23k
文件大小:7k
源码类别:
其他智力游戏
开发平台:
JavaScript
- // JavaScript Document
- var gridSize = 8; //定义小方块的宽度和高度
- var borderWidth = 20; //定义每行的方块数
- var borderHeight = 12; //定义每列的方块数
- var browserSize = ADS.getBrowserWindowSize();
- var sWidth = browserSize.width; //浏览器窗口区域宽度
- var sHeight = browserSize.height; //浏览器窗口区域高度
- var start = 0; //设置标志位
- var moveSpeed = 200; //设置贪吃蛇的速度
- var squareNumber = 0; //设置吃掉的小方块数
- //创建限制区域
- function createLimitedArea()
- {
- var borderEle = document.getElementById('border'); //获得对限制区域DIV的控制
- borderEle.style.width = gridSize*borderWidth + 'px';
- borderEle.style.height = gridSize*borderHeight + 'px';
- borderEle.style.border = '1px solid #000';
- borderEle.style.position = 'absolute';
- //设置限制区域在浏览器窗口水平垂直位置居中
- borderEle.style.left = parseInt((sWidth - gridSize*borderWidth)/2) +'px';
- borderEle.style.top = parseInt((sHeight - gridSize*borderHeight)/2) + 'px';
- limitedArea = new Array();
- for(var x=0;x<borderWidth;x++)
- {
- limitedArea[x] = new Array();
- for(var y = 0; y<borderHeight;y++)
- {
- limitedArea[x][y] = '0'; //设置限制区域的每个像素都为空
- }
- }
- snakeXL = parseInt(Math.random()*borderWidth); //随机产生一个介于0到borderWidth之间的数
- snakeYL = parseInt(Math.random()*borderHeight); //随机产生一个介于0到borderHeight之间的数
- square(); //创建小方块
- snake(); //创建贪吃蛇
- snakeTag = borderEle.getElementsByTagName('DIV');
- squareTag = borderEle.getElementsByTagName('SPAN');
- }
- //创建小方块
- function square()
- {
- var sXL = parseInt(Math.random()*borderWidth); //随机产生一个介于0到borderWidth之间的数
- var sYL = parseInt(Math.random()*borderHeight); //随机产生一个介于0到borderHeight之间的数
- if(limitedArea[sXL][sYL] == '0') //假如限制区域中为空的话创建小方块
- {
- var squareArea = document.createElement('SPAN'); //创建一个小方块
- var borderEle = document.getElementById('border'); //获得对限制区域DIV的控制
- squareArea.style.width = gridSize + 'px';
- squareArea.style.height = gridSize + 'px';
- squareArea.style.overflow = 'hidden'; //为了在IE中显示小于最小高度值,必须将溢出设置为隐藏
- squareArea.style.background = '#76b900';
- squareArea.style.position = 'absolute';
- squareArea.style.left = gridSize*sXL + 'px';
- squareArea.style.top = gridSize*sYL + 'px';
- borderEle.appendChild(squareArea); //将小方块加入到限制区域中
- limitedArea[sXL][sYL] = 'square'; //将当前区域设置为存在小方块
- }
- else //如果当前区域存在蛇或者小方块则重新调用square()方法,直至创建小方块为止
- {
- square();
- }
- }
- //创建贪吃蛇
- function snake()
- {
- var snakeArea = document.createElement('DIV'); //创建贪吃蛇
- var borderEle = document.getElementById('border'); //获得对限制区域DIV的控制
- snakeArea.setAttribute('x',snakeXL);
- snakeArea.setAttribute('y',snakeYL);
- snakeArea.style.width = gridSize + 'px';
- snakeArea.style.height = gridSize + 'px';
- snakeArea.style.overflow = 'hidden'; //为了在IE中显示小于最小高度值,必须将溢出设置为隐藏
- snakeArea.style.background = '#FF6700';
- snakeArea.style.position = 'absolute';
- snakeArea.style.left = gridSize*snakeXL + 'px';
- snakeArea.style.top = gridSize*snakeYL + 'px';
- borderEle.appendChild(snakeArea); //将贪吃蛇加入到限制区域中
- limitedArea[snakeXL][snakeYL] = 'snake'; //将当前区域设置为存在贪吃蛇
- }
- //控制贪吃蛇的方向
- function keyDown(W3CEvent)
- {
- var eventEle = ADS.getEventObject(W3CEvent);
- var keycode = eventEle.keyCode;
- switch (keycode)
- {
- case 37: //向左
- direction(-1,0);
- break;
- case 38: //向上
- direction(0,-1);
- break;
- case 39: //向右
- direction(1,0);
- break;
- case 40: //向下
- direction(0,1);
- break;
- }
- return false;
- }
- //方向控制
- function direction(x,y)
- {
- goX = x;
- goY = y;
- if(start == 0 ) //假如标志位为0时,蛇开始移动
- {
- start = 1; //蛇移动就置标志位为1
- snakeMove();
- }
- }
- //控制蛇的移动
- function snakeMove()
- {
- snakeXL += goX; //snakeXL加上根据键盘的移动获取的当前一次X方向位移量
- snakeYL += goY; //snakeYL加上根据键盘的移动获取的当前一次Y方向位移量
- if(snakeXL < 0 || snakeXL > borderWidth || snakeYL < 0 || snakeYL > borderHeight )
- {
- restart(); //假如蛇跑到边界外面则重新游戏
- }
- else
- {
- snakefront = limitedArea[snakeXL][snakeYL]; //获取当前位置限制区的状态
- if(snakefront == '0') //假如限制区的状态为空时调用snakeMove_empty()
- {
- snakeMove_empty();
- }
- else
- {
- if(snakefront == 'square') //假如限制区的状态为空时调用snakeMove_square()
- {
- snakeMove_square();
- eatSquare();
- }
- else //否则重新游戏,即撞到自身
- {
- restart();
- }
- }
- }
- }
- //假如蛇前面没有东西时蛇的运动
- function snakeMove_empty()
- {
- limitedArea[snakeTag[0].getAttribute('x')][snakeTag[0].getAttribute('y')] = '0'; //清空当前限制区的标志,置为0,即空地
- var borderEle = document.getElementById('border'); //获得对限制区域DIV的控制
- borderEle.removeChild(snakeTag[0]); //移除蛇的最后一节
- snake(); //在新位置新建一节蛇,以实现蛇的向前移动
- setTimeout('snakeMove()',moveSpeed);
- }
- //假如蛇前面是小方块时蛇的运动
- function snakeMove_square()
- {
- snake(); //前面是方块时在方块位置新建一节蛇
- var borderEle = document.getElementById('border'); //获得对限制区域DIV的控制
- borderEle.removeChild(squareTag[0]); //移除小方块
- square(); //重建一个小方块
- setTimeout('snakeMove()',moveSpeed);
- }
- //重新开始游戏
- function restart()
- {
- restart = confirm('游戏结束,共吃掉了' + squareNumber + '个小方块' + ',重新开始游戏?');
- if(restart)
- {
- window.location.reload(); //刷新页面,重新开始游戏
- }
- }
- //计算吃掉的小方块
- function eatSquare()
- {
- squareNumber ++; //每吃掉一个小方块吃掉的小方块数加一
- var sn = document.getElementById('sn');
- sn.style.width = gridSize*borderWidth + 2 + 'px';
- sn.style.height = '30px';
- sn.style.lineHeight = '30px';
- sn.style.position = 'absolute';
- snWidth = parseInt(sn.style.width);
- snHeight = parseInt(sn.style.height);
- //显示标记水平垂直居中
- sn.style.left = parseInt((sWidth-snWidth)/2) + 1 + 'px';
- sn.style.top = parseInt((sHeight + gridSize*borderHeight)/2 + 1) + 'px';
- sn.innerHTML = '吃掉' + squareNumber + '个方块';
- }
- ADS.addEvent(window,'load',createLimitedArea); //文档载入时加载createLimitedArea函数
- ADS.addEvent(document,'keydown',keyDown); //键盘在文档上按下时加载keyDown函数