政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例

news2024/11/27 17:16:52

目录

Cusor的主要特点

Cusor实操


政安晨的个人主页:政安晨

欢迎 👍点赞✍评论⭐收藏

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

Cursor 是 Visual Studio Code 的一个分支。这使我们能够专注于创造使用人工智能进行编码的最佳方式,同时提供熟悉的文本编辑体验。

Cusor的主要特点

Cursor 编辑器是一款功能强大的代码编辑器,主要有以下特点:

一、编程辅助功能

  • 智能代码补全
    • 它能够根据编程语言的语法规则和上下文,自动补全代码片段。例如,在编写 Python 程序时,当你输入一个函数的开头几个字母,如 “pri”,它会自动提示 “print ()” 这个函数,这大大提高了编码效率,减少了手动输入代码的时间和出错的概率。
  • 代码生成
    • Cursor 可以根据自然语言描述生成代码。比如,你输入 “写一个函数来计算两个数的和”,它能够生成类似以下 Python 代码:
def add_numbers(a, b):
    return a + b
  • 对于复杂的算法或者特定的编程任务,这种代码生成功能可以为程序员提供一个很好的起点,他们可以在生成代码的基础上进行修改和完善。

二、支持多种编程语言

  • 它支持广泛的编程语言,包括但不限于 Python、Java、JavaScript、C++、C# 等。
    • 对于 Web 开发人员,他们可以使用 Cursor 编写前端的 JavaScript 和 CSS 代码,同时也能处理后端的 Python(如使用 Flask 或 Django 框架)或者 Java 代码。对于游戏开发者,在编写 C++ 或 C# 游戏逻辑代码时,也能借助 Cursor 来提高开发效率。

三、界面和使用体验

  • 简洁直观的界面
    • 其界面设计简洁,易于新手学习和上手。工具栏和菜单布局合理,代码编辑区域清晰,能够让用户专注于代码编写。例如,代码的语法高亮显示可以让不同类型的代码元素(如变量、函数、关键字等)以不同的颜色区分开来,增强了代码的可读性。
  • 方便的文件管理
    • 可以方便地在编辑器中打开、保存和管理文件。用户能够轻松地在不同的项目文件夹之间切换,并且可以快速地查找和打开特定的代码文件。

这是官网:https://www.cursor.com/

安装工具后,进行。


Cusor实操

使用AI编程一个3D骰子的H5程序:

描述:

基于three.js框架开发一个支持鼠标和触屏的科幻风3D骰子程序,支持屏幕缩放,骰子落入地面后,与地面齐平,符合物理规律,朝上的面随机显示数字,两个骰子朝上面的数字不能总是完全一样,骰子在空中旋转时速度适中,不能太慢,但可以让玩家看到数字变化的过程。

生成代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>3D 科幻骰子</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
        #info {
            position: absolute;
            top: 10px;
            width: 100%;
            text-align: center;
            color: white;
        }
    </style>
</head>
<body>
    <div id="info">点击骰子进行投掷,滚轮或双指缩放</div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <script>
        let scene, camera, renderer;
        let dice1, dice2;
        let isRolling = false;
        let floor;

        init();
        animate();

        function init() {
            // 场景设置
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0x000000);

            // 相机设置
            camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
            camera.position.z = 10;
            camera.position.y = 5;
            camera.lookAt(0, 0, 0);

            // 渲染器设置
            renderer = new THREE.WebGLRenderer({ antialias: true });
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.shadowMap.enabled = true;
            document.body.appendChild(renderer.domElement);

            // 灯光设置
            const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
            scene.add(ambientLight);
            const pointLight = new THREE.PointLight(0xffffff, 1);
            pointLight.position.set(10, 10, 10);
            pointLight.castShadow = true;
            scene.add(pointLight);

            // 创建地面
            const floorGeometry = new THREE.PlaneGeometry(20, 20);
            const floorMaterial = new THREE.MeshPhongMaterial({ 
                color: 0x404040,
                side: THREE.DoubleSide
            });
            floor = new THREE.Mesh(floorGeometry, floorMaterial);
            floor.rotation.x = -Math.PI / 2;
            floor.position.y = -2;
            floor.receiveShadow = true;
            scene.add(floor);

            // 创建骰子
            createDice();

            // 添加点击事件
            renderer.domElement.addEventListener('click', rollDice);

            // 添加缩放事件
            renderer.domElement.addEventListener('wheel', onZoom);
            renderer.domElement.addEventListener('touchstart', onTouchStart);
            renderer.domElement.addEventListener('touchmove', onTouchMove);

            // 窗口大小调整
            window.addEventListener('resize', onWindowResize, false);
        }

        let touchStartDistance = 0;
        function onTouchStart(event) {
            if (event.touches.length === 2) {
                const dx = event.touches[0].pageX - event.touches[1].pageX;
                const dy = event.touches[0].pageY - event.touches[1].pageY;
                touchStartDistance = Math.sqrt(dx * dx + dy * dy);
            }
        }

        function onTouchMove(event) {
            if (event.touches.length === 2) {
                const dx = event.touches[0].pageX - event.touches[1].pageX;
                const dy = event.touches[0].pageY - event.touches[1].pageY;
                const distance = Math.sqrt(dx * dx + dy * dy);
                
                const delta = distance - touchStartDistance;
                camera.position.z = Math.max(5, Math.min(15, camera.position.z - delta * 0.01));
                touchStartDistance = distance;
            }
        }

        function onZoom(event) {
            const delta = event.deltaY;
            camera.position.z = Math.max(5, Math.min(15, camera.position.z + delta * 0.01));
        }

        function createDice() {
            const geometry = new THREE.BoxGeometry(2, 2, 2);
            const materials = [];
            
            // 创建骰子材质
            for (let i = 0; i < 6; i++) {
                const canvas = document.createElement('canvas');
                canvas.width = 128;
                canvas.height = 128;
                const context = canvas.getContext('2d');
                
                context.fillStyle = '#000000';
                context.fillRect(0, 0, 128, 128);
                
                context.fillStyle = '#00ffff';
                context.font = '80px Arial';
                context.textAlign = 'center';
                context.textBaseline = 'middle';
                context.fillText(i + 1, 64, 64);
                
                const texture = new THREE.CanvasTexture(canvas);
                materials.push(new THREE.MeshPhongMaterial({ 
                    map: texture, 
                    transparent: true,
                    emissive: 0x00ffff,
                    emissiveIntensity: 0.2
                }));
            }

            // 创建两个骰子
            dice1 = new THREE.Mesh(geometry, materials);
            dice2 = new THREE.Mesh(geometry, materials);
            
            dice1.position.set(-2, 3, 0);
            dice2.position.set(2, 3, 0);
            
            dice1.castShadow = true;
            dice2.castShadow = true;
            
            // 添加点光源作为骰子的光晕效果
            const dice1Light = new THREE.PointLight(0x00ffff, 0.5, 3);
            const dice2Light = new THREE.PointLight(0x00ffff, 0.5, 3);
            dice1Light.position.copy(dice1.position);
            dice2Light.position.copy(dice2.position);
            scene.add(dice1Light);
            scene.add(dice2Light);
            
            scene.add(dice1);
            scene.add(dice2);
        }

        function rollDice() {
            if (isRolling) return;
            isRolling = true;

            // 重置骰子位置
            dice1.position.y = 3;
            dice2.position.y = 3;

            // 为每个骰子生成随机的最终旋转角度
            const finalRotation1 = {
                x: Math.floor(Math.random() * 4) * (Math.PI / 2),
                y: Math.floor(Math.random() * 4) * (Math.PI / 2),
                z: Math.floor(Math.random() * 4) * (Math.PI / 2)
            };
            
            const finalRotation2 = {
                x: Math.floor(Math.random() * 4) * (Math.PI / 2),
                y: Math.floor(Math.random() * 4) * (Math.PI / 2),
                z: Math.floor(Math.random() * 4) * (Math.PI / 2)
            };

            const duration = 2000;
            const start = Date.now();
            const gravity = -9.8;
            const initialVelocity = 2;
            let velocity = initialVelocity;

            function animate() {
                const elapsed = Date.now() - start;
                const progress = elapsed / duration;

                if (progress < 1) {
                    // 应用重力
                    velocity += gravity * 0.016;
                    dice1.position.y = Math.max(-1, dice1.position.y + velocity * 0.016);
                    dice2.position.y = Math.max(-1, dice2.position.y + velocity * 0.016);

                    // 旋转 - 速度增加3倍
                    if (dice1.position.y > -1) {
                        dice1.rotation.x += 0.6;
                        dice1.rotation.y += 0.9;
                        dice1.rotation.z += 0.3;
                    }
                    if (dice2.position.y > -1) {
                        dice2.rotation.x += 0.9;
                        dice2.rotation.y += 0.6;
                        dice2.rotation.z += 0.45;
                    }

                    // 碰撞检测
                    if (dice1.position.y <= -1) {
                        velocity = Math.abs(velocity) * 0.5;
                        dice1.rotation.x = finalRotation1.x;
                        dice1.rotation.y = finalRotation1.y;
                        dice1.rotation.z = finalRotation1.z;
                        dice2.rotation.x = finalRotation2.x;
                        dice2.rotation.y = finalRotation2.y;
                        dice2.rotation.z = finalRotation2.z;
                    }

                    requestAnimationFrame(animate);
                } else {
                    // 停止时确保骰子是平放的
                    dice1.position.y = -1;
                    dice2.position.y = -1;
                    dice1.rotation.x = finalRotation1.x;
                    dice1.rotation.y = finalRotation1.y;
                    dice1.rotation.z = finalRotation1.z;
                    dice2.rotation.x = finalRotation2.x;
                    dice2.rotation.y = finalRotation2.y;
                    dice2.rotation.z = finalRotation2.z;
                    isRolling = false;
                }
            }

            animate();
        }

        function animate() {
            requestAnimationFrame(animate);
            renderer.render(scene, camera);
        }

        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }
    </script>
</body>
</html>

效果图如下:

增加修改为:

请更改骰子中的数字颜色为科技红色。

全选代码,Ctrl+K,输入提示,Ctrl+回车,接受预览。

不满意?修改!

把骰子的颜色再变得对比强烈一些

            const floorMaterial = new THREE.MeshPhongMaterial({ 
                color: 0x202020,  // 地面颜色调暗

 

魔化了,嘻嘻。

OK,产品经理的春天来了,世界仿佛一下子变得安静了。

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

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

相关文章

第三届航空航天与控制工程国际 (ICoACE 2024)

重要信息 会议官网&#xff1a;www.icoace.com 线下召开&#xff1a;2024年11月29日-12月1日 会议地点&#xff1a;陕西西安理工大学金花校区 &#xff08;西安市金花南路5号&#xff09; 大会简介 2024年第三届航空航天与控制工程国际学术会议&#xff08;ICoACE 2024&a…

Vue前端开发2.3.5 条件渲染指令

本文介绍了Vue中两种条件渲染指令&#xff1a;v-if和v-show。v-if通过布尔值控制元素的DOM树存在&#xff0c;适用于不频繁切换显示状态的场景&#xff1b;v-show则通过CSS的display属性控制显示&#xff0c;适合频繁切换。通过创建单文件组件示例&#xff0c;演示了如何使用这…

初级数据结构——二叉树题库(c++)

这里写目录标题 前言[1.——965. 单值二叉树](https://leetcode.cn/problems/univalued-binary-tree/)[2.——222. 完全二叉树的节点个数](https://leetcode.cn/problems/count-complete-tree-nodes/)[3.——144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-…

Java基础——(一)Java概述

Java特性 简单性&#xff1a;Java与C很相似&#xff0c;但剔除了C中许多比较复杂并且很少使用的功能&#xff0c;比如头文件、指针运算、结构、联合、操作符重载、虚基类等&#xff0c;从而使Java更易于上手、学习。面向对象&#xff1a;Java是一门面向对象语言&#xff0c;具…

打造智能化在线教育平台详解:教培网校APP的架构设计与实现

本篇文章&#xff0c;小编将以教培网校APP的架构设计与实现为核心&#xff0c;深入探讨如何打造一套智能化的在线教育平台&#xff0c;为企业和教育机构提供落地参考。 一、在线教育平台的核心功能需求 构建一个高效的教培网校APP&#xff0c;首先需要明确其核心功能需求。一…

Java学习笔记--继承的介绍,基本使用,成员变量和成员方法访问特点

目录 一&#xff0c;继承 1.什么是继承 2.怎么去继承: 3.注意: 4.继承怎么学 二&#xff0c;继承基本使用 三&#xff0c;成员变量和成员方法访问特点 1.成员变量访问特点 1&#xff0c;子类和父类中的成员变量不重名: 总结: 2&#xff0c;子类和父类中的成员变量重…

IDEA2024创建一个spingboot项目

以下是创建一个基本的 Spring Boot 项目的步骤和示例&#xff1a; 初始化一个springboot工程其实有许多方法&#xff0c;笔者这里挑了一个最快捷的方式搭建一个项目。我们直接通过官方平台&#xff08;start.spring.io&#xff09;进行配置&#xff0c;然后下载压缩包就可以获取…

【Leetcode】3206.交替组1

题目描述&#xff1a; https://leetcode.cn/problems/alternating-groups-i/description/?envTypedaily-question&envId2024-11-26 题目示例&#xff1a; 解题思路 思路一&#xff1a; 1.如果color.size()小于等于2&#xff0c;则构不成环&#xff0c;直接返回结果…

利用Docker容器技术部署发布web应用程序

Docker是什么&#xff1f; docker 是一个开源的应用容器引擎&#xff0c;可以帮助开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

问题:smart监控没有能流的问题? smart200与维纶屏

目前路由器网口连接一台电脑&#xff0c;一个伺服&#xff0c;一个smart200从站&#xff0c;一个smart200主站&#xff0c;还有一个mt9106iq维纶屏。 用smart主站监控&#xff0c;发现没有能流。拔掉维纶屏网线&#xff0c;就可以正常显示能流。请问各位老师傅&#xff0c;这个…

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上&#xff0c;AI Agent无疑成为本次大会的重点&#xff0c;已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布&#xff1a;企业可以在智能体中&#xff0c;使用Azure目录中1800个LLM中的任何一个模型了&#xff01; 建立一个Agent…

【Ubuntu】E: Unable to locate package xxx

报错描述 在 Ubuntu 上 执行 apt install xxx 出现下面的报错&#xff1a; 即无法定位到该 Package&#xff0c;一般形式如下&#xff1a; # apt install xxx Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable …

go语言逆向-基础basic

文章目录 go 编译命令 ldflags -w -s的作用和问题使用 file 命令查看文件类型 go 语言逆向参考go ID版本GOROOT和GOPATHGOROOTGOPATHGOROOT和GOPATH的关系示例 go build和 go modpclntab &#xff08;Program Counter Line Table 程序计数器行数映射表&#xff09;Moduledata程…

RL78/G15 Fast Prototyping Board Arduino IDE 平台开发过程

这是一篇基于RL78/G15 Fast Prototyping Board的Arduino IDE开发记录 RL78/G15 Fast Prototyping Board硬件简介&#xff08;背景&#xff09;基础测试&#xff08;方法说明/操作说明&#xff09;开发环境搭建&#xff08;方法说明/操作说明代码结果&#xff09;Arduino IDE RL…

Servlet细节

目录 1 Servlet 是否符合线程安全&#xff1f; 2 Servlet对象的创建时间&#xff1f; 3 Servlet 绑定url 的写法 3.1 一个Servlet 可以绑定多个url 3.2 在web.xml 配置文件中 url-pattern写法 1 Servlet 是否符合线程安全&#xff1f; 答案&#xff1a;不安全 判断一个线程…

使用UE5.5的Animator Kit变形器

UE5.5版本更新了AnimatorKit内置插件&#xff0c;其中包含了一些内置变形器&#xff0c;可以辅助我们的动画制作。 操作步骤 首先打开UE5.5&#xff0c;新建第三人称模板场景以便测试&#xff0c;并开启AnimatorKit组件。 新建Sequence&#xff0c;放入测试角色 点击角色右…

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录&#xff0c;也可以使用默认目录 插件&#xff1a; 输入 Chinese&#xff0c;中文插件 安装&#xff1a; open in browser&#xff0c;直接右键文件…

蓝桥杯模拟题不知名题目

题目:p是一个质数&#xff0c;但p是n的约数。将p称为是n的质因数。求2024最大质因数。 #include<iostream> #include<algorithm> using namespace std; bool fun(int x) {for(int i 2 ; i * i < x ; i){if(x % i 0)return false;}return true; } int main() …

Android 13 编译Android Studio版本的Launcher3

Android 13 Aosp源码 源码版本 Android Studio版本 Launcher3QuickStepLib (主要代码) Launcher3ResLib(主要资源) Launcher3IconLoaderLib(图片加载&#xff0c;冲突资源单独新建) 需要值得注意的是&#xff1a; SystemUISharedLib.jar 有kotlin和java下的&#xff0c;在 Lau…

VMware ubuntu创建共享文件夹与Windows互传文件

1.如图1所示&#xff0c;点击虚拟机&#xff0c;点击设置&#xff1b; 图1 2.如图2所示&#xff0c;点击选项&#xff0c;点击共享文件夹&#xff0c;如图3所示&#xff0c;点击总是启用&#xff0c;点击添加&#xff1b; 图2 图3 3.如图4所示&#xff0c;出现命名共享文件夹…