科学教育

搜索
查看: 373|回复: 1
打印 上一主题 下一主题

123

[复制链接]

9

主题

15

帖子

61

积分

注册会员

Rank: 2

积分
61
跳转到指定楼层
楼主
发表于 2025-12-9 09:48:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请帮将以下代码的上下左右改为WASD           const canvas = document.getElementById("gameCanvas");const context = canvas.getContext("2d");
const startButton = document.getElementById("startButton");

const gridSize = 20;
let snake = [{x: 200, y: 200}];
let food = {x: 0, y: 0};
let dx = gridSize;
let dy = 0;
let score = 0;

function drawSnake() {
    context.clearRect(0, 0, canvas.width, canvas.height);
    snake.forEach(part => {
        context.fillStyle = "green";
        context.fillRect(part.x, part.y, gridSize, gridSize);
    });
}

function generateFood() {
    food.x = Math.floor(Math.random() * canvas.width / gridSize) * gridSize;
    food.y = Math.floor(Math.random() * canvas.height / gridSize) * gridSize;
}

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

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) {
        score++;
        generateFood();
    } else {
        snake.pop();
    }
}

function changeDirection(event) {
    const keyPressed = event.keyCode;
    if (keyPressed === 37 && dx === 0) {
        dx = -gridSize;
        dy = 0;
    }我将以下代码的上下左右改为wasd
回复

使用道具 举报

0

主题

1145

帖子

1715

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1715
沙发
发表于 2025-12-9 09:48:37 | 只看该作者
好的!我帮你把控制上下左右的按键从方向键(上下左右)改成W(上)、A(左)、S(下)、D(右)。代码中的事件监听部分需要修改,具体如下:

  1. function changeDirection(event) {
  2.     const keyPressed = event.key.toLowerCase();  // 取得按键,并转换为小写字母
  3.     if (keyPressed === 'a' && dx === 0) { // 按A向左走,必须当前是水平方向不动
  4.         dx = -gridSize;
  5.         dy = 0;
  6.     } else if (keyPressed === 'd' && dx === 0) { // 按D向右走
  7.         dx = gridSize;
  8.         dy = 0;
  9.     } else if (keyPressed === 'w' && dy === 0) { // 按W向上走
  10.         dx = 0;
  11.         dy = -gridSize;
  12.     } else if (keyPressed === 's' && dy === 0) { // 按S向下走
  13.         dx = 0;
  14.         dy = gridSize;
  15.     }
  16. }
复制代码


讲解:
- 原来的`keyCode`值范围是方向键的数字(37=左,38=上,39=右,40=下)。
- 新版本用`event.key`得到按键字符(比如'a'、'w'等)。
- 我们把字符都转化成小写,这样无论你按的是大写还是小写都能识别。
- 按A时蛇头左移,W是上移,S是下移,D是右移。
- `dx`和`dy`代表蛇移动的方向,在水平方向时不能上下跳动,反之也是。

只要把原来`changeDirection`函数替换成这个就好啦。祝你编程愉快!有什么不懂再问我哦。
回复 支持 反对

使用道具 举报

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

本版积分规则

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