> 웹 프론트엔드 > JS 튜토리얼 > Dyson Swarm: AWS 서비스를 사용하여 SF 게임을 구축한 방법

Dyson Swarm: AWS 서비스를 사용하여 SF 게임을 구축한 방법

DDD
풀어 주다: 2025-01-23 14:33:09
원래의
192명이 탐색했습니다.

하드 SF 클리커 게임: 다이슨 스웜

저는 SF 잡지를 운영한 지 5년이 될 정도로 열정적인 SF 매니아입니다. 이러한 사랑 덕분에 저는 복잡한 SF 개념을 매력적인 방식으로 설명하는 짧은 게임 시리즈를 만들게 되었습니다. 저의 첫 창작물인 Dyson Swarm은 AWS Game Builder Challenge에서 등장했습니다.

다이슨 스웜(Dyson Swarm)은 플레이어가 태양계를 분해하여 태양을 둘러싸는 거대 구조물인 다이슨 스웜(Dyson Swarm)을 건설하는 점진적(클리커) 게임입니다. 게임 개발자로 시작하여 점차 자원을 축적하고 단계를 거쳐 발전해 나가게 됩니다.

처음에는 개발 시간을 10~20시간으로 예상했는데 프로젝트가 크게 확장되어 최종적으로 약 70시간이 소요되었습니다(주로 늦은 밤!). 이는 정확한 소프트웨어 개발 예측의 어려움을 강조합니다.

여기에서 게임을 플레이할 수 있습니다: Dyson Swarm

AWS 아키텍처

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

이 게임은 클라이언트 측 Javascript를 사용하며 전적으로 브라우저에서 실행됩니다. 호스팅은 글로벌 고속 제공을 위해 CloudFront CDN으로 강화된 S3 정적 사이트 버킷을 사용하여 달성됩니다. CloudFront는 TLS 종료를 처리하여 프로세스를 단순화합니다.

익명의 게임플레이 지표(플레이어 수 및 진행 상황)는 RDS Postgres 데이터베이스에 저장됩니다. 데이터 전송은 API Gateway 및 Lambda로 구축된 서버리스 API를 사용합니다. 기존 RDS 인스턴스를 사용했다면 서버리스 RDS도 똑같이 적합할 것 같습니다.

배포에서는 S3 및 CloudFront용 AWS 콘솔과 서버리스 지표 Lambda용 AWS CDK 스택(Python)을 활용했습니다.

CDK 스택

서버리스 지표 Lambda를 위한 CDK 스택은 간결합니다.

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
        )
로그인 후 복사

기존 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 서비스를 사용하여 SF 게임을 구축한 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿