Heim >Web-Frontend >js-Tutorial >Dyson Swarm: Wie ich mit AWS-Diensten ein anspruchsvolles Science-Fiction-Spiel erstellt habe
Ein hartes Sci-Fi-Clicker-Spiel: Dyson Swarm
Ich bin ein leidenschaftlicher Science-Fiction-Enthusiast und habe fünf Jahre lang sogar ein Science-Fiction-Magazin geleitet. Diese Liebe veranlasste mich, eine Reihe kurzer Spiele zu entwickeln, die komplexe Science-Fiction-Konzepte auf ansprechende Weise erklären. Meine erste Kreation, Dyson Swarm, entstand während der AWS Game Builder Challenge.
Dyson Swarm ist ein inkrementelles (Clicker-)Spiel, bei dem Spieler das Sonnensystem zerlegen, um einen Dyson-Schwarm zu errichten – eine Megastruktur, die die Sonne umgibt. Wenn Sie als Spieleentwickler beginnen, sammeln Sie nach und nach Ressourcen an und durchlaufen Stufen.
Anfangs hatte ich mit einer Entwicklungszeit von 10 bis 20 Stunden gerechnet, aber das Projekt wurde erheblich ausgeweitet und nahm letztendlich etwa 70 Stunden in Anspruch (meistens spät in der Nacht!). Dies unterstreicht die Herausforderung genauer Softwareentwicklungsschätzungen.
Sie können das Spiel hier spielen: Dyson Swarm
AWS-Architektur
Das Spiel verwendet clientseitiges Javascript und läuft vollständig im Browser. Das Hosting erfolgt über einen statischen S3-Site-Bucket, der durch CloudFront CDN für eine globale Hochgeschwindigkeitsbereitstellung erweitert wird. CloudFront übernimmt die TLS-Beendigung und vereinfacht so den Prozess.
Anonyme Gameplay-Metriken (Spieleranzahl und Fortschritt) werden in einer RDS-Postgres-Datenbank gespeichert. Die Datenübertragung erfolgt über eine serverlose API, die mit API Gateway und Lambda erstellt wurde. Während ich eine vorhandene RDS-Instanz verwendet habe, wäre serverloses RDS gleichermaßen geeignet.
Bei der Bereitstellung wurden die AWS-Konsole für S3 und CloudFront sowie ein AWS CDK-Stack (Python) für die serverlosen Metriken Lambda genutzt.
Der CDK-Stack
Der CDK-Stack für die serverlosen Metriken Lambda ist prägnant:
<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>
Es nutzt ein vorhandenes ECR-Repository (das das Lambda-Container-Image enthält) und eine gehostete Route 53-Zone (für die benutzerdefinierte Domäne). Im Wesentlichen wird ein API-Gateway-Endpunkt erstellt, der von einer Lambda-Funktion unterstützt wird. Der vollständige Code ist verfügbar unter: dyson_swarm_stack.py
Der Kodex
Der vollständige Quellcode des Spiels ist auf GitHub: Dyson Swarm GitHub Repo
Die Hauptspielschleife, die in dysonswarm.html
zu finden ist, verwendet ein 100-Millisekunden-Intervall. Der lokale Browserspeicher (localStorage) kümmert sich um die Persistenz des Spielstatus. Tastenfunktionen (insgesamt 56) werden in buttonFunctions.js
verwaltet. Spielanimationen, ursprünglich SVG, wurden für eine bessere Leistung mit einer großen Anzahl von Elementen auf Canvas umgestellt. Durch gründliche Tests und iterative Verbesserungen wurden verschiedene Grenzfälle in der Spiellogik behoben.
Mit AWS Q Developer
Die AWS Game Builder Challenge fördert die Verwendung von AWS Q Developer. Ich fand es hilfreich:
Vorteile:
/dev
Funktion generiert und wendet Codeunterschiede an und optimiert so die Entwicklung.Nachteile:
/dev
Funktion kann aufgrund mehrerer LLM-Aufrufe langsam sein./dev
erstellt manchmal neue Dateien anstelle von Inline-Code-Ergänzungen. Eine sorgfältige zeitnahe Planung ist von entscheidender Bedeutung.Open-Source-Spiel
Der Quellcode des Spiels ist unter der MIT-Lizenz verfügbar. Nutzen Sie es gerne als Grundlage für Ihre Projekte. Ich freue mich, von Ihren Spielkreationen zu hören!
Das obige ist der detaillierte Inhalt vonDyson Swarm: Wie ich mit AWS-Diensten ein anspruchsvolles Science-Fiction-Spiel erstellt habe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!