今天做了一个贪吃蛇的小游戏,不过 蛇和食物的碰撞 出现了问题可能是我的思路出现了问题,改了3次,思路越来越清晰,但是还会出现错误,还是应该多去看看别人怎么写的比较好,网上的代码过长,不好切入。没有精力去琢磨他们的代码自己写了一个明天再改改
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>贪吃蛇</title> <style> *{padding: 0;margin: 0;} a{text-decoration: none;} li{list-style: none} html,body{display: flex;width: 100%;height: 100%;align-items: center;justify-content: center;} #box{width: 400px;height: 400px;background: #000;position: relative;} #anmite{width: 20px;height: 20px;background: #c3c3c3;position: absolute;} #food{width: 20px;height: 20px;background: #fff;position: absolute;} </style> </head> <body> <div id="box"> <span id="anmite" style="top:0px;left:0px;"></span> <span id="food" style="top:180px;left:180px;"></span> </div> <script> var score = 0; var food = document.getElementById("food"); var anmite = document.getElementById('anmite'); var speed =5; var a,b,c,d; //定义方向 function place(ele){ //查看蛇的位置 var tp = parseInt(ele.style.top); var lft = parseInt(ele.style.left); return [tp,lft]; } //食物的位置 function posit(ele){ var arr = { x:0, y:0 }; var xx = Math.floor(Math.random()*400); var yy = Math.floor(Math.random()*400); arr.x = xx; arr.y = yy; ele.style.top = arr.x+"px"; ele.style.left = arr.y+"px"; return arr; } //检查是否碰撞 function z_pz(){ var z_tp= posit(food); var z_sp= place(anmite); if(z_sp[0]==z_tp.x&&z_sp[1]==z_tp.y){ //蛇和食物已经碰撞 score++; }else{ console.log(z_sp[0],z_sp[1],z_tp.x,z_tp.y); } } setInterval(function(){ //检测碰撞没有实现 z_pz(); },100); function an(s){ //上 var tf = checkpx(anmite); if(tf){ var po = place(anmite); anmite.style.top = (po[0] - s) + 'px'; z_pz(); a = setTimeout("an(speed)",200) } } function ab(s){ //下 var tf = checkpx(anmite); if(tf){ var po = place(anmite); anmite.style.top = (po[0] + s) + 'px'; z_pz(); b = setTimeout("ab(speed)",200) } } function ac(s){ //左 var tf = checkpx(anmite); if(tf){ var po = place(anmite); anmite.style.left = (po[1] - s) + 'px'; z_pz(); c = setTimeout("ac(speed)",200) } } function aa(s){ //右 var tf = checkpx(anmite); if(tf){ var po = place(anmite); anmite.style.left = (po[1] + s) + 'px'; z_pz(); d = setTimeout("aa(speed)",200) } } function clear(){ //清理定时器 可以和暂停游戏合成一段代码 clearTimeout(a); clearTimeout(b); clearTimeout(c); clearTimeout(d); } window.onclick = function stop(){ //暂停游戏 clear(); } //检查是否超出边界 function checkpx(a){ if(place(a)[0]<0 || place(a)[0]>375){ console.log("you lose game"); stop(); return false; }else if(place(a)[1]<0 || place(a)[1]>375){ console.log("you lose game"); stop(); return false; }else{ return true; } } window.addEventListener("keydown",function direction(e){ var event = e||window.event; var key = event.keyCode; if(key==37){ //左 clear(); ac(speed); }else if(key==38){//上 clear(); an(speed); }else if(key==39){//右 clear(); aa(speed); }else if(key==40){//下 clear(); ab(speed); } }) </script> </body> </html>