当前位置: 首页 > news >正文

【豆包MarsCode蛇年编程大作战】花样贪吃蛇

 

目录

引言

展示效果

prompt提示信息

第一次提示(实现基本功能)

初次实现效果

第二次提示(美化UI)

第一次美化后的效果

 第二次美化后的效果

代码展示

实现在线体验链接

码上掘金使用教程


体验地址: 花样贪吃蛇

控制键盘的↑↓←→键即可控制。也可以通过WSAD来进行控制,W是向上,S是向下,A是向左,D是向右。

官方活动地址:活动地址


引言

当新春的脚步伴随着蛇年的灵动气息悄然临近,科技与创意的火花也在此时被点燃。豆包倾力推出的 “MarsCode 蛇年编程大作战” 盛大起航,为编程爱好者们开启一扇通往奇幻创作天地的大门。此刻,无论你登录便捷高效的豆包 MarsCode 编程助手,还是功能强大的 MarsCode IDE,只需轻启 AI 问答功能,就能获取源源不断的灵感助力。在这里,你将以代码为丝线,编织出独具蛇年韵味的编程佳作,在数字世界中留下属于自己的闪耀印记,开启这场充满惊喜与挑战的蛇年创意编程征程。

下面我将展示我如何使用豆包MarsCodeAI来实现一个创意贪吃蛇的项目!

展示效果

prompt提示信息

我现在要你帮我实现了一个贪吃蛇的游戏,使用HTML+JS+JS,用Canvas来绘制游戏界面比较合适。这样可以在网页上直接运行,用户容易访问。

美化画布UI,画图居中显示,在画布的上面要有“豆包MarsCode 花样贪吃蛇”这个标题,同样也是居中显示。
游戏的基本结构应该包括初始化蛇的移动、食物的生成、碰撞检测以及得分机制。蛇的移动通常通过一个数组来保存每个身体部分的坐标,每隔一定时间更新位置。食物要在随机位置生成,但需要确保不在蛇的身体上。得分每吃一次食物就增加,同时蛇的身体变长。
用户界面部分需要显示得分和游戏标题。标题“豆包MarsCode 花样贪吃蛇”要显眼,可能放在画布上方居中。得分实时更新,可以用一个独立的div元素来显示。
碰撞检测是关键部分,包括蛇头是否碰到墙壁或者自己的身体。碰到的话游戏结束,弹出提示,并重新开始。这里可能需要一个游戏循环,用setInterval或者requestAnimationFrame来不断更新游戏状态。
控制蛇的移动方向需要监听键盘事件,通常是方向键或者WASD。要注意防止蛇直接反向移动,比如在向右移动时不能立即向左转。
测试各个功能是否正常,比如食物生成是否在正确位置,得分是否正确增加,游戏结束条件是否触发等。可能还需要调整游戏速度,让难度适中。
最后,确保代码结构清晰,注释充分,方便用户理解和修改。可能还需要考虑不同浏览器的兼容性,但现代浏览器一般支持Canvas和键盘事件。
总结下来,步骤大致是:设置画布和基本变量,绘制游戏元素,处理用户输入,更新游戏状态,检测碰撞,管理得分,以及处理游戏结束和重新开始。确保所有功能整合后运行流畅,没有明显bug。

第一次提示(实现基本功能)

下面我将上面给出的prompt提示信息扔给豆包MarsCode看看实现的效果:

初次实现效果

这里我们能看的出来基本功能都已经实现。能够自动生成食物,贪吃蛇吃完后长度会增加,分数正常累计,触碰到自己的时候就会失败!

但是目前的话这个UI还是不怎么好看,所以接下来让我们来继续使用豆包来美化UI样式!

第二次提示(美化UI)

提示信息:

请对画布和按钮以及文本的CSS样式进行优化和调整,达到圆润,色彩绚丽!

第一次美化后的效果

这个时候豆包已经对画布和按钮进行了美化,但是我感觉以我的美感感觉还是不够美观,下面让我们继续优化:

对代码进行优化,包括美化文本样式、将字体颜色设置为红色,以及美化背景,将背景设置成渐变色。

 第二次美化后的效果

这次看来确实好看了许多,背景也优化成了渐变色,文本的样式也进行了优化!!!

截至目前,我对这一过程极为满意。在实现贪吃蛇程序的过程中,我还同步进行了写博客与录屏操作,即便如此,整体耗时也未超过 20 分钟,效率堪称惊人。倘若单算实现贪吃蛇程序本身所需的时间,更是能控制在 3 分钟以内,着实高效。

代码展示

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>豆包MarsCode 花样贪吃蛇</title><style>body {display: flex;flex-direction: column;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #f0f0f0;background-image: linear-gradient(to bottom right, #ffcccc, #ccffff); /* 添加渐变色背景 */}canvas {border: 2px solid #000;border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);}#score {position: absolute;top: 20px;left: 50%;transform: translateX(-50%);font-size: 24px;font-weight: bold;color: red; /* 将字体颜色设置为红色 */text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); /* 添加文本阴影 */}#title {position: absolute;top: 60px;left: 50%;transform: translateX(-50%);font-size: 36px;font-weight: bold;color: red; /* 将字体颜色设置为红色 */text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); /* 添加文本阴影 */}#startButton, #restartButton {margin-top: 20px;padding: 10px 20px;font-size: 18px;font-weight: bold;cursor: pointer;border: none;border-radius: 5px;background-color: #4CAF50;color: white;box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);transition: background-color 0.3s ease;}#startButton:hover, #restartButton:hover {background-color: #45a049;}#gameOver {display: none;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);font-size: 36px;font-weight: bold;color: red; /* 将字体颜色设置为红色 */text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); /* 添加文本阴影 */}</style>
</head>
<body><canvas id="gameCanvas" width="400" height="400"></canvas><div id="score">得分: 0</div><div id="title">豆包MarsCode 花样贪吃蛇</div><button id="startButton">开始游戏</button><div id="gameOver">游戏结束!</div><button id="restartButton">重新开始</button><script>// 获取画布和上下文const canvas = document.getElementById('gameCanvas');const ctx = canvas.getContext('2d');// 游戏变量let snake = [{ x: 200, y: 200 }];let food = { x: 300, y: 300 };let dx = 20;let dy = 0;let score = 0;let gameInterval;// 绘制蛇function drawSnake() {snake.forEach(segment => {ctx.fillStyle = 'green';ctx.fillRect(segment.x, segment.y, 20, 20);});}// 绘制食物function drawFood() {ctx.fillStyle = 'red';ctx.fillRect(food.x, food.y, 20, 20);}// 生成食物function generateFood() {food = {x: Math.floor(Math.random() * (canvas.width / 20)) * 20,y: Math.floor(Math.random() * (canvas.height / 20)) * 20};}// 更新游戏状态function update() {// 移动蛇头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();}// 检查是否碰撞到墙壁或自己的身体if (head.x < 0 || head.x >= canvas.width || head.y < 0 || head.y >= canvas.height || snake.slice(1).some(segment => segment.x === head.x && segment.y === head.y)) {clearInterval(gameInterval);gameOver();}}// 绘制游戏function draw() {ctx.clearRect(0, 0, canvas.width, canvas.height);drawSnake();drawFood();document.getElementById('score').innerText = '得分: ' + score;}// 游戏循环function gameLoop() {update();draw();}// 监听键盘事件document.addEventListener('keydown', event => {const key = event.key;if (key === 'ArrowUp' || key === 'w' || key === 'W') {if (dy !== 20) {dx = 0;dy = -20;}} else if (key === 'ArrowDown' || key === 's' || key === 'S') {if (dy !== -20) {dx = 0;dy = 20;}} else if (key === 'ArrowLeft' || key === 'a' || key === 'A') {if (dx !== 20) {dx = -20;dy = 0;}} else if (key === 'ArrowRight' || key === 'd' || key === 'D') {if (dx !== -20) {dx = 20;dy = 0;}}});// 开始游戏按钮点击事件document.getElementById('startButton').addEventListener('click', () => {if (!gameInterval) {gameInterval = setInterval(gameLoop, 100);document.getElementById('restartButton').style.display = 'none';}});// 重新开始按钮点击事件document.getElementById('restartButton').addEventListener('click', () => {resetGame();});// 游戏结束function gameOver() {document.getElementById('gameOver').style.display = 'block';document.getElementById('restartButton').style.display = 'block';}// 重置游戏function resetGame() {clearInterval(gameInterval);snake = [{ x: 200, y: 200 }];dx = 20;dy = 0;score = 0;generateFood();document.getElementById('gameOver').style.display = 'none';document.getElementById('restartButton').style.display = 'none';gameInterval = setInterval(gameLoop, 100);}// 初始化游戏generateFood();document.getElementById('restartButton').style.display = 'none';</script>
</body>
</html>

实现在线体验链接

豆包官方要求要实现在线体验链接,下面就教给你们一种非常简便的方式来实现在线体现链接,这里我们使用稀土掘金推出的一款面向开发者的在线code playground平台码上掘金

码上掘金地址:码上掘金

码上掘金使用教程

首先进入码上掘金平台,然后点击新建代码片段

因为目前我的代码是纯HTML+CSS+JS,这里直接新建空白项目,如果你们的代码使用Vue或者Java,Python之类的来实现的话,可以选择对应的模版。

创建后是这个排版

由于我们只有一个html文件,那么我们直接将刚刚的代码复制到对应的HTML编辑区域中,复制进来后点击运行即可看到代码的运行效果!!!

测试一下代码没有问题后,这个时候点击右上角的发布,等待审核通过即可!

审核通过展示

体验地址: 花样贪吃蛇

@豆包MarsCode 

相关文章:

【豆包MarsCode蛇年编程大作战】花样贪吃蛇

目录 引言 展示效果 prompt提示信息 第一次提示&#xff08;实现基本功能&#xff09; 初次实现效果 第二次提示&#xff08;美化UI&#xff09; 第一次美化后的效果 第二次美化后的效果 代码展示 实现在线体验链接 码上掘金使用教程 体验地址&#xff1a; 花样贪吃蛇…...

企业级流程架构设计思路-基于价值链的流程架构

获取更多企业流程资料 纸上得来终觉浅&#xff0c;绝知此事要躬行 一.企业流程分级规则定义 1.流程分类分级的总体原则 2.完整的流程体系需要体现出流程的分类分级 03.通用的流程分级方法 04.流程分级的标准 二.企业流程架构设计原则 1.流程架构设计原则 流程框架是流程体…...

AI编程工具使用技巧:在Visual Studio Code中高效利用阿里云通义灵码

AI编程工具使用技巧&#xff1a;在Visual Studio Code中高效利用阿里云通义灵码 前言一、通义灵码介绍1.1 通义灵码简介1.2 主要功能1.3 版本选择1.4 支持环境 二、Visual Studio Code介绍1.1 VS Code简介1.2 主要特点 三、安装VsCode3.1下载VsCode3.2.安装VsCode3.3 打开VsCod…...

钉钉群机器人设置——python版本

钉钉群机器人设置——python版本 应用场景钉钉界面操作程序开发效果展示 应用场景 由于工作需要&#xff0c;很多项目执行程序后出现报错信息无法第一时间收到&#xff0c;因此实时预警对于监控程序还是有必要。&#xff08;仅个人观点&#xff09; 参考文档及博客&#xff1a…...

细说STM32F407单片机电源低功耗StandbyMode待机模式及应用示例

目录 一、待机模式基础知识 1、进入待机模式 2、待机模式的状态 3、退出待机模式 二、待机模式应用示例 1、示例功能和CubeMX项目设置 &#xff08;1&#xff09; 时钟 &#xff08;2&#xff09; DEBUG、LED1、KeyRight、USART6、CodeGenerator &#xff08;3&#x…...

IOS 安全机制拦截 window.open

摘要 在ios环境&#xff0c;在某些情况下执行window.open不生效 一、window.open window.open(url, target, windowFeatures) 1. url&#xff1a;「可选参数」&#xff0c;表示你要加载的资源URL或路径&#xff0c;如果不传&#xff0c;则打开一个url地址为about:blank的空…...

jmeter中对接口进行循环请求后获取相应数据

1、工作中遇到一个场景就是对某个单一接口进行循环请求&#xff0c;并需要获取每次请求后返回的相应数据&#xff1b; 2、首先就在jmeter对接口相关组件进行配置&#xff0c;需要组件有&#xff1a;循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…...

【QT】-explicit关键字

explicit explicit 是一个 C 关键字&#xff0c;用于修饰构造函数。它的作用是防止构造函数进行隐式转换。 为什么需要 explicit&#xff1f; 在没有 explicit 的情况下&#xff0c;构造函数可以用于隐式类型转换。这意味着&#xff0c;如果你有一个接受某种类型的参数的构造…...

【深度学习】 自动微分

自动微分 正如上节所说&#xff0c;求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单&#xff0c;只需要一些基本的微积分。 但对于复杂的模型&#xff0c;手工进行更新是一件很痛苦的事情&#xff08;而且经常容易出错&#xff09;。 深度学习框架通过自动…...

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架&#xff0c;专为高并发、低延迟的场景设计。它基于 Go 语言开发&#xff0c;结合了字节跳动在微服务架构中的实践经验&#xff0c;旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…...

skynet 源码阅读 -- 核心概念服务 skynet_context

本文从 Skynet 源码层面深入解读 服务&#xff08;Service&#xff09; 的创建流程。从最基础的概念出发&#xff0c;逐步深入 skynet_context_new 函数、相关数据结构&#xff08;skynet_context, skynet_module, message_queue 等&#xff09;&#xff0c;并通过流程图、结构…...

每日十题八股-2025年1月23日

1.快排为什么时间复杂度最差是O&#xff08;n^2&#xff09; 2.快排这么强&#xff0c;那冒泡排序还有必要吗&#xff1f; 3.如果要对一个很大的数据集&#xff0c;进行排序&#xff0c;而没办法一次性在内存排序&#xff0c;这时候怎么办&#xff1f; 4.面试官&#xff1a;你的…...

MongoDB部署模式

目录 单节点模式&#xff08;Standalone&#xff09; 副本集模式&#xff08;Replica Set&#xff09; 分片集群模式&#xff08;Sharded Cluster&#xff09; MongoDB有多种部署模式&#xff0c;可以根据业务需求选择适合的架构和部署方式。 单节点模式&#xff08;Standa…...

opencv笔记2

图像灰度 彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由R&#xff0c;G&#xff0c;B三个分量决定&#xff0c;而每个分量中可取值0-255&#xff0c;这样一个像素点可以有256*256*256变化。而灰度图像是R&#xff0c;G&#xff0c;B三个分量…...

springboot使用ssl连接elasticsearch

使用es时ssl证书报错 unable to find valid certification path to requested target 1.依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>2…...

Linux内核中的InfiniBand核心驱动:verbs.c分析

InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux内核中的InfiniBand子系统通过提供一组核心API(称为Verbs API)来支持InfiniBand设备的操作。drivers/infiniband/core/verbs.c是InfiniBand核心驱动的重要组…...

把网站程序数据上传到服务器的方法和注意事项

将网站程序数据上传到服务器是一个常见的网站开发和部署流程。主要涉及到FTP上传、FileZilla、rsync(在Linux下)、或其他相关的文件同步工具。以下是一般步骤和方法&#xff1a; 使用FTP&#xff1a; 1. 选择FTP客户端软件&#xff1a; - 常见的FTP客户端包括FileZilla(开源)、…...

完全平方数——唯一分解定理

文章目录 一、唯一分解定理是什么&#xff1f;1.定义2.示例3.代码模板 二、例题1>问题描述&#xff08;2021蓝桥杯省赛&#xff09;输入格式输出格式样例输入 1样例输出 1样例输入 2样例输出 2评测用例规模与约定 2>解题思路3>假娃3>C嘎嘎 一、唯一分解定理是什么&…...

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录 Springboot 整合多动态数据源 这里有mysql&#xff08;分为master 和 slave&#xff09; 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码&#xff0c;不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql&#xff08;分为maste…...

mock可视化生成前端代码

介绍&#xff1a;mock是我们前后端分离的必要一环、ts、axios编写起来也很麻烦。我们就可以使用以下插件&#xff0c;来解决我们的问题。目前支持vite和webpack。&#xff08;配置超级简单&#xff01;&#xff09; 欢迎小伙伴们提issues、我们共建。提升我们的开发体验。 vi…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...