0
点赞
收藏
分享

微信扫一扫

从JVM的退出机制分析Java程序的优雅关闭退出

i奇异 03-21 20:00 阅读 2

html

<div id="game-board"></div>

css

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
  background-color: #f4f4f4;
}
#game-board {
  width: 400px;
  height: 400px;
  display: grid;
  grid-template-columns: repeat(20, 1fr);
  grid-template-rows: repeat(20, 1fr);
  border: 2px solid #333;
}
.cell {
  border: 1px solid #fff;
  transition: background-color 0.1s;
}
.apple {
  background-color: red;
}
.snake {
  background-color: green;
}

js

const board = document.getElementById("game-board");
let cells = [];

for (let i = 0; i < 400; i++) {
  const cell = document.createElement("div");
  cell.classList.add("cell");
  board.appendChild(cell);
  cells.push(cell);
}

let currentSnake = [2, 1, 0];
let direction = 1;
let appleIndex = 0;
let speed = 300;
let intervalId = 0;

function startGame() {
  currentSnake.forEach((index) => cells[index].classList.remove("snake"));
  cells[appleIndex].classList.remove("apple");
  clearInterval(intervalId);
  currentSnake = [2, 1, 0];
  direction = 1;
  speed = 300;
  generateApple();
  currentSnake.forEach((index) => cells[index].classList.add("snake"));
  intervalId = setInterval(move, speed);
}

function move() {
  if (
    (currentSnake[0] + 1 >= 400 && direction === 20) ||
    (currentSnake[0] - 20 < 0 && direction === -20) ||
    (currentSnake[0] % 20 === 0 && direction === -1) ||
    (currentSnake[0] + 1 === currentSnake[1] && direction === 1) ||
    (currentSnake[0] - 1 === currentSnake[1] && direction === -1) ||
    (currentSnake[0] - 20 === currentSnake[1] && direction === -20) ||
    (currentSnake[0] + 20 === currentSnake[1] && direction === 20)
  ) {
    alert("Game over!");
    return clearInterval(intervalId);
  }

  const tail = currentSnake.pop();
  cells[tail].classList.remove("snake");
  currentSnake.unshift(currentSnake[0] + direction);

  if (cells[currentSnake[0]].classList.contains("apple")) {
    cells[currentSnake[0]].classList.remove("apple");
    cells[tail].classList.add("snake");
    currentSnake.push(tail);
    generateApple();
    speed -= 10;
    clearInterval(intervalId);
    intervalId = setInterval(move, speed);
  }

  cells[currentSnake[0]].classList.add("snake");
}

function generateApple() {
  do {
    appleIndex = Math.floor(Math.random() * 400);
  } while (cells[appleIndex].classList.contains("snake"));
  cells[appleIndex].classList.add("apple");
}

function control(e) {
  if (e.keyCode === 39) {
    direction = 1;
  } else if (e.keyCode === 38) {
    direction = -20;
  } else if (e.keyCode === 37) {
    direction = -1;
  } else if (e.keyCode === 40) {
    direction = 20;
  }
}

document.addEventListener("keyup", control);
startGame();
举报

相关推荐

0 条评论