科学教育

搜索
楼主: 廖晗瑞
打印 上一主题 下一主题

廖晗瑞

[复制链接]

5

主题

31

帖子

86

积分

注册会员

Rank: 2

积分
86
21#
 楼主| 发表于 2024-8-14 21:48:50 | 只看该作者
帮我把地图扩大一点
回复 支持 反对

使用道具 举报

5

主题

31

帖子

86

积分

注册会员

Rank: 2

积分
86
22#
 楼主| 发表于 2024-8-14 22:01:22 | 只看该作者
可不可以再帮我整合一下
回复 支持 反对

使用道具 举报

5

主题

31

帖子

86

积分

注册会员

Rank: 2

积分
86
23#
 楼主| 发表于 2024-8-14 22:17:33 | 只看该作者
kaia 发表于 2024-8-14 19:26
好的,我们来详细讲解一下如何添加音效到贪吃蛇游戏中。

### 第一步:准备音效文件

我不想要音效,能不能帮我去除音效
回复 支持 反对

使用道具 举报

0

主题

1147

帖子

1718

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1718
24#
发表于 2024-8-14 22:18:14 | 只看该作者
廖晗瑞 发表于 2024-08-14 22:17
我不想要音效,能不能帮我去除音效


当然可以!我们来移除音效相关的内容。下面是去除音效后的代码:

### HTML文件
首先,删除HTML中引入音效文件的部分:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>贪吃蛇游戏</title>
  7.     <style>
  8.         body {
  9.             display: flex;
  10.             justify-content: center;
  11.             align-items: center;
  12.             height: 100vh;
  13.             margin: 0;
  14.             font-family: Arial, sans-serif;
  15.             background-color: #f0f0f0;
  16.         }
  17.         #gameCanvas {
  18.             border: 1px solid #000;
  19.             background-color: #fff;
  20.         }
  21.     </style>
  22. </head>
  23. <body>
  24.    
  25.     <canvas id="gameCanvas" width="400" height="400"></canvas>

  26.     <script src="snake.js"></script>
  27. </body>
  28. </html>
复制代码


### JavaScript文件
修改JavaScript代码,去除与音效相关的逻辑:

  1. const canvas = document.getElementById('gameCanvas');
  2. const context = canvas.getContext('2d');

  3. const box = 20; // 每个格子的大小
  4. let snake, food, direction, score, game, gameInterval, timeCounter;
  5. let highScore = localStorage.getItem('highScore') || 0; // 从localStorage读取最高得分
  6. let timeElapsed = 0;

  7. const difficultySettings = {
  8.     easy: 150,
  9.     normal: 100,
  10.     hard: 50
  11. };

  12. const skins = {
  13.     default: { snake: 'black', food: 'red' },
  14.     blue: { snake: 'blue', food: 'lightblue' },
  15.     red: { snake: 'red', food: 'orange' }
  16. };

  17. // 定义多个地图的障碍物位置
  18. const maps = {
  19.     map1: [],
  20.     map2: [],
  21.     map3: []
  22. };

  23. let obstacles = [];

  24. document.getElementById('startButton').addEventListener('click', startGame);
  25. document.getElementById('pauseButton').addEventListener('click', pauseGame);

  26. function startGame() {
  27.     document.getElementById('startButton').style.display = 'none';
  28.     document.getElementById('pauseButton').style.display = 'block';
  29.     document.getElementById('gameCanvas').style.display = 'block';

  30.     resetGame();
  31.     const difficulty = document.getElementById('difficulty').value;
  32.     gameInterval = difficultySettings[difficulty];
  33.     game = setInterval(drawGame, gameInterval);
  34.     timeCounter = setInterval(updateTime, 1000); // 每秒更新一次时间
  35. }

  36. function pauseGame() {
  37.     if (game) {
  38.         clearInterval(game);
  39.         clearInterval(timeCounter);
  40.         game = null;
  41.         timeCounter = null;
  42.         document.getElementById('pauseButton').innerText = '继续';
  43.     } else {
  44.         const difficulty = document.getElementById('difficulty').value;
  45.         gameInterval = difficultySettings[difficulty];
  46.         game = setInterval(drawGame, gameInterval);
  47.         timeCounter = setInterval(updateTime, 1000); // 每秒更新一次时间
  48.         document.getElementById('pauseButton').innerText = '暂停';
  49.     }
  50. }

  51. function resetGame() {
  52.     snake = [{ x: 9 * box, y: 10 * box }];
  53.     food = generateFood();
  54.     score = 0;
  55.     direction = undefined;
  56.     timeElapsed = 0;
  57.     document.getElementById('time').innerText = timeElapsed;
  58.     loadMap(); // 加载选中的地图
  59. }

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

  61. function changeDirection(event) {
  62.     const keyPressed = event.keyCode;
  63.     if (keyPressed === 37 && direction !== 'RIGHT') direction = 'LEFT';
  64.     if (keyPressed === 38 && direction !== 'DOWN') direction = 'UP';
  65.     if (keyPressed === 39 && direction !== 'LEFT') direction = 'RIGHT';
  66.     if (keyPressed === 40 && direction !== 'UP') direction = 'DOWN';
  67. }

  68. function drawGame() {
  69.     context.clearRect(0, 0, canvas.width, canvas.height);

  70.     const skin = document.getElementById('skin').value;
  71.     const colors = skins[skin];

  72.     for (let i = 0; i < snake.length; i++) {
  73.         context.fillStyle = i === 0 ? 'green' : colors.snake;
  74.         context.fillRect(snake[i].x, snake[i].y, box, box);
  75.     }

  76.     context.fillStyle = colors.food;
  77.     context.fillRect(food.x, food.y, box, box);

  78.     drawObstacles();

  79.     let snakeX = snake[0].x;
  80.     let snakeY = snake[0].y;

  81.     if (direction === 'LEFT') snakeX -= box;
  82.     if (direction === 'UP') snakeY -= box;
  83.     if (direction === 'RIGHT') snakeX += box;
  84.     if (direction === 'DOWN') snakeY += box;

  85.     if (snakeX === food.x && snakeY === food.y) {
  86.         score++;
  87.         updateHighScore();
  88.         food = generateFood();
  89.     } else {
  90.         snake.pop();
  91.     }

  92.     let newHead = { x: snakeX, y: snakeY };

  93.     if (snakeX < 0) snakeX = canvas.width - box;
  94.     if (snakeY < 0) snakeY = canvas.height - box;
  95.     if (snakeX >= canvas.width) snakeX = 0;
  96.     if (snakeY >= canvas.height) snakeY = 0;

  97.     if (collision(newHead, snake) || collision(newHead, obstacles)) {
  98.         clearInterval(game);
  99.         clearInterval(timeCounter);
  100.         alert('游戏结束');
  101.         return;
  102.     }

  103.     snake.unshift(newHead);

  104.     context.fillStyle = 'black';
  105.     context.font = '20px Arial';
  106.     context.fillText(`得分: ${score}`, 5, canvas.height - 5);
  107. }

  108. function collision(head, array) {
  109.     for (let i = 0; i < array.length; i++) {
  110.         if (head.x === array[i].x && head.y === array[i].y) {
  111.             return true;
  112.         }
  113.     }
  114.     return false;
  115. }

  116. function updateHighScore() {
  117.     if (score > highScore) {
  118.         highScore = score;
  119.         localStorage.setItem('highScore', highScore); // 保存最高得分到localStorage
  120.         document.getElementById('highScore').innerText = highScore;
  121.     }
  122. }

  123. function updateTime() {
  124.     timeElapsed++;
  125.     document.getElementById('time').innerText = timeElapsed;
  126. }

  127. function generateFood() {
  128.     let newFood;
  129.     do {
  130.         newFood = {
  131.             x: Math.floor(Math.random() * 19 + 1) * box,
  132.             y: Math.floor(Math.random() * 19 + 1) * box
  133.         };
  134.     } while (collision(newFood, snake) || collision(newFood, obstacles));
  135.     return newFood;
  136. }

  137. function loadMap() {
  138.     const selectedMap = document.getElementById('map').value;
  139.     obstacles = maps[selectedMap] ? [...maps[selectedMap]] : [];
  140. }

  141. function drawObstacles() {
  142.     context.fillStyle = 'grey';
  143.     for (let i = 0; i < obstacles.length; i++) {
  144.         context.fillRect(obstacles[i].x, obstacles[i].y, box, box);
  145.     }
  146. }
复制代码


### 总结

通过删除HTML和JavaScript中与音效相关的代码,你现在有了一个不带音效的贪吃蛇游戏。如果你有其他问题或需要进一步的帮助,请随时告诉我!享受编程的乐趣吧!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表