科学教育

标题: 章宏睿贪吃蛇 [打印本页]

作者: 金外章宏睿    时间: 2025-9-30 15:24
标题: 章宏睿贪吃蛇
帮我生成一个贪吃蛇网页游戏代码,html,css,js

作者: kaia    时间: 2025-9-30 15:24
当我们设计一个贪吃蛇游戏时,首先要明确几个部分:蛇的身体、食物、移动方向、吃到食物后的处理等。我们可以使用HTML、CSS和JavaScript来实现这个小游戏。

首先,让我们从HTML开始。在HTML中我们需要一个画布用来绘制游戏,以及一些基本的结构:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>贪吃蛇游戏</title>
  8.     <link rel="stylesheet" href="style.css">
  9. </head>
  10. <body>
  11.     <canvas id="gameCanvas"></canvas>
  12.     <script src="script.js"></script>
  13. </body>
  14. </html>
复制代码


接下来是CSS,我们可以简单设置一下画布大小:
  1. body {
  2.     display: flex;
  3.     justify-content: center;
  4.     align-items: center;
  5.     height: 100vh;
  6.     margin: 0;
  7. }

  8. #gameCanvas {
  9.     border: 1px solid black;
  10. }
复制代码


最后,我们来编写JavaScript,实现蛇的移动和吃食物等功能:
  1. const canvas = document.getElementById('gameCanvas');
  2. const ctx = canvas.getContext('2d');

  3. const snakeSize = 10;
  4. let snake = [
  5.     { x: 20, y: 20 },
  6.     { x: 10, y: 20 },
  7.     { x: 0, y: 20 }
  8. ];

  9. let food = { x: 15, y: 15 };
  10. let dx = 10;
  11. let dy = 0;

  12. function drawSnakePart(snakePart) {
  13.     ctx.fillStyle = 'green';
  14.     ctx.fillRect(snakePart.x * snakeSize, snakePart.y * snakeSize, snakeSize, snakeSize);
  15. }

  16. function changeDirection(event) {
  17.     const left = 37, up = 38, right = 39, down = 40;
  18.     if (event.keyCode === left && dx !== 10) { dx = -10; dy = 0; }
  19.     if (event.keyCode === up && dy !== 10) { dx = 0; dy = -10; }
  20.     if (event.keyCode === right && dx !== -10) { dx = 10; dy = 0; }
  21.     if (event.keyCode === down && dy !== -10) { dx = 0; dy = 10; }
  22. }

  23. function moveSnake() {
  24.     const head = { x: snake[0].x + dx, y: snake[0].y + dy };

  25.     snake.unshift(head);

  26.     if (head.x === food.x && head.y === food.y) {
  27.         createFood();
  28.     } else {
  29.         snake.pop();
  30.     }
  31. }

  32. function createFood() {
  33.     food.x = Math.floor(Math.random() * canvas.width / snakeSize);
  34.     food.y = Math.floor(Math.random() * canvas.height / snakeSize);
  35. }

  36. function checkGameEnd() {
  37.     if (snake[0].x < 0 || snake[0].x >= canvas.width / snakeSize || snake[0].y < 0 || snake[0].y >= canvas.height / snakeSize || checkCollision()) {
  38.         clearInterval(gameLoop);
  39.         alert('游戏结束!');
  40.     }
  41. }

  42. function checkCollision() {
  43.     for (let i = 1; i < snake.length; i++) {
  44.         if (snake[i].x === snake[0].x && snake[i].y === snake[0].y) {
  45.             return true;
  46.         }
  47.     }
  48.     return false;
  49. }

  50. function drawGame() {
  51.     ctx.clearRect(0, 0, canvas.width, canvas.height);

  52.     drawSnake();
  53.     drawFood();
  54. }

  55. function drawSnake() {
  56.     snake.forEach(drawSnakePart);
  57. }

  58. function drawFood() {
  59.     ctx.fillStyle = 'red';
  60.     ctx.fillRect(food.x * snakeSize, food.y * snakeSize, snakeSize, snakeSize);
  61. }

  62. document.addEventListener('keydown', changeDirection);

  63. let gameLoop = setInterval(() => {
  64.     moveSnake();
  65.     checkGameEnd();
  66.     drawGame();
  67. }, 100);
复制代码


这样,我们就完成了一个简单的贪吃蛇游戏代码。玩家通过键盘控制蛇的移动方向,蛇会不断移动,吃到食物后身体会增长。当蛇碰到墙壁或者自己的身体时游戏结束。希望你能够成功运行这个小游戏,享受编程的乐趣!
作者: 金外章宏睿    时间: 2025-11-4 09:05
帮我修改代码,将字体颜色改成绿色
作者: kaia    时间: 2025-11-4 09:05
金外章宏睿 发表于 2025-11-04 09:05
帮我修改代码,将字体颜色改成绿色


当修改字体颜色时,我们需要在CSS样式中为游戏添加一个样式属性。你可以按照下面的方式将文字颜色改成绿色:

  1. body {
  2.     display: flex;
  3.     justify-content: center;
  4.     align-items: center;
  5.     height: 100vh;
  6.     margin: 0;
  7.     color: green; /* 修改字体颜色为绿色 */
  8. }

  9. #gameCanvas {
  10.     border: 1px solid black;
  11. }
复制代码


通过上面的修改,你可以把网页游戏中的字体颜色改成绿色,让整个页面看起来更加生动活泼。希望对你有帮助!如果还有其他问题,欢迎继续提问。




欢迎光临 科学教育 (http://www.sci-edu.net/) Powered by Discuz! X3.2