首頁 >web前端 >js教程 >Dyson Swarm:我如何使用 AWS 服務建立硬科幻遊戲

Dyson Swarm:我如何使用 AWS 服務建立硬科幻遊戲

DDD
DDD原創
2025-01-23 14:33:09125瀏覽

硬科幻點擊遊戲:Dyson Swarm

我是一位熱情的科幻愛好者,甚至經營一本科幻雜誌五年了。 這種熱愛促使我創作了一系列短遊戲,以引人入勝的方式解釋複雜的科幻概念。 我的第一個作品 Dyson Swarm 是在 AWS Game Builder Challenge 期間出現的。

戴森群是一款增量(點擊)遊戲,玩家可以拆除太陽系來建造戴森群 - 一個圍繞太陽的巨型結構。 從遊戲開發者開始,逐步累積資源,階段性晉升。

我最初估計需要 10-20 個小時的開發時間,但專案規模顯著擴大,最終花費了大約 70 個小時(大部分是在深夜!)。 這凸顯了準確的軟體開發估算的挑戰。

您可以在這裡玩遊戲:Dyson Swarm

AWS 架構

Dyson Swarm: How I built a hard science fiction game with AWS services

遊戲使用客戶端 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn