科学教育
标题:
帮我改成wasd网页代码
[打印本页]
作者:
苏洛萱
时间:
2025-12-9 09:47
标题:
帮我改成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;
}
if (keyPressed === 38 && dy === 0) {
dx = 0;
dy = -gridSize;
}
if (keyPressed === 39 && dx === 0) {
dx = gridSize;
dy = 0;
}
if (keyPressed === 40 && dy === 0) {
dx = 0;
dy = gridSize;
}
}
function gameLoop() {
moveSnake();
drawSnake();
drawFood();
if (snake[0].x < 0 || snake[0].x >= canvas.width || snake[0].y < 0 || snake[0].y >= canvas.height) {
clearInterval(game);
alert("Game Over! Your score is " + score);
}
}
startButton.addEventListener("click", () => {
snake = [{x: 200, y: 200}];
dx = gridSize;
dy = 0;
score = 0;
generateFood();
game = setInterval(gameLoop, 100);
});
document.addEventListener("keydown", changeDirection);
作者:
kaia
时间:
2025-12-9 09:47
好的!我来帮你把按键控制改成用 WASD 键。原来的代码是用上下左右箭头(keyCode 37、38、39、40)来控制方向的,我们改成用 W (上)、A (左)、S (下)、D (右) 四个键。
同时,我帮你修正了一些小错误,比如:
- 蛇身 `snake` 应该是一个数组,初始时蛇头可以放在画布中央;
- `moveSnake` 函数里获取蛇头的位置应该用 `snake[0]` 而不是 `snake.x`;
- 游戏结束检测也要根据蛇头位置判断。
下面是修改后的完整代码,注意我用注释标出了修改按键的部分,你可以看一下:
const canvas = document.getElementById("gameCanvas");
const context = canvas.getContext("2d");
const startButton = document.getElementById("startButton");
const gridSize = 20;
let snake = [];
let food = {x: 0, y: 0};
let dx = gridSize;
let dy = 0;
let score = 0;
let game;
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.key.toLowerCase(); // 获取按键的小写字母
// 用 WASD 控制方向
if (keyPressed === 'a' && dx === 0) { // A 向左
dx = -gridSize;
dy = 0;
}
if (keyPressed === 'w' && dy === 0) { // W 向上
dx = 0;
dy = -gridSize;
}
if (keyPressed === 'd' && dx === 0) { // D 向右
dx = gridSize;
dy = 0;
}
if (keyPressed === 's' && dy === 0) { // S 向下
dx = 0;
dy = gridSize;
}
}
function gameLoop() {
moveSnake();
drawSnake();
drawFood();
const head = snake[0];
// 碰壁就结束游戏
if (
head.x < 0 || head.x >= canvas.width ||
head.y < 0 || head.y >= canvas.height
) {
clearInterval(game);
alert("Game Over! Your score is " + score);
}
}
startButton.addEventListener("click", () => {
// 初始化蛇的起点在画布中心
snake = [
{x: canvas.width / 2, y: canvas.height / 2}
];
dx = gridSize;
dy = 0;
score = 0;
generateFood();
game = setInterval(gameLoop, 100);
});
document.addEventListener("keydown", changeDirection);
复制代码
---
**简单解释一下怎么用 WASD 控制:**
- 按下 W 键,蛇头往上移动;
- 按下 A 键,蛇头往左移动;
- 按下 S 键,蛇头往下移动;
- 按下 D 键,蛇头往右移动;
记得蛇不能直接往反方向走哦,比如当前往右时,不能马上按 A 往左,否则蛇会撞到自己。
如果你还有不懂的地方,随时问我!????
欢迎光临 科学教育 (http://www.sci-edu.net/)
Powered by Discuz! X3.2