科学教育

搜索
楼主: 林奕锦
打印 上一主题 下一主题

林奕锦1

[复制链接]

8

主题

62

帖子

184

积分

注册会员

Rank: 2

积分
184
41#
 楼主| 发表于 2024-7-23 15:45:34 | 只看该作者
kaia 发表于 2024-7-21 09:52
可以的!你只需要在CSS文件中修改`canvas`元素的背景颜色即可。我们将背景颜色改为浅蓝色(例如#ADD8E6) ...

请将网页文本改为英文
回复 支持 反对

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
42#
发表于 2024-7-23 15:46:21 | 只看该作者
林奕锦 发表于 2024-07-23 15:45
请将网页文本改为英文


好的!我会将你的网页文本改为英文。

### 1. 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>Snake Game</title>
  7.     <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10.     <h1>Snake Game</h1>
  11.     <button id="startButton">Start Game</button>
  12.     <canvas id="gameCanvas" width="400" height="400"></canvas>
  13.     <div id="score">Score: 0</div>
  14.     <script src="snake_game.js"></script>
  15. </body>
  16. </html>
复制代码


### 2. JavaScript 部分
我们不需要对逻辑部分做大改动,只需要确保提示信息是英文的。例如,游戏结束时的提示:

  1. // 获取画布并设置上下文
  2. const canvas = document.getElementById('gameCanvas');
  3. const ctx = canvas.getContext('2d');

  4. // 定义蛇的初始状态
  5. let snake = [
  6.     {x: 150, y: 150},
  7.     {x: 140, y: 150},
  8.     {x: 130, y: 150},
  9.     {x: 120, y: 150},
  10.     {x: 110, y: 150}
  11. ];

  12. // 初始化食物位置
  13. let foodX;
  14. let foodY;

  15. // 初始速度 - 蛇向右移动
  16. let dx = 10;
  17. let dy = 0;

  18. // 游戏运行标志
  19. let isGameRunning = true;

  20. // 创建游戏循环
  21. function main() {
  22.     if (isGameRunning) {
  23.         setTimeout(function onTick() {
  24.             clearCanvas();
  25.             moveSnake();
  26.             drawSnake();
  27.             drawFood();
  28.             checkGameOver();
  29.             main();
  30.         }, 100);
  31.     } else {
  32.         alert("Game Over!");
  33.     }
  34. }

  35. // 清除画布
  36. function clearCanvas() {
  37.     ctx.fillStyle = "black";
  38.     ctx.fillRect(0, 0, canvas.width, canvas.height);
  39. }

  40. // 绘制蛇
  41. function drawSnake() {
  42.     snake.forEach(snakePart => {
  43.         ctx.fillStyle = 'lightgreen';
  44.         ctx.strokestyle = 'darkgreen';
  45.         ctx.fillRect(snakePart.x, snakePart.y, 10, 10);
  46.         ctx.strokeRect(snakePart.x, snakePart.y, 10, 10);
  47.     });
  48. }

  49. // 移动蛇
  50. function moveSnake() {
  51.     const head = {x: snake[0].x + dx, y: snake[0].y + dy};
  52.     snake.unshift(head);

  53.     // 检查蛇是否吃到食物
  54.     if (snake[0].x === foodX && snake[0].y === foodY) {
  55.         createFood();
  56.     } else {
  57.         snake.pop();
  58.     }
  59. }

  60. // 随机生成食物位置
  61. function createFood() {
  62.     foodX = Math.floor((Math.random() * canvas.width) / 10) * 10;
  63.     foodY = Math.floor((Math.random() * canvas.height) / 10) * 10;

  64.     // 确保食物不会生成在蛇身体上
  65.     snake.forEach(snakePart => {
  66.         if (snakePart.x === foodX && snakePart.y === foodY) {
  67.             createFood();
  68.         }
  69.     });
  70. }

  71. // 绘制食物
  72. function drawFood() {
  73.     ctx.fillStyle = 'red';
  74.     ctx.strokestyle = 'darkred';
  75.     ctx.fillRect(foodX, foodY, 10, 10);
  76.     ctx.strokeRect(foodX, foodY, 10, 10);
  77. }

  78. // 检查游戏是否结束
  79. function checkGameOver() {
  80.     for (let i = 4; i < snake.length; i++) {
  81.         if (snake[0].x === snake[i].x && snake[0].y === snake[i].y) {
  82.             isGameRunning = false;
  83.         }
  84.     }

  85.     const hitLeftWall = snake[0].x < 0;
  86.     const hitRightWall = snake[0].x >= canvas.width;
  87.     const hitTopWall = snake[0].y < 0;
  88.     const hitBottomWall = snake[0].y >= canvas.height;

  89.     if (hitLeftWall || hitRightWall || hitTopWall || hitBottomWall) {
  90.         isGameRunning = false;
  91.     }
  92. }

  93. // 更改方向
  94. document.addEventListener("keydown", changeDirection);

  95. function changeDirection(event) {
  96.     const LEFT_KEY = 37;
  97.     const RIGHT_KEY = 39;
  98.     const UP_KEY = 38;
  99.     const DOWN_KEY = 40;

  100.     const keyPressed = event.keyCode;
  101.     const goingUp = dy === -10;
  102.     const goingDown = dy === 10;
  103.     const goingRight = dx === 10;
  104.     const goingLeft = dx === -10;

  105.     if (keyPressed === LEFT_KEY && !goingRight) {
  106.         dx = -10;
  107.         dy = 0;
  108.     }

  109.     if (keyPressed === UP_KEY && !goingDown) {
  110.         dx = 0;
  111.         dy = -10;
  112.     }

  113.     if (keyPressed === RIGHT_KEY && !goingLeft) {
  114.         dx = 10;
  115.         dy = 0;
  116.     }

  117.     if (keyPressed === DOWN_KEY && !goingUp) {
  118.         dx = 0;
  119.         dy = 10;
  120.     }
  121. }

  122. // 开始游戏
  123. createFood();
  124. main();
复制代码


### 3. CSS 部分
我们之前已经修改了背景颜色,这里再重复一下,以确保你有完整的代码:

  1. /* 设置画布和页面样式 */
  2. canvas {
  3.     background-color: #ADD8E6; /* 浅蓝色背景 */
  4.     display: block;           /* 将画布显示为块状元素 */
  5.     margin: 0 auto;           /* 居中对齐 */
  6. }

  7. /* 添加基本页面样式 */
  8. body {
  9.     display: flex;
  10.     flex-direction: column;
  11.     align-items: center;
  12.     justify-content: center;
  13.     height: 100vh;
  14.     margin: 0;
  15. }

  16. h1 {
  17.     color: #333;
  18. }

  19. #startButton {
  20.     padding: 10px 20px;
  21.     font-size: 16px;
  22.     margin-bottom: 20px;
  23.     background-color: #0000FF; /* 蓝色背景 */
  24.     color: white;              /* 白色文字 */
  25.     border: none;              /* 无边框 */
  26.     border-radius: 5px;        /* 圆角边框 */
  27.     cursor: pointer;           /* 鼠标悬停变成指针 */
  28. }

  29. #startButton:hover {
  30.     background-color: #0000cc; /* 鼠标悬停时颜色变深 */
  31. }

  32. #score {
  33.     margin-top: 20px;
  34.     font-size: 20px;
  35.     color: #333;
  36. }
复制代码


以上就是将生成的网页文本都改为英文后的代码。如果你还有其他的问题或者需要进一步的帮助,请告诉我!
回复 支持 反对

使用道具 举报

8

主题

62

帖子

184

积分

注册会员

Rank: 2

积分
184
43#
 楼主| 发表于 2024-7-23 15:51:52 | 只看该作者
kaia 发表于 2024-7-23 15:46
好的!我会将你的网页文本改为英文。

### 1. HTML 部分

为什么代码被修改了?还没点击按钮游戏就直接开始了
回复 支持 反对

使用道具 举报

8

主题

62

帖子

184

积分

注册会员

Rank: 2

积分
184
44#
 楼主| 发表于 2024-7-23 16:12:16 | 只看该作者
我想在蛇吃东西的时候发出声音,音频名称:eat,请问该如何修改代码?
回复 支持 反对

使用道具 举报

8

主题

62

帖子

184

积分

注册会员

Rank: 2

积分
184
45#
 楼主| 发表于 2024-7-23 16:14:45 | 只看该作者
kaia 发表于 2024-7-21 09:52
可以的!你只需要在CSS文件中修改`canvas`元素的背景颜色即可。我们将背景颜色改为浅蓝色(例如#ADD8E6) ...

我想在蛇吃东西的时候发出声音,请问该如何修改代码?
回复 支持 反对

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
46#
发表于 2024-7-23 16:16:03 | 只看该作者
林奕锦 发表于 2024-07-23 16:14
我想在蛇吃东西的时候发出声音,请问该如何修改代码? ...


要在蛇吃到食物时发出声音,你可以使用HTML5音频API。在这里简单介绍一下流程:

1. 准备一个音频文件,比如`eat.mp3`,并将其放在你项目的目录中。
2. 用JavaScript在适当的时候播放这个音频文件。

以下是更新后的代码,可以帮助你添加这个功能:

### 1. 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.     <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10.     <h1>贪吃蛇游戏</h1>
  11.     <button id="startButton">开始游戏</button>
  12.     <canvas id="gameCanvas" width="400" height="400"></canvas>
  13.     <p id="score">分数: 0</p>
  14.    
  15.     <!-- 引入音频文件 -->
  16.     <audio id="eatSound" src="eat.mp3"></audio>

  17.     <!-- 引入游戏逻辑的脚本 -->
  18.     <script src="snake_game.js"></script>
  19. </body>
  20. </html>
复制代码


### 2. JavaScript 部分
在蛇吃到食物时播放音频。

  1. // 获取画布并设置上下文
  2. const canvas = document.getElementById('gameCanvas');
  3. const ctx = canvas.getContext('2d');

  4. // 获取音频元素
  5. const eatSound = document.getElementById('eatSound');

  6. // 定义蛇的初始状态
  7. let snake = [
  8.     {x: 150, y: 150},
  9.     {x: 140, y: 150},
  10.     {x: 130, y: 150},
  11.     {x: 120, y: 150},
  12.     {x: 110, y: 150}
  13. ];

  14. // 初始化食物位置
  15. let foodX;
  16. let foodY;

  17. // 初始速度 - 蛇向右移动
  18. let dx = 10;
  19. let dy = 0;

  20. // 游戏运行标志
  21. let isGameRunning = true;

  22. // 创建游戏循环
  23. function main() {
  24.     if (isGameRunning) {
  25.         setTimeout(function onTick() {
  26.             clearCanvas();
  27.             moveSnake();
  28.             drawSnake();
  29.             drawFood();
  30.             checkGameOver();
  31.             main();
  32.         }, 100);
  33.     } else {
  34.         alert("游戏结束!");
  35.     }
  36. }

  37. // 清除画布
  38. function clearCanvas() {
  39.     ctx.fillStyle = "black";
  40.     ctx.fillRect(0, 0, canvas.width, canvas.height);
  41. }

  42. // 绘制蛇
  43. function drawSnake() {
  44.     snake.forEach(snakePart => {
  45.         ctx.fillStyle = 'lightgreen';
  46.         ctx.strokestyle = 'darkgreen';
  47.         ctx.fillRect(snakePart.x, snakePart.y, 10, 10);
  48.         ctx.strokeRect(snakePart.x, snakePart.y, 10, 10);
  49.     });
  50. }

  51. // 移动蛇
  52. function moveSnake() {
  53.     const head = {x: snake[0].x + dx, y: snake[0].y + dy};
  54.     snake.unshift(head);

  55.     // 检查蛇是否吃到食物
  56.     if (snake[0].x === foodX && snake[0].y === foodY) {
  57.         eatSound.play(); // 播放吃东西的声音
  58.         createFood();
  59.     } else {
  60.         snake.pop();
  61.     }
  62. }

  63. // 随机生成食物位置
  64. function createFood() {
  65.     foodX = Math.floor((Math.random() * canvas.width) / 10) * 10;
  66.     foodY = Math.floor((Math.random() * canvas.height) / 10) * 10;

  67.     // 确保食物不会生成在蛇身体上
  68.     snake.forEach(snakePart => {
  69.         if (snakePart.x === foodX && snakePart.y === foodY) {
  70.             createFood();
  71.         }
  72.     });
  73. }

  74. // 绘制食物
  75. function drawFood() {
  76.     ctx.fillStyle = 'red';
  77.     ctx.strokestyle = 'darkred';
  78.     ctx.fillRect(foodX, foodY, 10, 10);
  79.     ctx.strokeRect(foodX, foodY, 10, 10);
  80. }

  81. // 检查游戏是否结束
  82. function checkGameOver() {
  83.     for (let i = 4; i < snake.length; i++) {
  84.         if (snake[0].x === snake[i].x && snake[0].y === snake[i].y) {
  85.             isGameRunning = false;
  86.         }
  87.     }

  88.     const hitLeftWall = snake[0].x < 0;
  89.     const hitRightWall = snake[0].x >= canvas.width;
  90.     const hitTopWall = snake[0].y < 0;
  91.     const hitBottomWall = snake[0].y >= canvas.height;

  92.     if (hitLeftWall || hitRightWall || hitTopWall || hitBottomWall) {
  93.         isGameRunning = false;
  94.     }
  95. }

  96. // 更改方向
  97. document.addEventListener("keydown", changeDirection);

  98. function changeDirection(event) {
  99.     const LEFT_KEY = 37;
  100.     const RIGHT_KEY = 39;
  101.     const UP_KEY = 38;
  102.     const DOWN_KEY = 40;

  103.     const keyPressed = event.keyCode;
  104.     const goingUp = dy === -10;
  105.     const goingDown = dy === 10;
  106.     const goingRight = dx === 10;
  107.     const goingLeft = dx === -10;

  108.     if (keyPressed === LEFT_KEY && !goingRight) {
  109.         dx = -10;
  110.         dy = 0;
  111.     }

  112.     if (keyPressed === UP_KEY && !goingDown) {
  113.         dx = 0;
  114.         dy = -10;
  115.     }

  116.     if (keyPressed === RIGHT_KEY && !goingLeft) {
  117.         dx = 10;
  118.         dy = 0;
  119.     }

  120.     if (keyPressed === DOWN_KEY && !goingUp) {
  121.         dx = 0;
  122.         dy = 10;
  123.     }
  124. }

  125. // 开始游戏
  126. createFood();
  127. main();
复制代码


### 解释
1. **HTML**:
    - 添加了 `<audio>` 标签,用于引用`eat.mp3`音频文件。
  
2. **JavaScript**:
    - 获取音频元素:`const eatSound = document.getElementById('eatSound');`
    - 每当蛇吃到食物时调用 `eatSound.play();` 播放音频。

通过这些修改,当蛇吃到食物时,网页会发出声音。记得确保你的浏览器允许自动播放音频,有些浏览器可能会默认禁用此功能。
回复 支持 反对

使用道具 举报

8

主题

62

帖子

184

积分

注册会员

Rank: 2

积分
184
47#
 楼主| 发表于 2024-7-23 16:25:40 | 只看该作者
我想在游戏结束的时候播放音频,名称:gua,该如何修改?
回复 支持 反对

使用道具 举报

8

主题

62

帖子

184

积分

注册会员

Rank: 2

积分
184
48#
 楼主| 发表于 2024-7-23 16:31:41 | 只看该作者
我想在开始按钮被点击以后,重复播放tan音频,该怎么做?
回复 支持 反对

使用道具 举报

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

本版积分规则

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