首页 > 其他分享 >Amazon Q Developer 实践:零基础创建贪吃蛇游戏

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

时间:2024-10-22 15:09:26浏览次数:1  
标签:游戏 pygame Amazon 贪吃蛇 snake block 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 文档,以了解详细信息:https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/software-dev.html?trk=cndc-detail

与 Amazon Q Developer 互动

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

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

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

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

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

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

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

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

图中底部的 "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 展示出来的能力,为其在更复杂的应用程序开发方向开辟了令人兴奋的无限可能。

特别说明:本文封面图像是由 Amazon Bedrock 上的 Stable Diffusion SD3 Large 1.0 模型生成的。我使用的提示词如下,供大家参考:

“An illustration of a greedy snake slithering through a modern abstract circuit board design, with binary code and computer components in the background, representing the fusion of classic gaming and cutting-edge AI technology. The snake should be large, bold, and vibrant, with a sleek and dynamic appearance. The background should have a futuristic and digital aesthetic, with glowing neon colors and intricate circuitry patterns. The overall style should be a blend of retro gaming elements and contemporary AI/tech motifs.”

视频链接:https://dev.amazoncloud.cn/video/videoDetail?id=670e2aeafd2bed6cdfbfbe55

文章来源:https://dev.amazoncloud.cn/column/article/67174d4699168b3814665aea?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=bokey

 

标签:游戏,pygame,Amazon,贪吃蛇,snake,block,Developer
From: https://www.cnblogs.com/AmazonwebService/p/18492909

相关文章

  • Python小游戏8——贪吃蛇
    贪吃蛇游戏说明蛇可以通过方向键来控制移动,目标是吃掉红色的小方块(食物),每吃掉一个食物,蛇的长度就会增加。如果蛇撞到了墙壁或自己,游戏就会结束。 通过以下命令安装pygame库:bashpipinstallpygame以下是贪吃蛇游戏的代码:pythonimportpygameimportrandom#......
  • Amazon linux安装NGINX + PHP
    安装Nginxsudoyuminstallnginx注册启动sudosystemctlenablenginx启动Nginxsudosystemctlstartnginx.service查找php版本sudoyumsearchphp安装php8.2sudoyuminstallphp8.2验证phpphp-vphp-fpm-v启动php-fpmsudosystemctlenablephp-fpm.servicesudosystemctl......
  • 界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......
  • 贪吃蛇游戏(代码篇)
    我们并不是为了满足别人的期待而活着。前言  这是我自己做的第五个小项目---贪吃蛇游戏(代码篇)。后期我会继续制作其他小项目并开源至博客上。   上一小项目是贪吃蛇游戏(必备知识篇),没看过的同学可以去看看:有关贪吃蛇必备知识的小项目https://blog.csdn.net/hsy1603......
  • 【Azure Developer】com.azure:azure-identity jar包版本从1.2.0 升级到1.12.2 版本之
    问题描述com.azure:azure-identityjar包版本从1.2.0升级到1.12.2版本之后报错,错误信息如下:Anattemptwasmadetocallamethodthatdoesnotexist.Theattemptwasmadefromthefollowinglocation:  com.azure.identity.implementation.IdentityClientBase.getConf......
  • 【Azure Developer】com.azure:azure-identity jar包版本从1.2.0 升级到1.12.2 版本之
    问题描述com.azure:azure-identityjar包版本从1.2.0升级到1.12.2版本之后报错,错误信息如下:Anattemptwasmadetocallamethodthatdoesnotexist.Theattemptwasmadefromthefollowinglocation:  com.azure.identity.implementation.IdentityClientBase.get......
  • WPFDeveloper正式版发布
    WPFDeveloperWPFDeveloper一个基于WPF自定义高级控件的WPF开发人员UI库,它提供了众多的自定义控件。该项目的创建者和主要维护者是现役微软MVP闫驚鏵:https://github.com/yanjinhuagood该项目还有众多的维护者,详情可以访问github上的README,项目地址:https://github.com/WPFDeve......
  • Win11安装及卸载 PL/SQL Developer
    安装1.plsqldev12707x64.msi单击plsqldev12707x64.msi按Ctrl键+Shift键+Enter键以管理员身份运行plsqldev12707x64.msi进行安装,否则容易安装失败。基本都是默认,修改安装目录,没有复杂的地方。 2.PL/SQL登录 运行桌面PLSQLDeveloper14(64bit)。因为本地......
  • PLSQL Developer如何连接Oracle数据库(汉化)
    简介PL/SQLDeveloper是一种用于Oracle数据库开发的集成开发环境(IDE)。它提供了一个可视化的界面,使开发人员能够方便地编写、调试和执行PL/SQL代码。PL/SQLDeveloper还具有其他功能,如数据库对象浏览器、SQL编辑器、数据导入/导出等。它是一个功能强大的工具,可以提高Oracle数据......
  • 大学生课程设计报告--基于JavaGUI的贪吃蛇
    前言​贪吃蛇游戏是一个基础且经典的视频游戏,它适合作为学习编程的人进行一些更深入的学习,可以更加了解关于循环,函数的使用,以及面向对象是如何应用到实际项目中的;​不仅如此,贪吃蛇游戏的规则在思考后可以拆分,有利于学生将更多精力去设计游戏的核心逻辑,而不是更多边缘设......