诺基亚游戏——贪吃蛇
来源:互联网 发布:360软件管家mac版 编辑:程序博客网 时间:2024/05/21 06:19
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>贪吃蛇</title> <style type="text/css"> * { margin: 0px; padding: 0px; } .food { background-color: green; } .snake { background-color: red; } </style> <script type="text/javascript"> /* 1.创建游戏地图 2.创建食物的位置 3.创建一节蛇的位置 4.开始运行 5.重新开始游戏 6.键盘方向键的监听 7.蛇的运动制作 8.蛇前面是什么? */ var num = 15; //地图由一个一个的15*15的方块组成 var rows = 30; //每行30个小方块 var cols = 20; //每列20个小方块 var borderwidth = 5; //地图的边框宽度 var map = []; //地图为一个二维数组 var mainMap; //地图的id var sx = 0, sy = 0; //蛇的位置,即在第几个方块位置 var alldiv; //所有蛇即地图里的所有div var allspan; //所有食物即地图里的所有span var times = 200; //定时器时间 //创建一个地图 function createMap() { var bgwidth = 2 * borderwidth + num * rows; //地图的宽度 var bgheight = 2 * borderwidth + num * cols; //地图的高度 //地图的位置,处于文档中的正中央 var left = (document.documentElement.clientWidth - bgwidth) / 2; var top = (document.documentElement.clientHeight - bgheight) / 2; document.body.innerHTML = "<div id='mainMap' style='position:absolute;left:" + left + "px;top:" + top + "px;width:" + bgwidth + "px;height:" + bgheight + "px;border-width:" + borderwidth + "px;border-color:blue;border-style:solid'></div>"; //地图默认每个位置都是0即空白 for (var x = 0; x < rows; x++) { map[x] = []; for (var y = 0; y < cols; y++) { map[x][y] = 0; } } //在地图上创建一个食物 createFood(); //蛇只有第一次进入地图时是随机,之后其位置不能随机 sx = parseInt(Math.random() * rows); sy = parseInt(Math.random() * cols); if (map[sx][sy] == 0) { //创建蛇,必须保证初始化时“蛇”与“食物”的位置不重叠 createSnake(); } else { createMap(); } //获得地图下所有的div即蛇(mainMap在创建食物时已定义) alldiv = mainMap.getElementsByTagName("div"); //获得地图下所有的span即食物 allspan = mainMap.getElementsByTagName("span"); } //创建食物 function createFood() { //食物随机产生的位置,不能超出地图 var fx = parseInt(Math.random() * rows); var fy = parseInt(Math.random() * cols); var left = fx * num; var top = fy * num; //食物的定位在地图中 mainMap = document.getElementById("mainMap"); //如果在地图上是空地时才能放食物 if (map[fx][fy] == 0) { mainMap.innerHTML += "<span style='position:absolute;left:" + left + "px;top:" + top + "px;width:" + num + "px;height:" + num + "px; overflow:hidden; display:block;' class='food'></span>"; //放有食物的位置标记为f map[fx][fy] = "f"; } else { createFood(); //即遇到创建的位置不是空白时,再重新创建一下食物的位置,直到找到空白位置创建食物后此方法结束 } } //创建蛇 function createSnake() { var left = sx * num; var top = sy * num; //蛇也必须在地图中,食物已有,这里注意内容必须是+=,否则食物将被覆盖,自定义x,y保存蛇当前的位置 mainMap.innerHTML += "<div x='" + sx + "' y='" + sy + "' style='position:absolute;left:" + left + "px;top:" + top + "px;width:" + num + "px;height:" + num + "px; overflow:hidden;' class='snake'></div>"; map[sx][sy] = "s"; //把蛇的位置标记为s } //键盘监听 document.onkeydown = function () { var keyCode; if (window.navigator.appName.indexOf("Microsoft Internet Explorer") > -1) { keyCode = window.event.keyCode; } else { keyCode = arguments[0].keyCode; } switch (keyCode) { case 65: //左a dir(-1, 0); break; case 87: //上w dir(0, -1); break; case 68: //右d dir(1, 0); break; case 83: //下s dir(0, 1); break; } } var flag = 0; //标记位 //蛇移动方向 var gox, goy; function dir(x, y) { gox = x; goy = y; if (flag == 0) { speedUp(); //游戏开始,就开始提速 flag = 1; move(); //蛇移动 } } //蛇移动,移动时必须判断蛇前面是什么,食物、墙、自己、空白 function move() { sx += gox; sy += goy; if (sx < 0 || sy < 0 || sx >= rows || sy >= cols) { restartGame(); //越界 } else { snakeFront = map[sx][sy]; //蛇的前方元素 if (snakeFront == 0) { moveToblank(); //蛇前面是空白 } else if (snakeFront == "f") { //食物 eatFood(); } else { restartGame(); //撞到自己 } } } //蛇前面是空白时 function moveToblank() { map[parseInt(alldiv[0].getAttribute("x"))][parseInt(alldiv[0].getAttribute("y"))] = 0; //兼容IE和FF if (window.navigator.appName.indexOf("Microsoft Internet Explorer") > -1) { alldiv[0].removeNode(true); } else { alldiv[0].parentNode.removeChild(alldiv[0]); } createSnake(); //自动走 autoWalk(); } //蛇前面是食物时 function eatFood() { createSnake(); //创建一个新div,即蛇增长 if (window.navigator.appName.indexOf("Microsoft Internet Explorer") > -1) { allspan[0].removeNode(true); } else { allspan[0].parentNode.removeChild(allspan[0]); } createFood(); //创建一个新食物 autoWalk(); } //自动走 function autoWalk() { setTimeout("move()", times); } //蛇提速,每隔5秒提速一次 function speedUp() { times -= 5; if (times > 5) { //不能减到0 setTimeout("speedUp()", 5000); } } //重新开始游戏 function restartGame() { if (confirm("GAME OVER,重新开始?")) { window.location.reload(); //重新加载一下 } } //文档加载完成后创建地图 window.onload = createMap; </script></head><body></body></html>