AI4CODE】3 Trae 锤一个贪吃蛇的小游戏

【AI4CODE】目录

【AI4CODE】1 Trae CN 锥安装配置与迁移

【AI4CODE】2 Trae 锤一个 To-Do-List


这次还是采用 HTML/CSS/JAVASCRIPT 技术栈 Trae 锤一个贪吃蛇的小游戏。
在这里插入图片描述

1 环境准备

创建一个 Snake 的子文件夹,清除以前的会话记录。
在这里插入图片描述

2 开始构建

2.1 输入会话提词

比如:

用html/css/javascript技术栈构建一个简洁美观的贪吃蛇小游戏,要求有开始游戏按钮,保存最高得分记录到本地

2.2 思考过程

在这里插入图片描述

2.3 构建过程

在这里插入图片描述
在这里插入图片描述

2.4 Live Server 启动服务试试

画面出来了,开始游戏发现,蛇的移动数据太快了,修改一下移动速度。
在这里插入图片描述
输入提词:蛇的移动数据太快了

了解您希望调整贪吃蛇的移动速度。当前游戏逻辑使用requestAnimationFrame实现循环,可以通过添加移动间隔控制机制来调节速度。建议在update函数中增加时间间隔判断,例如每200毫秒更新一次蛇的位置。同时保留原有动画帧调用以保证画面流畅。这样既能保持画面渲染流畅度,又能独立控制蛇的移动速度。

现在为贪吃蛇游戏添加移动间隔控制机制来降低移动速度。将在game.js中新增lastMoveTime变量和时间间隔判断逻辑,保持画面流畅的同时实现速度控制。

2.5 OK 可以玩了

在这里插入图片描述
蛇的移动移动速度,也可以自己修改 game.js的

const moveInterval = 300;

这里的单位是毫秒。

3 代码贴出来

所有的代码都 Trae 自动锤出来的,我没有写一行代码,共三个代码文件:index.html/game.js/style.css

3.1 Index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>经典贪吃蛇</title><link rel="stylesheet" href="style.css">
</head>
<body><div class="game-container"><canvas id="gameCanvas" width="400" height="400"></canvas><div class="control-panel"><button id="startBtn" class="game-btn">开始游戏</button><div class="score-board"><span>当前得分:<span id="currentScore">0</span></span><span>最高得分:<span id="highScore">0</span></span></div></div></div><script src="game.js"></script>
</body>
</html>

3.2 Style.css

body {display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;background: #2c3e50;font-family: Arial, sans-serif;
}.game-container {position: relative;background: #ecf0f1;padding: 20px;border-radius: 10px;box-shadow: 0 0 20px rgba(0,0,0,0.3);
}#gameCanvas {border: 2px solid #34495e;
}.control-panel {margin-top: 20px;display: flex;flex-direction: column;align-items: center;
}.game-btn {padding: 12px 30px;font-size: 18px;background: #27ae60;color: white;border: none;border-radius: 5px;cursor: pointer;transition: background 0.3s;
}.game-btn:hover {background: #219a52;
}.score-board {margin-top: 15px;font-size: 16px;color: #2c3e50;display: flex;gap: 20px;
}@media (max-width: 480px) {#gameCanvas {width: 300px;height: 300px;}
}

3.3 Game.js

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const startBtn = document.getElementById('startBtn');
const currentScoreSpan = document.getElementById('currentScore');
const highScoreSpan = document.getElementById('highScore');const gridSize = 20;
let snake = [];
let food = {};
let direction = 'right';
let nextDirection = 'right';
let gameLoop;
let score = 0;
let highScore = localStorage.getItem('snakeHighScore') || 0;highScoreSpan.textContent = highScore;function initGame() {snake = [{x: 5, y: 5}];score = 0;currentScoreSpan.textContent = score;direction = 'right';nextDirection = 'right';generateFood();
}function generateFood() {food = {x: Math.floor(Math.random() * (canvas.width/gridSize)),y: Math.floor(Math.random() * (canvas.height/gridSize))};// 防止食物生成在蛇身上while(snake.some(segment => segment.x === food.x && segment.y === food.y)) {food = {x: Math.floor(Math.random() * (canvas.width/gridSize)),y: Math.floor(Math.random() * (canvas.height/gridSize))};}
}function update() {const head = {...snake[0]};direction = nextDirection;switch(direction) {case 'up': head.y--; break;case 'down': head.y++; break;case 'left': head.x--; break;case 'right': head.x++; break;}// 碰撞检测if (head.x < 0 || head.x >= canvas.width/gridSize || head.y < 0 || head.y >= canvas.height/gridSize ||snake.some(segment => segment.x === head.x && segment.y === head.y)) {gameOver();return;}snake.unshift(head);// 吃食物if (head.x === food.x && head.y === food.y) {score += 10;currentScoreSpan.textContent = score;generateFood();} else {snake.pop();}
}function draw() {// 清空画布ctx.fillStyle = '#ecf0f1';ctx.fillRect(0, 0, canvas.width, canvas.height);// 绘制蛇ctx.fillStyle = '#27ae60';snake.forEach(segment => {ctx.fillRect(segment.x*gridSize, segment.y*gridSize, gridSize-2, gridSize-2);});// 绘制食物ctx.fillStyle = '#e74c3c';ctx.fillRect(food.x*gridSize, food.y*gridSize, gridSize-2, gridSize-2);
}function gameOver() {cancelAnimationFrame(gameLoop);startBtn.textContent = '开始游戏';if (score > highScore) {highScore = score;localStorage.setItem('snakeHighScore', highScore);highScoreSpan.textContent = highScore;}
}// 事件监听
let lastMoveTime = 0;
const moveInterval = 300;function animate(timestamp) {if (!lastMoveTime) {lastMoveTime = timestamp;}const elapsed = timestamp - lastMoveTime;if (elapsed >= moveInterval) {update();lastMoveTime = timestamp;}draw();gameLoop = requestAnimationFrame(animate);
}// 修改游戏启动逻辑
startBtn.addEventListener('click', () => {if (!gameLoop) {initGame();startBtn.textContent = '暂停游戏';lastMoveTime = 0; // 重置计时器gameLoop = requestAnimationFrame(animate);} else {cancelAnimationFrame(gameLoop);gameLoop = null;startBtn.textContent = '继续游戏';}
});// 键盘控制
document.addEventListener('keydown', (e) => {switch(e.key.toLowerCase()) {case 'arrowup':case 'w':if (direction !== 'down') nextDirection = 'up';break;case 'arrowdown':case 's':if (direction !== 'up') nextDirection = 'down';break;case 'arrowleft':case 'a':if (direction !== 'right') nextDirection = 'left';break;case 'arrowright':case 'd':if (direction !== 'left') nextDirection = 'right';break;}
});

本文完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32388.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL17(最新版)安装部署

PostgreSQL 17已与2024年9月26日正式发布&#xff01;&#xff01;&#xff01; 一、Postgres概述 官网地址&#xff1a;PostgreSQL: The world’s most advanced open source database Postgres作为最先进的开源数据库&#xff08; the latest version of the world’s most…

捌拾贰- 贝尔不等式 (2)

1. 贝尔不等式理解 我感觉我前期理解的不是很对 柒拾玖- 贝尔不等式 … 思来想去几天&#xff0c;感觉贝尔不等式应该是这样来的 因为观测的值只有可能是 1 (别问我为什么) , 设观测角度 Q 值为 1 的概率为 a , -1 的概率为 b , Q 的数学期望值为 E(Q) a * 1 b * (-1) a…

小凯的疑惑(数论 )

#include <iostream> using namespace std; typedef long long ll; int main() {// 请在此输入您的代码ll a,b;cin>>a>>b;ll N a * b - a - b;cout << N ;return 0; } 如果 a 和 b 互素&#xff0c;那么 a * b - a - b 是最大无法被表示的金额

Android内存泄漏检测与优化

Android内存泄漏检测与优化 一、内存泄漏基础知识 1.1 什么是内存泄漏 在Android开发中&#xff0c;内存泄漏(Memory Leak)是指程序在申请内存后&#xff0c;无法释放已申请的内存空间&#xff0c;导致系统可用内存减少的问题。随着泄漏内存的增加&#xff0c;应用可能会变得…

51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版

前言&#xff1a;本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤&#xff0c;包括软件安装获取途径、工程创建、器件添加&#xff08;如单片机 AT89C51、晶振、电容、电阻、按键等&#xff09;、外围电路&…

微信小程序校园跑腿的设计与实现【lw+源码+部署+视频+讲解】

第一章 绪论 1.1 本课题研究背景 近年来城市与社会经济发展较快&#xff0c;人们的生活水平不断提高&#xff0c;消费观念发生很大变化&#xff0c;随着 微信小程序技术的发展&#xff0c;小程序已经渗透到人们日常生活的方方面面&#xff0c;悄悄地改变着人们的生活方式。在…

多用户网页在线聊天室(测试报告)

文章目录 多用户网页在线聊天室一&#xff0c;项目概括1.1 项目名称1.2 测试时间1.3 项目背景1.3 编写目的 二&#xff0c;测试计划2.1 测试环境与配置2.2 测试用例2.3实际执行用例2.3.1登录2.3.2聊天消息列表展示2.3.3聊天消息详情页展示2.3.4联系人页展示2.3.5信息的编辑与发…

自由学习记录(43)

不同的服务器可以使用不同协议&#xff0c;但协议本身不会决定服务器的类型 类型特点物理服务器真实的计算机&#xff08;如 Dell、HP 服务器&#xff09;虚拟服务器运行在云计算平台上的 VM&#xff08;如 AWS EC2、阿里云 ECS&#xff09;容器化服务器通过 Docker / Kuberne…

Vue框架

一. 什么是Vue 1. Vue是一款用于构建用户界面的渐进式的JavaScript框架。(官方&#xff1a;https://cn.vuejs.org/) 2. 框架&#xff1a;就是一套完整的项目解决方案&#xff0c;用于快速构建项目 3. 优点&#xff1a;大大提升前端项目的开发效率 4. 缺点&#xff1a;需要理解记…

强大的数据库DevOps工具:NineData 社区版

本文作者司马辽太杰&#xff0c; gzh&#xff1a;程序猿读历史 在业务快速变化与数据安全日益重要的今天&#xff0c;生产数据库变更管理、版本控制、数据使用是数据库领域的核心挑战之一。传统的解决方式往往采用邮件或即时通讯工具发起审批流程&#xff0c;再通过堡垒机直连数…

数字IC后端设计实现教程 |Innovus ICC2 Routing Pin Access Setting设置方法

默认情况下routing 引擎可以在标准单元可以打孔的任何地方&#xff08;via region&#xff09;打孔&#xff0c;甚至工具还会先拉出一块metal&#xff0c;然后再打孔过渡到高层。 随之工艺节点越做越小&#xff0c;标准单元内部的结构也越来越复杂。此时如果还沿用传统工艺的走…

珠算之珠心算观想算盘

一个好的观想算盘&#xff0c;会对珠心算学习效率的提高起到巨大的促进作用。 在传统的珠心算教学中&#xff0c;人们在观想算盘时&#xff0c;基本都是以自己手中所拿的实际算盘为参照模型进行观想的。由于市场上的算盘样式繁多&#xff0c;学生观想算盘时的参照算盘也是五花…

相册app

myphone 项目地址 &#xff1a; 相册app 技术点&#xff1a; electron mysql npm 图片展示 数据库表

idea超级AI插件,让 AI 为 Java 工程师

引言​ 用户可在界面中直接通过输入自然语言的形式描述接口的需求&#xff0c;系统通过输入的需求自动分析关键的功能点有哪些&#xff0c;并对不确定方案的需求提供多种选择&#xff0c;以及对需求上下文进行补充&#xff0c;用户修改确定需求后&#xff0c;系统会根据需求设…

Spring AI与DeepSeek实战二:打造企业级智能体

一、概述 智能体 Agent 能自主执行任务实现特定目标的 AI 程序。传统 AI&#xff08;如ChatGPT&#xff09;主要依靠用户输入指令&#xff0c;而智能体 Agent 可以自主思考、决策&#xff0c;并执行复杂任务&#xff0c;就像一个AI助手&#xff0c;能够独立完成多步操作。本文…

【C++】 —— 笔试刷题day_3

刷题_day3 继续加油&#xff01;&#xff01;&#xff01; 一、简写单词 题目链接&#xff1a;简写单词 题目描述 这道题比较简单&#xff0c;题目说的也非常简单明了 输入一行复合词&#xff0c;要求我们输出每个单词的首字母大写。 算法思路 这里我们可以看到输入的复合词…

数学建模:MATLAB强化学习

一、强化学习简述 强化学习是一种通过与环境交互&#xff0c;学习状态到行为的映射关系&#xff0c;以获得最大积累期望回报的方法。包含环境&#xff0c;动作和奖励三部分&#xff0c;本质是智能体通过与环境的交互&#xff0c;使得其作出的动作所得到的决策得到的总的奖励达…

C++:二分习题

1. 借教室 503. 借教室 - AcWing题库 在大学期间&#xff0c;经常需要租借教室。 大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。 教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。  面对海…

二进制安装指定版本的MariaDBv10.11.6

一、官网下载mariadb安装包 Download MariaDB Server - MariaDB.org 找到对应的版本 下载安装包后上传到服务器这里不再赘述。 二、安装二进制包 1、解压安装包 2、查看安装包内的安装提示文档根据提示文档进行安装 # 解压安装包 tar xf mariadb-10.11.6-linux-systemd-x8…

2025-03-12 Python深度学习1——安装Anaconda与PyTorch库

文章目录 1 配置 Anaconda1.1 下载1.2 安装1.3 配置环境变量1.4 检查安装 2 安装 PyTorch 库2.1 创建 DL 环境2.2 安装/升级 CUDA2.3 配置环境变量2.4 安装 Pytorch 库方法一&#xff08;不稳定&#xff09;方法二&#xff08;推荐&#xff09; 2.5 检查安装 3 Pycharm Communi…