程序员最强辅助——‘‘豆包Marscode” Apply功能上线爽爆了!一键生成贪吃蛇游戏!

呕吼~年初五,迎财神!各位佬儿们在新的一年一定财源滚滚!!
欢迎来到爱因斯晨栏目!
今天给大家带来程序员最强辅助——Marscode
更多文章:个人主页

风雪压我两三年,我笑风轻雪如棉!大家一起进步!一起加油哦!


在这里插入图片描述
本文正在参加豆包MarsCode上新Apply体验活动

前言

作为一个程序猿,大家是不是跟我一样:每当程序出现bug想寻求AI帮助时,都要将一大段程序全部复制下来并写出我的需求。如此麻烦繁琐,有时还会出现驴头不对马尾的现象。
在这里插入图片描述

有同学说了,使用Copilot呀~可以是可以,但是他每个月10$的价格真的很不美妙!

在这里插入图片描述

于是,众望所致——Marscode 应运而生!可谓不是copilot用不起,而MarsCode更有性价比!!

一、Marscode介绍

豆包 Marscode 由深耕人工智能领域、技术实力强大的字节跳动开发,旨在满足人们在信息获取、内容创作、技术支持等多方面需求。它能凭借强大的语言理解能力快速准确回答各类知识问题,根据主题和风格要求生成逻辑清晰、富有创意的内容,支持多种编程语言的代码编写与调试,且作为基于云端的智能服务,用户通过网页浏览器或移动应用联网即可使用,无需复杂本地配置。主要支持网页端 IDE插件.

二、Marscode环境配置

我们来示范一下在IDEA中的配置吧~

  • 首先点击文件,出现菜单栏,点击设置。在这里插入图片描述

  • 选择插件,在插件中搜索Marscode,点击安装。在这里插入图片描述

  • 在界面底部可以查看安装进程,安装成功后重启IDE。在这里插入图片描述
    在这里插入图片描述

  • 重启后可以看到右半部以显示插件(登录)在这里插入图片描述

  • 点击-,可以隐藏。在这里插入图片描述

  • 若要启用可以点击图标,可以出现对话面板。在这里插入图片描述

当然Marscode最牛的一点就是云端配置。可以满足几乎所有语言云端开发,还可以从github直接导入项目。这是不是代表可以省下一笔给设备氪金的钱啦~

比如我新建一个关于java的项目,它拥有idea应有的所有插件,还支持Debug调试程序,还支持AI编程,简直不要太爽~Marscode官网在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、使用讲解

在对话面板中,底部有对话框。可以理解为它是基于代码场景调优过的豆包大模型。可以在书写代码的同时和AI交流。(快捷键:Ctrl+U

  • 生成代码

这个功能分为两种,一个是根据注释书写代码,另一个是边写边推断。

在根据注释书写代码时,我们可以发现它考虑的还是很全面的。在这里插入图片描述

在边写边推断时,它可以结合上文代码的逻辑链来推断,如果推断是正确的我们可以Tab一下~在这里插入图片描述

  • 写注释(/doc)

这个功能还是很简单的,你只需选中你需要注释的代码,然后点击左侧的图标,选中注释代码即可。

我们在右侧可以看到对代码的预览,点击插入即可替换原代码。在这里插入图片描述

  • 解释代码(/explain)

这个功能对大型项目十分友好,可以帮助我们快速读懂这一团代码,十分节省时间。在这里插入图片描述

  • 单元测试(/test)

对于单个方法和单个类,这里可以一键生成测试用例。这里使用的时mokito,要运行这个代码的前提是你要在maven当中引入对mokito的相关依赖。

  • 代码修复(/fix)

在我们写代码的过程中经常会出现报错的情况,会有黄色波浪线提示。我们可以选中这段代码,输入快捷键/fix,它就可以分析这段代码的错误原因。在这里插入图片描述

或者将报错信息(红字)直接喂入对话框,会给你报错查询。在这里插入图片描述
在这里插入图片描述

  • 代码优化

可以直接在对话框中输入指令。

  • 新功能——Apply 效率翻倍!

    功能介绍

告别重复操作:可将 AI 生成的代码片段自动应用到项目对应文件位置并形成 Diff,无需手动打开文件、复制粘贴与调试等繁琐操作。
精准问题解决:能自动识别文件路径,按需求完成代码插入 / 修改;通过 /fix 指令可快速定位并修复代码错误,一处修改处处应用;还能自动完成函数名称的查找与替换,避免连锁错误。
助力新项目开发:在创建新项目时,如初始化 React 项目,可提供初始化和安装依赖等功能,一键运行完成初始化,自动识别新增文件路径,创建新文件与代码。
代码快速切换:可以快速修改代码中想要更改的函数名称等,直接将更改的代码贴到源代码中进行修改。
代码注释生成:能帮用户快速解析代码结构与逻辑,自动生成精准且格式规范的注释,减轻工作量。

使用方式:

安装插件:在 VSCode 中安装豆包 MarsCode 编程助手,插件版本需达到 1.1.40,安装地址为https://sourl.cn/MJcubj。
代码修改应用:在需求开发场景中,告知豆包 MarsCode 需求,AI 提供相关代码方案并自动识别文件路径,在对应位置完成代码插入 / 修改,点击 AI 生成代码块右上角的 Apply 按钮,选择部分采纳或全部采纳即可。
错误修复应用:通过 /fix 指令让豆包 MarsCode 查找代码中的错误,点击 Apply 后将在预期文件中完成修改,差异清晰呈现,选择 “全部采纳” 可让多处修复结果一次性应用到需修复位置。
函数名称修改:通过自然语言要求模型修改函数名称,Review 结果后点击代码块上的 Apply 按钮即可在文件中进行应用,也可通过多轮对话补充需求,使函数名修改更轻松。
注释生成应用:当需要生成代码注释或文件注释时,与 AI 对话提出需求,AI 生成注释后点击 Apply 按钮,即可将精准且格式规范的注释应用到相应代码或文件中。
全新代码创建:创建新项目时,向豆包 MarsCode 发出指令,如 “帮我在当前项目中初始化一个 React 项目,并完成记事本的功能” 等,AI 生成全新的文件和代码后,点击 Apply 采纳代码,即可在对应目录下一键创建新文件并应用代码。

注:这一功能只能在VScode中运行,jetbrains敬请期待!在这里插入图片描述
使用心得

在日常编程工作中,效率和准确性是我一直追求的目标,而豆包MarsCode的“一键Apply”功能极大地提升了我的编程体验。以往获取AI生成的代码片段后,手动复制粘贴到对应文件、检查调试的过程繁琐又易出错,现在该功能能自动识别文件路径,将代码精准应用到项目对应位置并形成Diff,点击Apply即可完成操作,让我能更专注于代码逻辑与功能实现。遇到代码错误时,通过/fix指令可快速定位并修复,还能自动完成函数名称查找与替换,避免手动修改导致的连锁错误,确保代码一致性与正确性。在新项目开发中,像初始化React项目,它能提供初始化和安装依赖等功能,自动识别新增文件路径,点击Apply就能一键创建新文件并应用代码,快速搭建项目框架,是编程道路上的得力助手。

四、爽一把~(贪吃蛇代码实现)

基于以上功能,我们完全可以通过关键词来使其独立开发出一个项目,比如我们可以做一款贪吃蛇游戏。

我们输入提示词:

目标: 使用 Java 在 MarsCode 中编写一款简单的贪吃蛇游戏。

核心功能:

  1. 游戏界面:

    • 使用字符或图形表示蛇、食物和墙壁。
    • 实时更新游戏画面,显示蛇的移动和分数。
  2. 蛇的控制:

    • 使用键盘方向键控制蛇的移动方向 (上、下、左、右)。
    • 蛇身跟随蛇头移动,保持连贯性。
  3. 食物生成:

    • 随机在地图上生成食物。
    • 蛇吃到食物后,蛇身变长,分数增加,并在新位置生成食物。
  4. 碰撞检测:

    • 检测蛇头是否撞到墙壁或自身,游戏结束。
  5. 游戏循环:

    • 不断更新游戏状态,处理用户输入,渲染画面,直到游戏结束。

    将其喂入Marscode,可得以下结果。在这里插入图片描述

    复制到IDEA,运行可得:在这里插入图片描述
    在这里插入图片描述

    原码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class game extends JPanel implements ActionListener {
    private final int WIDTH = 300;
    private final int HEIGHT = 300;
    private final int DOT_SIZE = 10;
    private final int ALL_DOTS = 900;
    private final int RAND_POS = 29;
    private final int DELAY = 140;

    private final int x[] = new int[ALL_DOTS];
    private final int y[] = new int[ALL_DOTS];

    private int dots;
    private int apple_x;
    private int apple_y;

    private boolean leftDirection = false;
    private boolean rightDirection = true;
    private boolean upDirection = false;
    private boolean downDirection = false;
    private boolean inGame = true;

    private Timer timer;

    public game() {
        initGame();
    }

    private void initGame() {
        dots = 3;

        for (int z = 0; z < dots; z++) {
            x[z] = 50 - z * 10;
            y[z] = 50;
        }

        locateApple();

        addKeyListener(new TAdapter());
        setBackground(Color.black);
        setFocusable(true);

        timer = new Timer(DELAY, this);
        timer.start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        doDrawing(g);
    }

    private void doDrawing(Graphics g) {
        if (inGame) {
            g.setColor(Color.red);
            g.fillOval(apple_x, apple_y, DOT_SIZE, DOT_SIZE);

            for (int z = 0; z < dots; z++) {
                if (z == 0) {
                    g.setColor(Color.green);
                } else {
                    g.setColor(Color.yellow);
                }
                g.fillRect(x[z], y[z], DOT_SIZE, DOT_SIZE);
            }

            Toolkit.getDefaultToolkit().sync();
        } else {
            gameOver(g);
        }
    }

    private void gameOver(Graphics g) {
        String msg = "Game Over";
        Font small = new Font("Helvetica", Font.BOLD, 14);
        FontMetrics metr = getFontMetrics(small);

        g.setColor(Color.white);
        g.setFont(small);
        g.drawString(msg, (WIDTH - metr.stringWidth(msg)) / 2, HEIGHT / 2);
    }

    private void checkApple() {
        if ((x[0] == apple_x) && (y[0] == apple_y)) {
            dots++;
            locateApple();
        }
    }

    private void move() {
        for (int z = dots; z > 0; z--) {
            x[z] = x[(z - 1)];
            y[z] = y[(z - 1)];
        }

        if (leftDirection) {
            x[0] -= DOT_SIZE;
        }

        if (rightDirection) {
            x[0] += DOT_SIZE;
        }

        if (upDirection) {
            y[0] -= DOT_SIZE;
        }

        if (downDirection) {
            y[0] += DOT_SIZE;
        }
    }

    private void checkCollision() {
        for (int z = dots; z > 0; z--) {
            if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {
                inGame = false;
            }
        }

        if (y[0] >= HEIGHT) {
            inGame = false;
        }

        if (y[0] < 0) {
            inGame = false;
        }

        if (x[0] >= WIDTH) {
            inGame = false;
        }

        if (x[0] < 0) {
            inGame = false;
        }

        if (!inGame) {
            timer.stop();
        }
    }

    private void locateApple() {
        int r = (int) (Math.random() * RAND_POS);
        apple_x = ((r * DOT_SIZE));

        r = (int) (Math.random() * RAND_POS);
        apple_y = ((r * DOT_SIZE));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (inGame) {
            checkApple();
            checkCollision();
            move();
        }

        repaint();
    }

    private class TAdapter extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();

            if ((key == KeyEvent.VK_LEFT) && (!rightDirection)) {
                leftDirection = true;
                upDirection = false;
                downDirection = false;
            }

            if ((key == KeyEvent.VK_RIGHT) && (!leftDirection)) {
                rightDirection = true;
                upDirection = false;
                downDirection = false;
            }

            if ((key == KeyEvent.VK_UP) && (!downDirection)) {
                upDirection = true;
                rightDirection = false;
                leftDirection = false;
            }

            if ((key == KeyEvent.VK_DOWN) && (!upDirection)) {
                downDirection = true;
                rightDirection = false;
                leftDirection = false;
            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Snake Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        game game = new game();
        game.setPreferredSize(new Dimension(300, 300));

        frame.getContentPane().add(game);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

五、总结

在当今快节奏的编程世界中,高效的开发工具和辅助手段至关重要。豆包 Marscode 的出现为广大程序员带来了极大的便利,堪称程序员的最强辅助。

与传统寻求 AI 帮助时复制大量代码并详细描述需求的繁琐方式相比,Marscode 极大地简化了流程。而和需要付费且价格不低的 Copilot 相比,Marscode 凭借其高性价比脱颖而出,成为了更多开发者的选择。

从功能方面来看,Marscode 功能强大且丰富。在环境配置上,以 IDEA 为例,简单几步操作就能完成插件的安装和配置,并且其云端配置更是一大亮点,支持多种语言的云端开发,还能直接从 github 导入项目,为开发者节省了硬件成本。

在使用上,Marscode 提供了多样化的功能。生成代码功能既可以根据注释书写代码,又能边写边推断,十分智能;写注释功能能快速为代码添加清晰的注释;解释代码功能对大型项目的理解有很大帮助;单元测试功能能一键生成测试用例;代码修复功能可以分析代码错误原因;代码优化功能则可通过对话框指令实现。

通过实际案例,如使用 Java 开发贪吃蛇游戏,我们看到了 Marscode 独立开发项目的强大能力。它根据我们提供的详细提示词,生成了完整可用的代码,运行后能实现预期的游戏功能。

总的来说,豆包 Marscode 以其便捷的使用方式、丰富的功能和高性价比,成为了程序员开发过程中不可或缺的好帮手。它不仅能提高开发效率,还能降低开发成本,帮助开发者更加轻松地应对各种编程任务,让程序员在开发过程中更加得心应手,告别繁琐和低效,真正实现 “气死资本家” 的高效开发。相信在未来,Marscode 会不断发展和完善,为开发者带来更多的惊喜和便利。

能一键生成测试用例;代码修复功能可以分析代码错误原因;代码优化功能则可通过对话框指令实现。

通过实际案例,如使用 Java 开发贪吃蛇游戏,我们看到了 Marscode 独立开发项目的强大能力。它根据我们提供的详细提示词,生成了完整可用的代码,运行后能实现预期的游戏功能。

总的来说,豆包 Marscode 以其便捷的使用方式、丰富的功能和高性价比,成为了程序员开发过程中不可或缺的好帮手。它不仅能提高开发效率,还能降低开发成本,帮助开发者更加轻松地应对各种编程任务,让程序员在开发过程中更加得心应手,告别繁琐和低效,真正实现 “气死资本家” 的高效开发。相信在未来,Marscode 会不断发展和完善,为开发者带来更多的惊喜和便利。

注:提示词来源与Deepseek

### 豆包MarsCode概述 豆包MarsCode是一款智能编程助手开发工具,旨在提供全面的支持和服务于开发者社区。该平台不仅涵盖了多种编程语言和技术栈的支持,还提供了丰富的功能模块以辅助日常编码工作[^5]。 #### 支持的技术栈 对于不同类型的开发需求,豆包MarsCode支持广泛的编程语言和框架: - **后端开发**:Go、Python、C++、C、C#、Java、PHP 和 Rust。 - **前端开发**:HTML、TypeScript、JavaScript 及 CSS。 - **移动应用开发**:Kotlin、Objective-C 和 Swift。 - **其他技术**:Lua、SAS、CUDA、Perl、Ruby、Shell、SQL 以及 R[^4]。 通过这种广泛而深入的技术覆盖范围,无论是在哪个领域工作的程序员都能找到适合自己的帮助资源。 #### 功能特性 作为一款智能化程度较高的编程助手,豆包MarsCode具备以下几项核心能力: - **代码编写指导**:无论是新手还是经验丰富的工程师,在遇到难题时都可以向它寻求解决方案;不仅能解决具体问题还能提供建议优化现有方案。 - **项目构建与学习**:从零开始创建新工程到逐步完善已有项目的各个阶段都有相应的指南和支持材料可供参考。 - **知识点检索服务**:当用户想要快速查找某个特定概念或技巧的应用方法时,只需简单描述即可获得精准的结果列表。 - **全天候在线答疑解惑**:除了专业的技术支持外,任何有关计算机科学方面的问题也能够得到及时有效的回复。 #### 用户反馈与改进建议 有用户提到希望增加对上传文档并自动解析其内容的功能,以便更高效地处理复杂的信息输入场景。这一提议得到了积极的认可,并被认为有助于进一步提升用户体验质量[^3]。 另外也有声音表示希望能够简化某些操作流程,比如定义API请求中的关键数据筛选逻辑等细节之处,使得整个交互过程更加直观易懂[^1]。 ---
评论 72
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值