Aller au contenu

Jeu de Donjon IA

Module 1 : Configuration du monorepo

Nous allons commencer par créer un nouveau monorepo. Depuis le répertoire de votre choix, exécutez la commande suivante :

Terminal window
npx create-nx-workspace@~21.0.3 dungeon-adventure --pm=pnpm --preset=@aws/nx-plugin --ci=skip

Cela configurera un monorepo NX dans le répertoire dungeon-adventure que vous pourrez ensuite ouvrir dans vscode. Il devrait ressembler à ceci :

  • Répertoire.nx/
  • Répertoire.vscode/
  • Répertoirenode_modules/
  • Répertoirepackages/ c’est ici que résideront vos sous-projets
  • .gitignore
  • .npmrc
  • .prettierignore
  • .prettierrc
  • nx.json configure les paramètres par défaut du CLI Nx et du monorepo
  • package.json toutes les dépendances Node sont définies ici
  • pnpm-lock.yaml ou bun.lock, yarn.lock, package-lock.json selon le gestionnaire de paquets
  • pnpm-workspace.yaml si vous utilisez pnpm
  • README.md
  • tsconfig.base.json étendu par tous les sous-projets basés sur Node
  • tsconfig.json

Maintenant, nous sommes prêts à commencer la création de nos différents sous-projets en utilisant le @aws/nx-plugin.

API de jeu

Commençons par créer notre API de jeu. Pour cela, créons une API tRPC appelée GameApi en suivant les étapes ci-dessous :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#trpc-api
  5. Remplissez les paramètres requis
    • name: GameApi
  6. Cliquez sur Generate

Vous devriez voir apparaître de nouveaux fichiers dans votre arborescence.

Cliquez ici pour examiner ces fichiers en détail.

API d’histoire

Créons maintenant notre API d’histoire. Pour cela, créons une API FastAPI appelée StoryApi en suivant les étapes :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - py#fast-api
  5. Remplissez les paramètres requis
    • name: StoryApi
  6. Cliquez sur Generate

Vous devriez voir apparaître de nouveaux fichiers dans votre arborescence.

Cliquez ici pour examiner ces fichiers en détail.

Interface de jeu : Site web

Créons maintenant l’interface utilisateur pour interagir avec le jeu. Pour cela, générons un site web GameUI :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#cloudscape-website
  5. Remplissez les paramètres requis
    • name: GameUI
  6. Cliquez sur Generate

Vous devriez voir apparaître de nouveaux fichiers dans votre arborescence.

Cliquez ici pour examiner ces fichiers en détail.

Interface de jeu : Authentification

Configurons l’authentification via Amazon Cognito pour notre Game UI :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#cloudscape-website#auth
  5. Remplissez les paramètres requis
    • cognitoDomain: game-ui
    • project: @dungeon-adventure/game-ui
    • allowSignup: true
  6. Cliquez sur Generate

Des fichiers ont été ajoutés/modifiés dans votre arborescence.

Cliquez ici pour examiner ces fichiers en détail.

Interface de jeu : Connexion à l’API d’histoire

Connectons notre Game UI à l’API StoryApi :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - api-connection
  5. Remplissez les paramètres requis
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: dungeon_adventure.story_api
  6. Cliquez sur Generate

Des fichiers ont été ajoutés/modifiés.

Cliquez ici pour examiner ces fichiers en détail.

Interface de jeu : Connexion à l’API de jeu

Connectons maintenant notre Game UI à l’API GameApi :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - api-connection
  5. Remplissez les paramètres requis
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: @dungeon-adventure/game-api
  6. Cliquez sur Generate

Des fichiers ont été ajoutés/modifiés.

Cliquez ici pour examiner ces fichiers en détail.

Infrastructure de l’interface de jeu

Créons le projet d’infrastructure CDK :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#infra
  5. Remplissez les paramètres requis
    • name: infra
  6. Cliquez sur Generate

Des fichiers ont été ajoutés/modifiés.

Cliquez ici pour examiner ces fichiers en détail.

Mise à jour de l’infrastructure

Modifions packages/infra/src/stacks/application-stack.ts pour instancier nos constructs :

import {
GameApi,
GameUI,
StoryApi,
UserIdentity,
} from ':dungeon-adventure/common-constructs';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class ApplicationStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const userIdentity = new UserIdentity(this, 'UserIdentity');
const gameApi = new GameApi(this, 'GameApi', {
integrations: GameApi.defaultIntegrations(this).build(),
});
const storyApi = new StoryApi(this, 'StoryApi', {
integrations: StoryApi.defaultIntegrations(this).build(),
});
// grant our authenticated role access to invoke our APIs
[storyApi, gameApi].forEach((api) =>
api.grantInvokeAccess(userIdentity.identityPool.authenticatedRole),
);
// Ensure this is instantiated last so our runtime-config.json can be automatically configured
new GameUI(this, 'GameUI');
}
}

Nous utilisons les intégrations par défaut pour nos APIs, chaque opération étant mappée à une fonction Lambda distincte.

Construction du code

Il est temps de construire notre code pour la première fois
Terminal window
pnpm nx run-many --target build --all

Vous serez invité à :

Fenêtre de terminal
NX The workspace is out of sync
[@nx/js:typescript-sync]: Certains fichiers de configuration TypeScript manquent des références de projet ou ont des références obsolètes.
Cela entraînera une erreur en CI.
? Souhaitez-vous synchroniser les changements identifiés pour mettre à jour votre espace de travail ?
Oui, synchroniser les changements et exécuter les tâches
Non, exécuter les tâches sans synchroniser

Sélectionnez Oui pour résoudre les erreurs d’import dans l’IDE.

Les artefacts de build sont dans dist/. Vous pouvez supprimer ce dossier pour nettoyer.

Félicitations ! Vous avez créé tous les sous-projets nécessaires pour développer le cœur de notre jeu Dunegeon Adventure. 🎉🎉🎉