写点什么

Amazon Q Developer 实践:零基础创建贪吃蛇游戏

  • 2024-11-01
    北京
  • 本文字数:4705 字

    阅读完需:约 15 分钟

大小:2.30M时长:13:22
Amazon Q Developer 实践:零基础创建贪吃蛇游戏

本文探讨了如何使用 Amazon Q Developer 根据结构化的提示词,直接生成一个贪吃蛇游戏原型,并剖析了其背后人工智能的思考和迭代完善过程,展示了人工智能能快速进行游戏原型创作的巨大潜力。


原文出处来自作者于 2024 年 9 月在 community.aws 发表的技术文章:


“From Concept to Playable in Seconds: Creating the Greedy Snake Game with Amazon Q Developer”


概述


在我之前的“Amazon Bedrock 实践:零基础创建贪吃蛇游戏”的文章中,我展示了如何使用 Amazon Bedrock 和结构化的文本提示词,直接生成贪吃蛇游戏原型的完整过程。文章发表后,许多开发人员反馈说深受这篇文章的启发,并好奇地询问 Amazon Q Developer 是否也能够类似这样来直接生成贪吃蛇游戏原型。这就是我将在本文中具体和各位开发者探讨的内容。


贪吃蛇是一款风靡了几代人的老式游戏。游戏目标很简单:


通过控制一条不断增长的小蛇,引导它吃下食物,同时避免撞到游戏界面的边界或蛇身。小蛇吃下越多食物,身体就会越长,游戏难度也就越大,需要玩家迅速反应和具备全局策略思维。


接下来,让我们看看 Amazon Q Developer 通过结构化的自然语言提示词,来直接生成完整贪吃蛇游戏原型代码的非凡能力。


提示词


我将使用之前那篇关于 Amazon Bedrock 生成贪吃蛇原型代码的博客文章中,相同的结构化提示词,来与 Amazon Q Developer 进行交互;这样各位读者将可以观察到:Amazon Q Developer 和 Amazon Bedrock 在整个代码生成过程中的具体差异和区别。


以下是我用于生成贪吃蛇游戏原型代码的提示词:


“Write a short and high-quality python script for the following task, something a very skilled python expert would write. You are writing code for an experienced developer so only add comments for things that are non-obvious. Make sure to include any imports required. 


NEVER write anything before the ```python``` block. After you are done generating the code and after the ```python``` block, check your work carefully to make sure there are no mistakes, errors, or inconsistencies. 


If there are errors, list those errors in tags, then generate a new version with those errors fixed. If there are no errors, write "CHECKED: NO ERRORS" in tags. 


Here is the task: write a greedy snake game.

Double check your work to ensure no errors or inconsistencies.”


如上所述,整段结构化的提示词提供了对游戏的主要功能、需使用的库、以及其他实现细节的详细要求。在提示词中提供这种程度的具体细节描述,对于获得高质量的代码输出至关重要。


开发特性 /dev


如下图所示,在 Amazon Q Developer 聊天对话框中,我在输入提示词描述之前,先输入了 "/dev"。



在 Amazon Q Developer 的上下文中,"/dev" 是一个特殊命令,用于调用 Amazon Q Developer Agent 进行软件开发,而不是指 Linux 系统中的目录。


您可以参考 Amazon Q Developer Agent 文档,以了解详细信息。


与 Amazon Q Developer 互动


以下截图展示了与 Amazon Q Developer 的聊天互动界面。我要求其为贪吃蛇游戏原型生成高质量的 Python 脚本,其确认了该请求,并告知我生成代码可能需要的时间(几分钟)。



数分钟后,Amazon Q Developer 以思考过程汇总的形式作出了回应,这其实也体现了其背后大型语言模型的思考过程,如下图所示。



让我们来一起梳理 Amazon Q Developer 的思考过程。


根据 Amazon Q Developer 的以上汇总摘要,其创建一款贪食蛇游戏原型经历了以下步骤:


首先,它计划打开与编写贪食蛇游戏的问题陈述相关的现有本地代码,以探索工作空间并确定是否有可以重用或修改的代码。


接着,它发现因为工作区是空的,没有与贪吃蛇游戏相关的代码文件,需要自己重新编写。为了解决这个问题,它决定创建一个名为 "snake_game.py" 的 Python 新文件,并准备从头开始实现贪食蛇游戏原型代码。


贪食蛇游戏原型代码,随后在 "snake_game.py" 的 Python 文件中被它实现了,它还声明:代码已经完成并能正常运行了。


然后,它对代码进行了仔细地审阅。审阅完成后,它确认了贪食蛇游戏原型的代码已经完整实现,并已经能够正常运行了。它还特别提及:代码已经包括了所有必需的组件,例如游戏初始化、主游戏循环、蛇形移动、食物生成、碰撞检测和得分显示等等。


图中底部的 "Files used" 部分,总结了代码生成过程中执行的文件操作,供我们参考。


输出完整的贪吃蛇游戏原型代码


以下代码即由 Amazon Q Developer 完整生成的游戏原型代码。


import pygame

import random

# Initialize Pygame

pygame.init()

# Set up the game window

width, height = 640, 480

window = pygame.display.set_mode((width, height))

pygame.display.set_caption("Greedy Snake")

# Colors

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

RED = (255, 0, 0)

GREEN = (0, 255, 0)

# Snake properties

snake_block = 20

snake_speed = 15

# Initialize clock

clock = pygame.time.Clock()

# Font for score display

font = pygame.font.SysFont(None, 50)

def draw_snake(snake_list):

for block in snake_list:

pygame.draw.rect(window, GREEN, [block[0], block[1], snake_block, snake_block])

def game_loop():

game_over = False

game_close = False

# Starting position of the snake

x1 = width // 2

y1 = height // 2

# Initial movement

x1_change = 0

y1_change = 0

# Initialize snake

snake_list = []

length_of_snake = 1

# Generate first food

foodx = round(random.randrange(0, width - snake_block) / snake_block) * snake_block

foody = round(random.randrange(0, height - snake_block) / snake_block) * snake_block

while not game_over:

while game_close:

window.fill(BLACK)

message = font.render("You Lost! Press Q-Quit or C-Play Again", True, RED)

window.blit(message, [width // 6, height // 3])

pygame.display.update()

for event in pygame.event.get():

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_q:

game_over = True

game_close = False

if event.key == pygame.K_c:

game_loop()

for event in pygame.event.get():

if event.type == pygame.QUIT:

game_over = True

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT:

x1_change = -snake_block

y1_change = 0

elif event.key == pygame.K_RIGHT:

x1_change = snake_block

y1_change = 0

elif event.key == pygame.K_UP:

y1_change = -snake_block

x1_change = 0

elif event.key == pygame.K_DOWN:

y1_change = snake_block

x1_change = 0

# Check if snake hits the boundaries

if x1 >= width or x1 < 0 or y1 >= height or y1 < 0:

game_close = True

x1 += x1_change

y1 += y1_change

window.fill(BLACK)

pygame.draw.rect(window, RED, [foodx, foody, snake_block, snake_block])

snake_head = [x1, y1]

snake_list.append(snake_head)

if len(snake_list) > length_of_snake:

del snake_list[0]

# Check if snake hits itself

for segment in snake_list[:-1]:

if segment == snake_head:

game_close = True

draw_snake(snake_list)

# Display score

score = font.render(f"Score: {length_of_snake - 1}", True, WHITE)

window.blit(score, [0, 0])

pygame.display.update()

# Check if snake eats food

if x1 == foodx and y1 == foody:

foodx = round(random.randrange(0, width - snake_block) / snake_block) * snake_block

foody = round(random.randrange(0, height - snake_block) / snake_block) * snake_block

length_of_snake += 1

clock.tick(snake_speed)

pygame.quit()

quit()

if __name__ == "__main__":

game_loop()


以下截图展示了以 Amazon Q Developer 生成的贪吃蛇游戏原型代码片段为背景,前景为该游戏代码运行时的截图:



在深入了解 Amazon Q Developer 实现的游戏原型代码之前,理解 Pygame 在游戏开发中的作用是非常重要的。Pygame 是一组专门用于编写多媒体应用程序(包括游戏)的 Python 模块。它提供了丰富的功能,从处理图形、声音,到管理用户输入、游戏事件等等。


上述代码是使用 Pygame 库编写的经典贪吃蛇游戏原型的 Python 实现。


其主要功能包括:设置游戏窗口、初始化蛇和位置、生成食物、处理用户输入以控制蛇身移动、检测与边界或蛇身是否发生碰撞、更新游戏状态,以及在屏幕上渲染游戏元素等等。游戏将持续进行,直到蛇与边界或自身发生碰撞,此时玩家可以选择退出或重新启动游戏。


不过,如果你是一个游戏新手,以上 AI 生成的游戏原型代码运行后,蛇移动的速度可能会过快,从而让游戏初级玩家无法掌控。


因此,我接着给 Amazon Q Developer 又安排了一个新任务:


调整蛇奔跑的速度。


调整蛇的奔跑速度


以下是我拟提交给 Amazon Q Developer 的交互对话框,从而可以调整贪吃蛇游戏中蛇奔跑速度的英文提示词:


“The code works, but the speed of the snake is too fast. I'm just a beginner at the game, could you adjust the game's speed for me?”



在提交提示词后,Amazon Q Developer 迅速作出回应,截图如下所示:



以上截图展示了一段我和 Amazon Q Developer 的聊天对话记录。


我要求对贪吃蛇游戏的代码进行调整,并表示当前的速度对于初学者来说太快了。


Amazon Q Developer 的回复,解释了如何将初始值为 15 的 snake_speed 变量修改为较低的 8。这样蛇的移动速度就会减慢,游戏对初级玩家来说会更加易于控制。底部的代码片段显示了将 snake_speed 从 15 改为 8,并添加了注释说明这一调整。


你可以按照上述建议进行操作,只需要修改其中一行代码,如下所示:


snake_speed = 8


把新修改后的代码运行起来。你会发现:蛇奔跑的速度比之前慢多了,即使是游戏初级玩家也可以自由地控制蛇的运行啦!


小结


本文展示了 Amazon Q Developer 在根据自然语言的结构化提示词,生成游戏原型代码方面的卓越潜力。


生成的代码体现了 Amazon Q Developer 以及其背后的大模型,理解复杂需求、利用流行库以及根据用户反馈进行迭代改进的巨大潜力。通过调整蛇的速度,其展现了对个性化游戏体验的适应性探索,而整个思维过程的汇总提供了其宝贵的见解,增强了人类对 AI 系统的透明度和信任度。


随着 AI 技术的不断进步,像 Amazon Q Developer 这样的 AI 工具有可能彻底改变软件开发领域,加速应用程序或游戏的原型制作和迭代周期,并极大地促进创新。虽然本文展示的贪吃蛇游戏只是一个较简单的案例,但 Amazon Q Developer 展示出来的能力,为其在更复杂的应用程序开发方向开辟了令人兴奋的无限可能。

2024-11-01 16:387008

评论

发布
暂无评论

Spring中事务嵌套使用一定得警惕这个问题了

做梦都在改BUG

Java spring 事务

快速上手Amazon SageMaker动手实验室

指剑

AI AWS Stable Diffusion Amazon SageMaker

一文带你搞定Maven全功能

Java你猿哥

Java maven ssm 生命周期 Maven仓库

css-文字充电效果

格斗家不爱在外太空沉思

CSS css动画 三周年连更

人机识别技术再升级,AIGC为验证码带来万亿种变化

Geek_2d6073

一文讲透产品经理如何用好ChatGPT

京东科技开发者

人工智能 产品经理 GPT-4 企业号 4 月 PK 榜

硬件工程师常见问题与答疑

华秋PCB

科普 工程师 电子信息 基础知识 电子

CV 领域的 ChatGPT?MetaAI 推出“最强”大视觉模型 SAM

Zilliz

计算机视觉 ChatGPT metaai 大视觉模型

太牛了,这是我见过把微服务讲的最全最好的SpringCloud架构进阶

Java你猿哥

Java 架构 微服务 微服务架构 Spring Cloud

Spring Boot定时任务@Scheduled的多线程使用

做梦都在改BUG

Java Spring Boot 多线程 Scheduled

一篇文章学透ApplicationContext

小小怪下士

Java spring 程序员

一文读懂火山引擎数智平台VeDI新品——管理驾驶舱Plus

字节跳动数据平台

企业管理 实时决策 企业号 4 月 PK 榜

非常全面的 SpringBoot 保姆级笔记,面面俱到,太牛了

做梦都在改BUG

Java Spring Boot

localedef 生成本地化文件遇到的问题

程序员与厨子

Linux Shell 信创 openEuler

从应用看火山引擎AB测试(DataTester)的最佳实践

字节跳动数据平台

AB testing实战 A/B测试 企业号 4 月 PK 榜 对比试验

看了这份《算法中文手册》笔记,就再也不怕字节了

Java你猿哥

Java 算法 ssm 字节 左程云

云智慧助力MLOps加速落地

云智慧AIOps社区

人工智能 机器学习 智能运维 自动化运维 算法模型

Git推出大文件储存工具Git LFS,但它真的好用吗?

龙智—DevSecOps解决方案

git 版本控制 版本控制系统

解决流水线瓶颈、提升编码效率的五个方法(下篇)

龙智—DevSecOps解决方案

ci cicd 持续集成 CI/CD

小红书高时效推荐系统背后的技术升级

小红书技术REDtech

推荐 小红书

深入理解 Go 语言中的封装机制

宇宙之一粟

Go 封装 三周年连更

小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定

龙智—DevSecOps解决方案

太强了!京东架构师独家微服务笔记,啃完直入字节

做梦都在改BUG

Java 架构 微服务 Spring Cloud

博睿数据蝉联中国APM市场份额第一,Bonree ONE春季正式版重磅发布

博睿数据

可观测性 智能运维 博睿数据 ONE有引力

Java最佳实践

码语者

Java

演示视频:Jira企业微信插件邀您一起迈入移动办公时代,高效处理Jira Issue

龙智—DevSecOps解决方案

Jira 企业微信

又一巅峰神作!14年工作经验大佬出品“JVM&G1 GC深入学习手册”

Java你猿哥

Java JVM SSM框架 jvm调优 G1垃圾回收器

如何科学判断研发团队是否在健康工作?(内附量表)

LigaAI

研发管理 技术管理 敏捷度量 企业号 4 月 PK 榜 研发效能管理

微服务 - 搭建Consul集群服务,Consul配置中心

Java你猿哥

Java 架构 微服务 ssm

无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

《挪威的森林》

后台技术汇

三周年连更

Amazon Q Developer 实践:零基础创建贪吃蛇游戏_亚马逊云科技_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章