Salta ai contenuti

Gioco di Dungeon con IA

Inizieremo creando un nuovo monorepo. All’interno della directory desiderata, esegui il seguente comando:

Terminal window
npx create-nx-workspace@21.6.3 dungeon-adventure --pm=pnpm --preset=@aws/nx-plugin --iacProvider=CDK --ci=skip --aiAgents

Questo configurerà un monorepo NX all’interno della directory dungeon-adventure che potrai quindi aprire in vscode. Dovrebbe apparire come segue:

  • Directory.nx/
  • Directory.vscode/
  • Directorynode_modules/
  • Directorypackages/ qui risiederanno i tuoi sotto-progetti
  • .gitignore
  • .npmrc
  • .prettierignore
  • .prettierrc
  • nx.json configura la CLI Nx e le impostazioni predefinite del monorepo
  • package.json tutte le dipendenze node sono definite qui
  • pnpm-lock.yaml o bun.lock, yarn.lock, package-lock.json a seconda del gestore di pacchetti
  • pnpm-workspace.yaml se si utilizza pnpm
  • README.md
  • tsconfig.base.json tutti i sotto-progetti basati su node estendono questo
  • tsconfig.json
  • aws-nx-plugin.config.mts configurazione per il Plugin Nx per AWS

Ora siamo pronti per iniziare a creare i diversi sotto-progetti utilizzando @aws/nx-plugin.

Iniziamo creando la nostra Game API. Per farlo, creiamo una tRPC API chiamata GameApi seguendo questi passaggi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#trpc-api
  5. Compila i parametri richiesti
    • name: GameApi
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Ora creiamo la nostra Story API. Per farlo, creiamo una Fast API chiamata StoryApi seguendo questi passaggi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - py#fast-api
  5. Compila i parametri richiesti
    • name: StoryApi
    • moduleName: story_api
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Ora creiamo l’interfaccia utente che ti permetterà di interagire con il gioco. Per farlo, creiamo un sito web chiamato GameUI seguendo questi passaggi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#react-website
  5. Compila i parametri richiesti
    • name: GameUI
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Ora configuriamo la nostra Game UI per richiedere l’accesso autenticato tramite Amazon Cognito seguendo questi passaggi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#react-website#auth
  5. Compila i parametri richiesti
    • cognitoDomain: game-ui
    • project: @dungeon-adventure/game-ui
    • allowSignup: true
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire o modificarsi nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Ora configuriamo la nostra Game UI per connettersi alla Story API creata precedentemente:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - api-connection
  5. Compila i parametri richiesti
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: dungeon_adventure.story_api
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire o modificarsi nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Ora configuriamo la nostra Game UI per connettersi alla Game API creata precedentemente:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - api-connection
  5. Compila i parametri richiesti
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: @dungeon-adventure/game-api
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire o modificarsi nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Ora l’ultimo sotto-progetto che dobbiamo creare è per l’infrastruttura CDK. Per crearlo, segui questi passaggi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#infra
  5. Compila i parametri richiesti
    • name: infra
  6. Clicca su Generate

Dovresti vedere alcuni nuovi file apparire o modificarsi nella tua struttura di cartelle.

Fai clic qui per esaminare questi file in dettaglio.

Apportiamo un aggiornamento al nostro packages/infra/src/stacks/application-stack.ts per istanziare alcuni dei costrutti già generati:

import {
GameApi,
GameUI,
StoryApi,
UserIdentity,
} from ':dungeon-adventure/common-constructs';
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class ApplicationStack extends Stack {
constructor(scope: Construct, id: string, props?: 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');
}
}

Nota che qui forniamo integrazioni predefinite per le nostre due API. Per impostazione predefinita, ogni operazione nella nostra API è mappata a una singola funzione lambda per gestire quell’operazione.

Ora è il momento di compilare il nostro codice per la prima volta
Terminal window
pnpm nx run-many --target build --all

Dovresti ricevere il seguente prompt:

Terminal window
NX The workspace is out of sync
[@nx/js:typescript-sync]: Some TypeScript configuration files are missing project references to the projects they depend on or contain outdated project references.
This will result in an error in CI.
? Would you like to sync the identified changes to get your workspace up to date?
Yes, sync the changes and run the tasks
No, run the tasks without syncing the changes

Questo messaggio indica che NX ha rilevato alcuni file che possono essere aggiornati automaticamente. In questo caso, si riferisce ai file tsconfig.json che non hanno riferimenti TypeScript configurati per i progetti dipendenti. Seleziona l’opzione Yes, sync the changes and run the tasks per procedere. Noterai che tutti gli errori di importazione nel tuo IDE verranno automaticamente risolti poiché il generatore di sync aggiungerà i riferimenti TypeScript mancanti automaticamente!

Tutti gli artefatti compilati sono ora disponibili nella cartella dist/ situata alla radice del monorepo. Questa è una pratica standard quando si utilizzano progetti generati dal @aws/nx-plugin poiché non inquina l’albero dei file con file generati. Nel caso in cui desideri pulire i file, puoi semplicemente eliminare la cartella dist/ senza preoccuparti di file generati sparsi nell’albero dei file.

Complimenti! Hai creato tutti i sotto-progetti necessari per iniziare a implementare il cuore del nostro gioco Dunegeon Adventure. 🎉🎉🎉