用亚马逊AI代码开发助手Amazon Q Developer开发小游戏(中篇)

快用人工智能帮程序员写代码、开发游戏!今天小李哥就来介绍亚马逊推出的国际前沿人工智能AI代码开发助手Amazon Q Developer。目前该代码助手在Hugging Face代码生成权威测试集SWE-bench中排名第一,可以根据我们的需求生成整个代码项目,并可以帮助我们解释代码、提供架构设计方案、编写代码测试案例、提供漏洞扫描和修复建议、基于我们GitHub代码库中的历史代码生成新的代码段。

在本篇我们将进行代码实操,用AI开发助手开发一个猜词小游戏,该猜词小游戏的游戏截图如下图。玩家在游戏中有五次猜词机会,目标是猜测一个六个字母的单词。每次猜测后,玩家在游戏界面中会收到单词位置对应的+ ? X 占位符反馈信息。其中+ 字符表示该位置的字母正确,? 字符表示字母在单词中但位置错误,X 字符表示字母不在单词中。通过不断的反馈和尝试,最终猜测出正确的单词。

方案所需基础知识

什么是Amazon Q Developer?

Amazon Q Developer 是一款由亚马逊云科技推出的AI驱动的软件开发助手,用于帮助开发者重新构想整个软件开发生命周期的体验,使得在亚马逊云科技或其他平台上构建、保护、管理和优化代码的过程变得更加快捷。其中比较亮点的功能是Amazon Q Developer Agent,它一个特性开发代理,该代理可以在集成到VSCode等开发环境(IDE)中,通过该工具开发者只需要通过自然语言输入,就可以自动生成定制化代码项目、修复代码bug和漏洞以及单元测试。当开发者输入特定代码需求后,软件开发代理会分析开发者的代码库并制定实现代码计划。开发者可以接受该计划,或者要求代理对其进行迭代优化之前的项目版本。在计划被确认接受后,代理会自动生成基于开发者需求的代码更改。

Amazon Q Developer 通过生成式人工智能(AI)为所有开发者提供目前性能最佳的代码生成工具,目前Amazon Q Developer在SWE-bench排行榜上名列第一。SWE-bench是一个测试系统自动解决GitHub代码问题的开发工具评估数据集。接下来小李哥就会介绍如何开始使用软件开发代理开发游戏、概述代理的工作原理等。

本实践包括的内容

1. 分享生成式AI猜词小游戏Java源代码

2. 利用Amazon Q为猜词小游戏源代码进行解释、构建、Debug

本实践包括的内容

Amazon Q代码助手插件安装

1. 确认已经在VS Code IDE运行环境中安装了进行实操实验的必要依赖项

  • Amamzon CLI
  • Visual Studio Code 的 Amazon Q 扩展
  • Git
  • Java - Amazon Corretto -- 版本 8 和17
  • Maven

2. 导航到 VS Code IDE 左侧窗格中的扩展图标

3. 在搜索栏中,输入 Amazon Q 并点击 Install

登录亚马逊云科技开发者账户使用Amazon Q Developer

4. 在 Visual Studio Code 的 Amazon Q 扩展中,选择上方的”Use For Free“,并选择Continue继续。

5. 出现提示是否要使用代码打开外部网站,选择打开。

6. 将打开浏览器选项卡并显示登录开发者账户Builder ID页面,输入账户信息登录。

7. 登录成功后我们就可以看到左侧的Amazon Q Developer对话界面,我们输入测试问题”What is your name?“可以得到Amazon Q Developer的介绍

小游戏源代码项目

8. 小李哥在这里将分享部分源代码,其中游戏控制器代码如下:

package com.example.qwords.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;import com.example.qwords.model.Word;
import com.example.qwords.model.GameStatus;
import com.example.qwords.service.WordSelectionService;import io.micrometer.core.lang.Nullable;
import lombok.extern.log4j.Log4j2;@Controller
@Log4j2
public class GameController {private WordSelectionService wordBank;private String selected;private Word word;@GetMapping("/game")public String index(@RequestParam String user, Model model) {wordBank = new WordSelectionService();selected = wordBank.getWord();word = new Word(selected);log.info(user);int attempts = getAttempts(model);String result = "";//Set View Attributesmodel.addAttribute("word", word.getWord());model.addAttribute("message", "Make your first guess!");model.addAttribute("attempts", attempts);model.addAttribute("result", result);model.addAttribute("status", GameStatus.INPROGRESS);return "game";}@PostMapping("/game")public String makeGuess(String guess, int attempts, Model model) {String result = word.getInfo(guess);attempts = addAttempt(attempts);model.addAttribute("result", result);model.addAttribute("attempts", attempts);model.addAttribute("guess", guess);if (word.isCorrect(guess.toCharArray())) {model.addAttribute("message", "Congratulations! You guessed correctly");model.addAttribute("status", GameStatus.SUCCESS);} else {if (attempts >= 5) {model.addAttribute("message", "Sorry, you've reached the maximum number of attempts.");model.addAttribute("status", GameStatus.FAILED);} else {model.addAttribute("message", "Try again. Your next guess:");model.addAttribute("status", GameStatus.INPROGRESS);}}return "game";}private int getAttempts(Model model) {Integer attempts = (Integer) model.getAttribute("attempts");return (attempts != null) ? attempts : 0;}private int addAttempt(@Nullable Integer attempt) {return attempt + 1;}}

 单词选择服务源代码如下:

package com.example.qwords.service;import com.example.qwords.repository.WordList;public class WordSelectionService {private WordList wordlist;private String selectedWord;public WordSelectionService() {this.wordlist = new WordList();this.selectedWord = wordlist.getRandomWord();}public String getWord() {return this.selectedWord;}
}

利用Amazon Q为源代码开发增效

9. 我们通过以下命令编译、运行该Java项目

mvn verify
java -jar target/QWordsService-0.0.1.jar

10. 运行结束后会将游戏进程绑定到8090端口,并弹出窗口询问是否要在浏览器中打开应用程序。选择 Open in Browser,就可以弹出以下游戏界面。

11. 目前源代码中存在一个小Bug,就是每次被猜测的词是固定的,让游戏没有挑战性,我们想让这个被猜测的词是随机的。接下来我们一步步通过Amazon Q的AI能力解决这个Bug。首先我们选中我们在第8步分享的游戏控制器代码,然后右键单击“Send to Amazon Q > Send to prompt”,将 源代码发送到 Q。。

12. 接下来在Amazon Q聊天框中对选中代码解释,输入以下内容获得具体解释。

How is the word selected for the game?

代码解释如下:

13. 接下来我们重复同样的操作,将步骤9中的单词选择服务源代码导入到Q中,并提问以下问题对代码进行解释。

How does the WordSelectionService select and return a word for the GameController?

得到的解释如下:在该回复中,Q理解出单词随机选择的逻辑是调用了WordList.getRandomWord 函数,我们需要修改该函数内的代码逻辑实现随机单词生成。

14. 我们将该函数的源代码导入到Q中,并输入以下问题,让Q帮我们生成修改后的正确代码。

My words are not selected in a random fashion. Can you troubleshoot and fix the code?

得到以下回复,回复中可以看到Amazon Q建议使用Math.random() 实现随机单词的生成。在 Amazon Q聊天框的回复中,有一个在光标处插入(insert at cursor)选项,单击此选项可以直接将原项目中的源代码一键替换掉,更高效的对代码进行修改。

15. 我们再进入到WordList.getRandomWord 函数源代码中,可以看到代码已经被替换掉了

package com.example.qwords.repository;
import java.util.ArrayList;
import java.lang.Math;public class WordList {private ArrayList<String> wordlist;public WordList() {this.wordlist = new ArrayList<String>();this.wordlist.add("animal");this.wordlist.add("bakery");this.wordlist.add("cracks");}public String getRandomWord() {int randomIndex = (int) (Math.random() * wordlist.size());return this.wordlist.get(randomIndex);}}

16. 我们运行如下命令,对小游戏项目进行重新构建和启动

mvn -U clean verify
java -jar target/QWordsService-0.0.1.jar

17. 再次打开游戏页面,输入猜测的单词,我们发现被猜的单词已经不是固定单词了,通过这种方式让游戏更有乐趣。

 

以上就是利用亚马逊AI代码开发/生成工具-Amazon Q Developer开发猜词小游戏的中篇内容。欢迎大家关注小李哥的亚马逊云科技AI服务深入调研系列,关注小李哥未来不要错过更多国际前沿的AWS云开发/云架构方案。 

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

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

相关文章

IDEA莫名奇妙自动选择光标所在行 -罪魁祸首居然是钉钉

请看受害者视角 作为开发者&#xff0c;工作时基本都会运行钉钉吧。最近&#xff0c;钉钉更新了AI功能&#xff0c;但不知道是不是开发团队平时不使用IDE&#xff0c;竟然让这个AI功能影响到了其他软件&#xff0c;简直让人无语。不仅仅是IDEA受影响&#xff0c;就连WebStorm也…

QQ聊天记录删除了怎么恢复?学会这3个方法,简单又有效

QQ作为我们日常沟通的重要工具之一&#xff0c;其聊天记录往往承载着许多珍贵的记忆和重要的信息。但在操作中我们会不小心删除或丢失这些聊天记录&#xff0c;那么QQ聊天记录删除了怎么恢复就成为我们急切需要解决的问题。先别急&#xff0c;本文就为你介绍3种简单又有效的QQ聊…

【Qt笔记】QListWidget控件详解

目录 引言 一、基本概念和特性 二、基本用法 2.1 创建和初始化 2.2 添加和删除项 2.3 选择和遍历项 三、信号与槽 3.1 itemClicked 3.2 itemDoubleClicked 3.3 itemSelectionChanged 四、自定义项 五、排序和查找 六、代码示例 6.1 头文件 6.2 源文件 6.3 主…

腾讯云TRTC无UI集成——分享屏幕主流、辅流(Vue2+JS+TRTC无UI集成)

先阐述一下问题&#xff0c;在项目中用到腾讯云的TRTC&#xff0c;A端发布A1、A2两个视频源&#xff0c;在B端订阅A1、A2使用两个view进行播放渲染 问题主流视频源和辅流视频源渲染在同一view上&#xff0c;控制台报错 // 播放远端视频 TRTCService.js; setRemoteVideo(view)…

【数据结构入门】排序算法之插入排序与选择排序

目录 前言 一、排序的概念及运用 1.排序的概念 2.排序的运用 3.常见排序算法 二、插入排序与选择排序 2.1插入排序 2.1.1直接插入排序 1&#xff09;基本思想 2&#xff09;具体步骤 3&#xff09;算法特性 4&#xff09;算法实现 2.1.2希尔排序 1) 基本思想 2&…

草原灭火车的功能与性能_鼎跃安全

在内蒙古的草原火灾中&#xff0c;水陆两栖全地形草原灭火车曾多次用于紧急救援。其强大的越野能力和高速反应&#xff0c;使其在广袤的草原上能够迅速到达火场&#xff0c;并使用集成的多功能灭火设备进行灭火作业&#xff0c;有效防止了火灾的进一步蔓延。 水陆两栖全地形草原…

React学习-hooks

官方文档&#xff1a;https://zh-hans.react.dev/reference/react/useActionState 1.useEffect(setup, dependencies?) 1.1 基础使用 //hooks import { useEffect } from "react"; import "./App.css";function App(){useEffect(()>{console.log(us…

redis的共享session应用

项目背景&#xff1a; 该项目背景就是黑马的黑马点评项目。 一&#xff1a;基于Session实现验证码登录流程 基本的登录流程我们做了很多了。这个是短信登录流程 其实和普通的登录流程就多了一个生成验证码&#xff0c;并将验证码保存在session中&#xff0c;并且呢&#xf…

vue3中使用supermap icilent3d for cesium

记录从头开始学习supermap icilent3d fro cesium 1.新建vue3项目 npm create vitelatest 添加这个&#xff0c;自动打开浏览器 2.使用supermap icilent3d for Cesium 复制这个Cesium&#xff0c;放到pulibc目录下面 然后分别引入css和js 然后就可以使用了&#xff0c;但是会…

Oracle 客户端 PL/SQL Developer 15.0.4 安装与使用

目录 官网下载与安装 切换中文与注册 连接Oracle数据库 tnsnames.ora 文件使用 Oracle 客户端 PL/SQL Developer 12.0.7 安装、数据导出、Oracle 执行/解释计划、for update。 官网下载与安装 1、官网&#xff1a;https://www.allroundautomations.com/products/pl-sql-d…

【STM32】通用定时器TIM(输出比较)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 输出比较简介 PWM简介 输出比较配置 初始化IO口 输出比较初始化 输出比较代码 PWM.h PWM.c main.c 应用案例 前言 建议先阅读这篇博客&#xff0c;理解时基单元的配置 【…

CDGA|数据治理:构建高效数据管理体系的实践路径

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;其质量、安全性和有效利用率直接影响着企业的决策能力、运营效率和市场竞争力。因此&#xff0c;数据治理作为确保数据质量、促进数据价值最大化的关键环节&#xff0c;其重要性日益凸显。本文将从几个…

机械学习—零基础学习日志(概率论总笔记1)

概率论的起源 在历史上有明确记载的最早研究随机性的数学家是帕斯卡和费马。帕斯卡就是最早发明机械计算机的那位数学家&#xff0c;他并不是赌徒&#xff0c;但是他有些赌徒朋友&#xff0c;那些人常常玩一种掷骰子游戏&#xff0c;游戏规则是由玩家连续掷4次骰子&#xff0c…

【王树森】Vision Transformer (ViT) 用于图片分类(个人向笔记)

图片分类任务 给定一张图片&#xff0c;现在要求神经网络能够输出它对这个图片的分类结果。下图表示神经网络有40%的信心认定这个图片是狗 ResNet&#xff08;CNN&#xff09;曾经是是图像分类的最好模型在有足够大数据做预训练的情况下&#xff0c;ViT要强于ResNetViT 就是Tr…

(十五)SpringCloudAlibaba-Sentinel持久化到Nacos

前言 在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中; 传送门(Sentinel数据持久化到文件)https://blog.csdn.net/weixin_45876411/article/details/140742963 默认情况下 Sentinel 只能接收到 Nacos 推送的消息&#xff0c;但…

火情监测识别摄像机

火情监测识别摄像机 是一种用于监测和识别火灾风险的设备&#xff0c;通常用于森林、草原以及其他火灾易发区域。这种摄像机能够实时监测周围的环境&#xff0c;并使用图像识别技术来识别火灾的迹象。 这些摄像机通常配备红外热成像技术和视频分析算法&#xff0c;可以在白天和…

程序二义性举例

// 程序二义性.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> using namespace std; void f(int x) {cout << "---" << x << endl;} void f(int x,int y10) {cout << "" &l…

客流预测 | 基于Transformer下车站点客流推断研究(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于Transformer的车站客流推断研究是指利用Transformer模型来预测车站的客流情况。Transformer是一种强大的深度学习模型&#xff0c;特别擅长处理序列数据。研究可以为城市交通管理提供重要决策支持&#xff0c;帮…

【系统分析师】-面向对象方法

目录 1、基本概念 2、UML 2.1、基本结构 2.1.1.构造块 2.1.1.1、事物 2.1.1.2、关系 2.1.1.3、图形 2.1.2.规则 2.1.3.公共机制 2.2、41视图 3、面向对象分析OOA 3.1、用例模型 3.2、分析模型 4、面向对象设计OOD 4.1、细分 4.2、设计原则 5、面向对象的程序设…

传统CV算法——基于harris检测算法实现角点检测

角点 角点是图像中的一个特征点&#xff0c;指的是两条边缘交叉的点&#xff0c;这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中&#xff0c;角点是重要的特征&#xff0c;因为它们通常是图像中信息丰富的区域&#xff0c;可以用于图像分析、对象识别、3D…