美文网首页
网页版贪吃蛇

网页版贪吃蛇

作者: that_is_this | 来源:发表于2023-05-25 15:23 被阅读0次

我们可以使用HTML、CSS和JavaScript来编写一个网页版的贪吃蛇游戏。下面是一个基本的项目结构层级以及相应的代码文件:

项目文件结构:

  • index.html
  • css/
    • style.css
  • js/
    • snake.js

各个文件的示例代码如下:

  1. index.html
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
    <canvas id="game-board" width="600" height="600"></canvas>
    <script src="js/snake.js"></script>
</body>
</html>
  1. style.css
body {
    background-color: #000;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    overflow: hidden;
}

#game-board {
    background-color: #fff;
}
  1. snake.js

这是一个简化版的贪吃蛇游戏逻辑,为了简化,我们没有包括碰撞检测或者游戏结束条件:

let canvas = document.getElementById('game-board');
let context = canvas.getContext('2d');

let box = 20;
let snake = [];
snake[0] = {
    x: 10 * box,
    y: 10 * box
}

let direction = "right";

function createBackground() {
    context.fillStyle = "lightgreen";
    context.fillRect(0, 0, 30*box, 30*box);
}

function createSnake() {
    for(i = 0; i < snake.length; i++) {
        context.fillStyle = "green";
        context.fillRect(snake[i].x, snake[i].y, box, box);
    }
}

function updateSnake() {
    let snakeX = snake[0].x;
    let snakeY = snake[0].y;

    if(direction == "right") snakeX += box;
    if(direction == "left") snakeX -= box;
    if(direction == "up") snakeY -= box;
    if(direction == "down") snakeY += box;

    snake.pop();
    let newHead = {
        x: snakeX,
        y: snakeY
    }

    snake.unshift(newHead);
}

function drawGame() {
    createBackground();
    createSnake();
    updateSnake();
}

let game = setInterval(drawGame, 100);

这个游戏的工作原理是通过JavaScript来控制一个canvas元素,用来绘制贪吃蛇和游戏背景。游戏的主循环是drawGame函数,它每100毫秒执行一次,用来更新屏幕上的贪吃蛇的位置。根据方向,蛇的头部位置将更新,尾部的位置将被移除,头部的新位置将被加入到蛇的数组。

请注意,这只是一个基本的贪吃蛇游戏,你可能还需要添加更多的功能,例如检测碰撞、添加食物、增加游戏结束的条件等等。

对,这个简单的贪吃蛇游戏示例没有包含方向控制的代码。为了能够使用键盘控制蛇的方向,我们需要添加一个键盘事件监听器来改变direction变量的值。

snake.js 文件的代码中,你可以添加如下的代码:

document.addEventListener('keydown', updateDirection);

function updateDirection(event) {
    if(event.keyCode == 37 && direction != "right") direction = "left";
    if(event.keyCode == 38 && direction != "down") direction = "up";
    if(event.keyCode == 39 && direction != "left") direction = "right";
    if(event.keyCode == 40 && direction != "up") direction = "down";
}

这段代码监听键盘的按键事件,当按下左(37)、上(38)、右(39)或下(40)箭头键时,它会更新 direction 变量的值。我们还要检查当前的方向,以防止蛇直接反向运动。例如,如果蛇正在向右移动,我们不希望用户能直接让蛇向左移动,因为这将导致蛇立即碰到自己的身体。

添加了这段代码之后,你应该能够使用箭头键来控制贪吃蛇的方向了。

确实,我们还没有在游戏中添加食物。让我们来添加一些食物,这样蛇就有东西可以吃了。

snake.js 文件的代码中,我们可以添加一个食物的对象,并且在游戏的主循环中绘制食物。同时,我们还需要在 updateSnake 函数中检查蛇是否吃到了食物。如果吃到了,就增加蛇的长度,并在随机位置生成新的食物。

以下是更新后的 snake.js 文件:

let canvas = document.getElementById('game-board');
let context = canvas.getContext('2d');

let box = 20;
let snake = [];
snake[0] = {
    x: 10 * box,
    y: 10 * box
}

let food = {
    x: Math.floor(Math.random() * 30) * box,
    y: Math.floor(Math.random() * 30) * box
}

let direction = "right";

function createBackground() {
    context.fillStyle = "lightgreen";
    context.fillRect(0, 0, 30*box, 30*box);
}

function createSnake() {
    for(i = 0; i < snake.length; i++) {
        context.fillStyle = "green";
        context.fillRect(snake[i].x, snake[i].y, box, box);
    }
}

function drawFood() {
    context.fillStyle = "red";
    context.fillRect(food.x, food.y, box, box);
}

document.addEventListener('keydown', updateDirection);

function updateDirection(event) {
    if(event.keyCode == 37 && direction != "right") direction = "left";
    if(event.keyCode == 38 && direction != "down") direction = "up";
    if(event.keyCode == 39 && direction != "left") direction = "right";
    if(event.keyCode == 40 && direction != "up") direction = "down";
}

function updateSnake() {
    let snakeX = snake[0].x;
    let snakeY = snake[0].y;

    if(direction == "right") snakeX += box;
    if(direction == "left") snakeX -= box;
    if(direction == "up") snakeY -= box;
    if(direction == "down") snakeY += box;

    if(snakeX != food.x || snakeY != food.y) {
        snake.pop();
    } else {
        food.x = Math.floor(Math.random() * 30) * box;
        food.y = Math.floor(Math.random() * 30) * box;
    }

    let newHead = {
        x: snakeX,
        y: snakeY
    }

    snake.unshift(newHead);
}

function drawGame() {
    createBackground();
    createSnake();
    drawFood();
    updateSnake();
}

let game = setInterval(drawGame, 100);

现在,每次蛇吃到食物时,食物就会在画布的随机位置重新出现,同时蛇的长度也会增加。

相关文章

网友评论

      本文标题:网页版贪吃蛇

      本文链接:https://www.haomeiwen.com/subject/ltyhedtx.html