<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.root {
display: flex;
flex-wrap: wrap;
border: 1px #ddd solid;
}
.player {
background: grey;
}
.item {
box-sizing: border-box;
border: 1px #ddd solid;
}
.food {
background-color: orange;
}
</style>
</head>
<body>
<div class="root"></div>
<script>
let size = 20,
n = 10;
let table = [],
res = [];
let player = [[1, 1]];
let root = document.querySelector(".root");
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
const isEat = Math.random() > 0.9 ? true : false;
table.push(
`<div class = "item ${isEat ? "food" : ""
}" data-v=_${i}-${j} style="width:${size}px;height:${size}px"}></div>`
);
}
}
const update = function () {
document
.querySelectorAll(".player")
.forEach((item) => item.classList.remove(".player"));
player.forEach((item) => {
const local = item.join("-");
document.querySelector(`[data-v=_${local}]`).classList.add("player");
});
};
root.innerHTML = table.join("");
root.style.width = `${size * n}px`;
root.style.height = `${size * n}px`;
let key = "";
document.addEventListener("keydown", (e) => {
key = e.key;
});
const time1 = setInterval(() => {
if (key) {
const tmp1 = player.slice(0, player.length - 1);
console.log(tmp1);
const tmp = JSON.parse(JSON.stringify(tmp1));
switch (key) {
case "w":
player[0][0] -= 1;
break;
case "s":
player[0][0] += 1;
break;
case "a":
player[0][1] -= 1;
break;
case "d":
player[0][1] += 1;
break;
}
const newHead = player[0].join("-");
const judge = document.querySelector(`div[data-v=_${newHead}]`);
if (!judge) {
clearInterval(time1);
alert("Out");
} else {
for (let i = 1; i < player.length; i++) {
player[i] = tmp[i - 1];
}
if (judge.className.indexOf("food") >= 0) {
judge.classList.remove("food");
player.push([...player[0]]);
}
update();
}
}
}, 500);
update();
</script>
</body>
</html>