酷代码 AI
菜单
全部AI  /  AI写代码神器
服务商

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>贪吃蛇游戏</title> <style> body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; font-family: Arial, sans-serif; } #game-container { text-align: center;

这是一个基础的贪吃蛇游戏实现,代码结构清晰。以下是完整的游戏代码和优化建议: ```javascript // 游戏初始化部分保持不变... // 生成食物位置 function generateFood() { const foodX = Math.floor(Math.random() * (canvas.width / boxSize)) * boxSize; const foodY = Math.floor(Math.random() * (canvas.height / boxSize)) * boxSize; // 确保食物不会出现在蛇身上 const onSnake = snake.some(segment => segment.x === foodX && segment.y === foodY); return onSnake ? generateFood() : { x: foodX, y: foodY }; } // 绘制食物 function drawFood() { ctx.fillStyle = "red"; ctx.fillRect(food.x, food.y, boxSize, boxSize); } // 移动蛇 function moveSnake() { const head = { ...snake[0] }; switch (direction) { case "UP": head.y -= boxSize; break; case "DOWN": head.y += boxSize; break; case "LEFT": head.x -= boxSize; break; case "RIGHT": head.x += boxSize; break; } snake.unshift(head); // 检查是否吃到食物 if (head.x === food.x && head.y === food.y) { score += 10; scoreElement.textContent = `分数: ${score}`; food = generateFood(); } else { snake.pop(); // 没吃到食物则移除尾部 } } // 绘制蛇 function drawSnake() { snake.forEach((segment, index) => { ctx.fillStyle = index === 0 ? "#4CAF50" : "#8BC34A"; ctx.fillRect(segment.x, segment.y, boxSize, boxSize); }); } // 碰撞检测 function checkCollision() { const head = snake[0]; // 撞墙检测 if (head.x < 0 || head.x >= canvas.width || head.y < 0 || head.y >= canvas.height) { gameOver(); } // 撞自身检测(从第1节开始检查) for (let i = 1; i < snake.length; i++) { if (head.x === snake[i].x && head.y === snake[i].y) { gameOver(); } } } // 游戏结束 function gameOver() { gameRunning = false; ctx.fillStyle = "white"; ctx.font = "30px Arial"; ctx.textAlign = "center"; ctx.fillText("游戏结束!", canvas.width/2, canvas.height/2); } // 改变方向 function changeDirection(event) { const key = event.keyCode; const goingUp = direction === "UP"; const goingDown = direction === "DOWN"; const goingLeft = direction === "LEFT"; const goingRight = direction === "RIGHT"; if (key === 37 && !goingRight) direction = "LEFT"; if (key === 38 && !goingDown) direction = "UP"; if (key === 39 && !goingLeft) direction = "RIGHT"; if (key === 40 && !goingUp) direction = "DOWN"; } // 重新开始游戏 function restartGame() { snake = [{ x: 9 * boxSize, y: 10 * boxSize }]; direction = "RIGHT"; food = generateFood(); score = 0; scoreElement.textContent = `分数: ${score}`; gameRunning = true; clearCanvas(); gameLoop(); } // 开始游戏 gameLoop(); ``` 优化建议: 1. 食物生成函数使用递归确保不会出现在蛇身上 2. 蛇头使用不同颜分 3. 方向控制加入防止180度转弯的逻辑 需要注意的逻辑点: 1. 蛇移动时先创建新头部再检查是否吃到食物 2. 碰撞检测需要区分墙壁和自身碰撞 3. 游戏循环使用setTimeout而非requestAnimationFrame,适合这种基于网格的游戏 [2025-05-03 22:07:44 | AI写代码神器 | 891点数解答]

热门AI查看更多
“AI写代码神器”擅长各种语言编程、解释代码、注解补充。 在这里填写你的问题。如:写出java冒泡排序算法。
一个入口掌握所有。 在这输入任何问题,或者要AI输出的内容。
将阿拉伯数字转为人明币大写,如:数字1000转换为壹仟。
AI生成爆文标题,能够快速创作出极具吸引力的标题,促使短视频、自媒体文章的点击率与阅读量迅猛攀升。 此处填写一个原始标题,如:一般人怎样打理自身的社交圈?
AI生成新闻评论。 在这里填入新闻内容。
AI生成内容摘要。 在此处填入需要生成摘要的内容,还可以输入4000字。
AI生成主持词,擅长团建、年会、婚礼、节日等场合的主持词编写。 在这里填入主持场景,如:运动会
AI快速生成周报、月报、日报、年终总结等各类总结报告。 在这里简单输入工作目标、指标、成果,没有任何格式或特殊需求。如:计划年销售业绩1000万,实际完成800万。
输入一个字,显示以这个字开头的歇后语
输入一个字,显示以这个字开头的成语
极速在线生成证件照
极速更换证件照红、蓝、白底色
实用工具查看更多
数独游戏 [娱乐类]
数独(Sudoku)是经典的9x9数字逻辑谜题。在有81个小格的九宫格内,玩家依据初始数字推理填入1 - 9的数字,要保证每行、每列以及每个3x3宫格中的数字都不重复。这款在线数独游戏有多难度可选,没有头绪时,可以点开答案看一下哦^_^
3D魔方 [娱乐类]
基于three.js的小游戏,锻炼玩家的眼力和反应力,非常不错
经典推箱子 [娱乐类]
基于H5的经典推箱子小游戏,锻炼玩家的眼力和反应力,非常不错
摸鱼五子棋 [娱乐类]
基于H5的五子棋人机对练,锻炼玩家的眼力和反应力,非常不错
速度打字机 [娱乐类]
打字速度挑战游戏可以训练玩家的打字速度与准确率。玩家要在给定时间内输入尽量多的单词或句子,从而在规定时间里争取获得最高分。
键盘打字 [娱乐类]
基于H5的键盘打字小游戏,锻炼玩家的眼力和反应力,非常不错
扫雷 [娱乐类]
基于H5的小游戏,锻炼玩家的眼力和反应力,非常不错
2048 [娱乐类]
H5版2048小游戏,锻炼玩家的前瞻力,非常不错
36万 进入2048
相关提问