<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0px; padding: 0px; } .show { width: 400px; margin: 100px auto 0px; } .game { width: 400px; height: 400px; background-color: aqua; position: relative; } .userGame { width: 10px; height: 10px; background-color: #000; position: absolute; top: 0px; left: 0px; } .foot { width: 10px; height: 10px; background-color: red; position: absolute; top: 0px; left: 0px; } </style> </head> <body> <div class="show"> <div class="game"> <div class="foot"></div> <div class="userGame" style="background-color: gold; z-index: 99;"></div> </div> <h1>小蛇长度: <span>1</span> </h1> </div> </body> </html> <script src="./../jquery-3.4.1/jquery_3.4.1.js"></script> <script> $(function () { //记录蛇身体小点的位置 let seatList = [{ "top": 0, "left": 0 }]; //产生事物小点并记录 let footSeat = foot(seatList); //上次操作的方向 //初始向右移动 let direction_before = 39; //上次操作的反方向,避免回头操作 let direction_before_no = 37; //游戏结束标识符(id) let gameFlag = null; gameFlag = window.setInterval(function () { //获得小蛇头部的位置x\y坐标 let seat_x = parseInt($(".userGame").eq(0).css("left")); let seat_y = parseInt($(".userGame").eq(0).css("top")); //是否回头操作判断 //判断键盘输入的信息方向键 switch (direction_before) { case 37://上 seat_x -= 10; break; case 38://右 seat_y -= 10; break; case 39://下 seat_x += 10; break; case 40://左 seat_y += 10; break; } //边界移动判断 if (seat_x < 0) seat_x = 390; if (seat_x > 390) seat_x = 0; if (seat_y < 0) seat_y = 390; if (seat_y > 390) seat_y = 0; //将小蛇移动后头部信息添加进蛇身体小点集合中(假设吃到事物) seatList.unshift({ "top": seat_y, "left": seat_x }); //判断是否吃到事物 if (seat_x == footSeat.left & seat_y == footSeat.top) { //添加新的小点 $(".game").append("<div class='userGame'></div>"); //生成新的食物点 footSeat = foot(seatList); //小蛇长度加1 $("span").html(parseInt($("span").text()) + 1); } else { //如果没有吃到事物就删除最后一个小点 seatList.pop(); } //给小蛇的每个点赋予新的位置信息 let userGamelength = $(".userGame").length; for (let i = 0; i < userGamelength; i++) { $(".userGame").eq(i).css({ "top": seatList[i].top + "px", "left": seatList[i].left + "px" }); } //判断是否结束,吃到自己的身体及游戏是否结束 for (let i = 1; i < userGamelength; i++) { if (seat_x == seatList[i].left & seat_y == seatList[i].top) { window.clearInterval(gameFlag); $("h1").html("游戏结束!小蛇长度为:" + $("span").text()); } } }, 100); //移动键盘事件 $(document).keydown(function (event) { //是否回头操作判断 if (event.keyCode != direction_before_no) { //判断键盘输入的信息方向键 switch (event.keyCode) { case 37://上 direction_before = 37; break; case 38://右 direction_before = 38; break; case 39://下 direction_before = 39; break; case 40://左 direction_before = 40; break; } //上次操作记录反方向 switch (event.keyCode) { case 37://上 direction_before_no = 39; break; case 38://右 direction_before_no = 40; break; case 39://下 direction_before_no = 37; break; case 40://左 direction_before_no = 38; break; } } }); }); //事物生成函数 function foot(seatList) { //事物的位置信息 let foot_seat_x = -10; let foot_seat_y = -10; //生成事物,且不能与小蛇身体重合 let userGamelength = seatList.length; for (let i = 0; i < userGamelength; i++) { do { foot_seat_x = Math.floor(Math.random() * 40) * 10; foot_seat_y = Math.floor(Math.random() * 40) * 10; if (foot_seat_x == seatList[i].left & foot_seat_y == seatList[i].top) { i = 0; } else { break; } } while (true); } //事物位置改变 $(".foot").css({ "top": foot_seat_y + "px", "left": foot_seat_x + "px" }); //返回事物位置信息 return { "top": foot_seat_y, "left": foot_seat_x }; } </script>
!!!!!需要导入jquery文件使用