【豆包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 

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

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

相关文章

小白爬虫——selenium入门超详细教程

目录 一、selenium简介 二、环境安装 2.1、安装Selenium 2.2、浏览器驱动安装 三、基本操作 3.1、对页面进行操作 3.1.1、初始化webdriver 3.1.2、打开网页 3.1.3、页面操作 3.1.4、页面数据提取 3.1.5、关闭页面 ?3.1.6、综合小案例 3.2、对页面元素进行操作 3…

U3D的.Net学习

Mono&#xff1a;这是 Unity 最初采用的方式&#xff0c;它将 C# 代码编译为中间语言 (IL)&#xff0c;然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP&#xff1a;这是一种较新的方法&#xff0c;它会将 C# 代码先编译为 C 代码&#xff0c;再由 C 编译器…

Java集合学习:HashMap的原理

一、HashMap里的Hash是什么&#xff1f; 首先&#xff0c;我们先要搞清楚HashMap里的的Hash是啥意思。 当我们在编程过程中&#xff0c;往往需要对线性表进行查找操作。 在顺序表中查找时&#xff0c;需要从表头开始&#xff0c;依次遍历比较a[i]与key的值是否相等&#xff…

SOAFEE 技术研讨会:汽车软件定义与自动驾驶技术探讨

在本次技术研讨会上&#xff0c;来自汽车与科技领域的专家们围绕汽车软件定义及自动驾驶技术展开了深入交流与探讨。从 SOAFEE 蓝图计划的创新性理念&#xff0c;到 Autoware 开源项目及 Open AD Kit 在实际应用中的探索&#xff0c;再到 Edge Workload Abstraction and Orches…

FastJson很快,有什么用?

FastJson 在国内的热度还是挺高的&#xff0c;受到了很多开发者的喜欢。不过&#xff0c;我自己倒没有在项目中用过。我记得刚工作那会新做的一个项目有明确规定禁止使用 FastJson。 昨天看到一篇关于 FastJson 的文章&#xff0c;这位朋友分享了自己在使用 FastJson 遇到的一…

Jetson nano 安装 PCL 指南

本指南帮助 ARM64 架构的 Jetson Nano 安装 PCL&#xff08;点云库&#xff09;。 安装步骤 第一步&#xff1a;安装依赖 在终端中运行以下命令&#xff0c;安装 PCL 所需的依赖&#xff1a; sudo apt-get update sudo apt-get install git build-essential linux-libc-dev s…

ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)

文章目录 一、软件包管理模块1.1、功能1.2、常用参数1.3、示例 二、服务模块2.1、功能2.2、服务模块常用参数2.3、示例 三、文件与目录模块3.1、file功能3.2、常用参数3.3、示例 四、收集模块-setup4.1、setup功能4.2、示例 一、软件包管理模块 1.1、功能 Ansible 提供了多种…

终极的复杂,是简单

软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …

开关电源设计(2)–BUCK电路设计和计算过程

BUCK电路也即降压电路&#xff0c;是应用最广泛的DC-DC变换器 需求决定的参数 V i 和 V o V_{i} 和V_{o} Vi​和Vo​ f f f I o I_{o} Io​ 输出电压纹波率 效率 需要计算:电感量 r r r 占空比 C 参数计算&#xff1a; 当MOS管导通时&#xff0c;电感电压 V O N V i − …

cudatex文本编辑器

一、下载 通过网盘分享的文件&#xff1a;cudatext 链接: https://pan.baidu.com/s/1TZbGk3AM09SuKvvcQy0d6Q?pwdbbzd 提取码: bbzd 本链接分享的为2025年1月下载上传的软件&#xff0c;版本为1.220.6.1 &#xff1b;软件皆已放入中文包。 二、设置中文简体 打开 https://…

C语言文件操作:标准库与系统调用实践

目录 1、C语言标准库文件操作 1.1.题目要求&#xff1a; 1.2.函数讲解&#xff1a; fopen 函数原型 参数 常用的打开模式 返回值 fwrite函数 函数原型 参数 返回值 注意事项 fseek函数 函数原型 参数 返回值 fread函数 函数原型 参数 返回值 fclose 函数…

一款专业通用开源的MES生产执行管理系统

系统简介 MES系统是一款B/S结构、开源、免费的生产执行管理系统。 此系统基于本人多年离散智造行业的业务经验及J2EE项目经验开发。 主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 系统将提供“售前”、“实施”、“用户培训”、…

SpringBoot集成Flink-CDC,实现对数据库数据的监听

一、什么是 CDC &#xff1f; CDC 是Change Data Capture&#xff08;变更数据获取&#xff09;的简称。 核心思想是&#xff0c;监测并捕获数据库的变动&#xff08;包括数据或数据表的插入、 更新以及删除等&#xff09;&#xff0c;将这些变更按发生的顺序完整记录下来&…

Three城市引擎地图插件Geo-3d

一、简介 基于Three开发&#xff0c;为Three 3D场景提供GIS能力和城市底座渲染能力。支持Web墨卡托、WGS84、GCJ02等坐标系&#xff0c;支持坐标转换&#xff0c;支持影像、地形、geojson建筑、道路&#xff0c;植被等渲染。支持自定义主题。 二、效果 三、代码 //插件初始化…

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; HTTP 协议 &#x1f98b; 认识 URL&#x1f98b; urlencode 和 urldecode 二&#xff1a;&#x1f525; HTTP 协议请求与响应格式 &#x1f98b; HTTP 请求…

鸿蒙仓颉环境配置(仓颉SDK下载,仓颉VsCode开发环境配置,仓颉DevEco开发环境配置)

目录 ​1&#xff09;仓颉的SDK下载 1--进入仓颉的官网 2--点击图片中的下载按钮 3--在新跳转的页面点击即刻下载 4--下载 5--找到你们自己下载好的地方 6--解压软件 2&#xff09;仓颉编程环境配置 1--找到自己的根目录 2--进入命令行窗口 3--输入 envsetup.bat 4--验证是否安…

CPU 缓存基础知识

并发编程首先需要简单了解下现代CPU相关知识。通过一些简单的图&#xff0c;简单的代码&#xff0c;来认识CPU以及一些常见的问题。 目录 CPU存储与缓存的引入常见的三级缓存结构缓存一致性协议MESI协议缓存行 cache line 通过代码实例认识缓存行的重要性 CPU指令的乱序执行通过…

计算机网络 (56)交互式音频/视频

一、定义与特点 定义&#xff1a;交互式音频/视频是指用户使用互联网和其他人进行实时交互式通信的技术&#xff0c;包括语音、视频图像等多媒体实时通信。 特点&#xff1a; 实时性&#xff1a;音频和视频数据是实时传输和播放的&#xff0c;用户之间可以进行即时的交流。交互…

【Linux系统】Linux下的图形库 ncurses(简单认识)

基本介绍 在 Linux 环境下&#xff0c;ncurses 是一个非常重要的库&#xff0c;用于编写可以在终端&#xff08;TTY&#xff09;或模拟终端窗口中运行的 字符界面程序。它提供了一套函数&#xff0c;使得开发者可以轻松地操作文本终端的显示&#xff0c;比如移动光标、创建窗口…

基于C#实现多线程启动停止暂停继续

大部分初学者在学习C#上位机编程时&#xff0c;多线程是一个很难逾越的鸿沟&#xff0c;不合理地使用多线程&#xff0c;会导致经常出现各种奇怪的问题&#xff0c;这也是很多初学者不敢使用多线程的原因。但是在实际开发中&#xff0c;多线程是一个不可避免的技术栈&#xff0…