1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| const snake = document.getElementById("snake"); const snakes = snake.getElementsByTagName("div"); const food = document.querySelector("#food"); const scoreElement = document.getElementById("score"); const levelElement = document.getElementById("level");
let dir, keyActive = true, gaveOver = false, level = 1, score = 0, speed = 300;
const keyArr = ["ArrowUp", "ArrowDown", "ArrowRight", "ArrowLeft"];
const dirObj = { ArrowUp: "ArrowDown", ArrowDown: "ArrowUp", ArrowRight: "ArrowLeft", ArrowLeft: "ArrowRight", };
document.addEventListener("keydown", (e) => { if ( keyActive && keyArr.includes(e.key) && (snakes.length < 2 || dirObj[dir] !== e.key) ) { dir = e.key; keyActive = false; } });
function changeFood() { const x = Math.floor(Math.random() * 30) * 10; const y = Math.floor(Math.random() * 30) * 10; food.style.top = y + "px"; food.style.left = x + "px"; }
setTimeout(function move() { const head = snakes[0]; let y = head.offsetTop, x = head.offsetLeft; switch (dir) { case "ArrowUp": y -= 10; break; case "ArrowDown": y += 10; break; case "ArrowRight": x += 10; break; case "ArrowLeft": x -= 10; break; } if ( food.offsetTop === head.offsetTop && food.offsetLeft === head.offsetLeft ) { changeFood(); snake.insertAdjacentHTML("beforeend", "<div/>"); score++; scoreElement.textContent = score; if (score % 10 === 0 && level < 14) { level++; levelElement.textContent = level; speed = speed - level * 20; } }
if (x < 0 || x > 290 || y < 0 || y > 290) { alert(`撞墙了,游戏结束!\n您的分数为${score}分`); return; }
if (snakes.length > 1) { for (let i = 0; i < snakes.length - 1; i++) { if (snakes[i].offsetTop === y && snakes[i].offsetLeft === x) { alert(`撞自己了,游戏结束!\n您的分数为${score}分`); return; } } } const tail = snakes[snakes.length - 1]; tail.style.left = x + "px"; tail.style.top = y + "px"; snake.insertAdjacentElement("afterbegin", tail); keyActive = true;
setTimeout(move, speed); }, speed);
|