|
|
当我们设计一个贪吃蛇游戏时,首先要明确几个部分:蛇的身体、食物、移动方向、吃到食物后的处理等。我们可以使用HTML、CSS和JavaScript来实现这个小游戏。
首先,让我们从HTML开始。在HTML中我们需要一个画布用来绘制游戏,以及一些基本的结构:
- <!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>贪吃蛇游戏</title>
- <link rel="stylesheet" href="style.css">
- </head>
- <body>
- <canvas id="gameCanvas"></canvas>
- <script src="script.js"></script>
- </body>
- </html>
复制代码
接下来是CSS,我们可以简单设置一下画布大小:
- body {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- margin: 0;
- }
- #gameCanvas {
- border: 1px solid black;
- }
复制代码
最后,我们来编写JavaScript,实现蛇的移动和吃食物等功能:
- const canvas = document.getElementById('gameCanvas');
- const ctx = canvas.getContext('2d');
- const snakeSize = 10;
- let snake = [
- { x: 20, y: 20 },
- { x: 10, y: 20 },
- { x: 0, y: 20 }
- ];
- let food = { x: 15, y: 15 };
- let dx = 10;
- let dy = 0;
- function drawSnakePart(snakePart) {
- ctx.fillStyle = 'green';
- ctx.fillRect(snakePart.x * snakeSize, snakePart.y * snakeSize, snakeSize, snakeSize);
- }
- function changeDirection(event) {
- const left = 37, up = 38, right = 39, down = 40;
- if (event.keyCode === left && dx !== 10) { dx = -10; dy = 0; }
- if (event.keyCode === up && dy !== 10) { dx = 0; dy = -10; }
- if (event.keyCode === right && dx !== -10) { dx = 10; dy = 0; }
- if (event.keyCode === down && dy !== -10) { dx = 0; dy = 10; }
- }
- function moveSnake() {
- const head = { x: snake[0].x + dx, y: snake[0].y + dy };
- snake.unshift(head);
- if (head.x === food.x && head.y === food.y) {
- createFood();
- } else {
- snake.pop();
- }
- }
- function createFood() {
- food.x = Math.floor(Math.random() * canvas.width / snakeSize);
- food.y = Math.floor(Math.random() * canvas.height / snakeSize);
- }
- function checkGameEnd() {
- if (snake[0].x < 0 || snake[0].x >= canvas.width / snakeSize || snake[0].y < 0 || snake[0].y >= canvas.height / snakeSize || checkCollision()) {
- clearInterval(gameLoop);
- alert('游戏结束!');
- }
- }
- function checkCollision() {
- for (let i = 1; i < snake.length; i++) {
- if (snake[i].x === snake[0].x && snake[i].y === snake[0].y) {
- return true;
- }
- }
- return false;
- }
- function drawGame() {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- drawSnake();
- drawFood();
- }
- function drawSnake() {
- snake.forEach(drawSnakePart);
- }
- function drawFood() {
- ctx.fillStyle = 'red';
- ctx.fillRect(food.x * snakeSize, food.y * snakeSize, snakeSize, snakeSize);
- }
- document.addEventListener('keydown', changeDirection);
- let gameLoop = setInterval(() => {
- moveSnake();
- checkGameEnd();
- drawGame();
- }, 100);
复制代码
这样,我们就完成了一个简单的贪吃蛇游戏代码。玩家通过键盘控制蛇的移动方向,蛇会不断移动,吃到食物后身体会增长。当蛇碰到墙壁或者自己的身体时游戏结束。希望你能够成功运行这个小游戏,享受编程的乐趣! |
|