硬科幻點擊遊戲:Dyson Swarm
我是一位熱情的科幻愛好者,甚至經營一本科幻雜誌五年了。 這種熱愛促使我創作了一系列短遊戲,以引人入勝的方式解釋複雜的科幻概念。 我的第一個作品 Dyson Swarm 是在 AWS Game Builder Challenge 期間出現的。
戴森群是一款增量(點擊)遊戲,玩家可以拆除太陽系來建造戴森群 - 一個圍繞太陽的巨型結構。 從遊戲開發者開始,逐步累積資源,階段性晉升。
我最初估計需要 10-20 個小時的開發時間,但專案規模顯著擴大,最終花費了大約 70 個小時(大部分是在深夜!)。 這凸顯了準確的軟體開發估算的挑戰。
您可以在這裡玩遊戲:Dyson Swarm
AWS 架構
遊戲使用客戶端 Javascript,完全在瀏覽器中運作。 託管是使用 S3 靜態網站儲存桶實現的,並由 CloudFront CDN 增強,以實現全球高速交付。 CloudFront 處理 TLS 終止,簡化了流程。
匿名遊戲指標(玩家數量和進度)儲存在 RDS Postgres 資料庫中。 資料傳輸使用由 API Gateway 和 Lambda 建構的無伺服器 API。 雖然我使用現有的 RDS 實例,但無伺服器 RDS 同樣適合。
部署利用用於 S3 和 CloudFront 的 AWS 控制台,以及用於無伺服器指標 Lambda 的 AWS CDK 堆疊 (Python)。
CDK 堆疊
無伺服器指標 Lambda 的 CDK 堆疊非常簡潔:
<code class="language-python">from aws_cdk import ( aws_lambda as lambda_, aws_apigateway as apigw, aws_ecr as ecr, aws_certificatemanager as acm, aws_route53 as route53, Duration, Stack) from constructs import Construct import os class DysonSwarmStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) repo = ecr.Repository.from_repository_name(self, "dysonSwarmRepo", "gamesapi") dyson_swarm_lambda = lambda_.DockerImageFunction(self, "dysonSwarmLambda", code=lambda_.DockerImageCode.from_ecr( repository=repo, tag=os.environ["CDK_DOCKER_TAG"] ), memory_size=256, timeout=Duration.seconds(60), architecture=lambda_.Architecture.ARM_64 ) # do auth inside lambda api = apigw.LambdaRestApi(self, "dysonSwarm-endpoint", handler=dyson_swarm_lambda, default_cors_preflight_options=apigw.CorsOptions(allow_origins=["*"]) ) custom_domain = apigw.DomainName( self, "custom-domain", domain_name="gameapi.compellingsciencefiction.com", certificate=acm.Certificate.from_certificate_arn(self,'cert',"[cert ARN here]"), endpoint_type=apigw.EndpointType.EDGE ) apigw.BasePathMapping( self, "base-path-mapping", domain_name=custom_domain, rest_api=api ) hosted_zone = route53.HostedZone.from_hosted_zone_attributes( self, "hosted-zone", hosted_zone_id="[zone id here]", zone_name="compellingsciencefiction.com" ) route53.CnameRecord( self, "cname", zone=hosted_zone, record_name="gameapi", domain_name=custom_domain.domain_name_alias_domain_name )</code>
它利用現有的 ECR 儲存庫(包含 Lambda 容器映像)和 Route 53 託管區域(用於自訂網域)。 本質上,它會建立一個由 Lambda 函數支援的 API 閘道端點。 完整程式碼位於:dyson_swarm_stack.py
代碼
完整的遊戲原始碼位於 GitHub:Dyson Swarm GitHub Repo
主遊戲循環位於dysonswarm.html
中,使用 100 毫秒的間隔。 本機瀏覽器儲存(localStorage)處理遊戲狀態持久性。 按鈕功能(共 56 個)在 buttonFunctions.js
中管理。 遊戲動畫(最初為 SVG)已過渡到 Canvas,以提高大量元素的效能。 徹底的測試和迭代改進解決了遊戲邏輯中的各種邊緣情況。
使用 AWS Q Developer
AWS Game Builder Challenge 鼓勵使用 AWS Q Developer。 我發現它很有幫助:
優點:
/dev
功能產生並套用程式碼差異,簡化開發。 缺點:
/dev
由於多次 LLM 調用,功能可能會很慢。 /dev
有時會建立新檔案而不是新增內嵌程式碼。 仔細的提示工程至關重要。 開源遊戲
遊戲的原始碼可在 MIT 許可下取得。 請隨意使用它作為您的專案的基礎。 我歡迎聽到您的遊戲創作!
以上是Dyson Swarm:我如何使用 AWS 服務建立硬科幻遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!