Passa al contenuto principale

Role Playing Game

Anteprima del progetto Role Playing Game – pagina principale Anteprima del progetto Role Playing Game – entri nel negozio Anteprima del progetto Role Playing Game – entri nella caverna. Vedi alcuni mostri Anteprima del progetto Role Playing Game – sconfiggi il drago e vinci la partita Anteprima del progetto Role Playing Game – partita persa Anteprima del progetto Role Playing Game – trovi un gioco segreto Anteprima del progetto Role Playing Game – vinci la partita

Il Progetto

Dragon Repeller RPG sviluppato integrando JavaScript con HTML e CSS, con sistema di combattimento, gestione dell’inventario, più location e meccaniche di gioco complete. Il primo progetto che unisce logica, interfaccia e interazione con l’utente.

Codice Sorgente

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="./styles.css">
<title>RPG - Dragon Repeller</title>
</head>
<body>
<div id="game">
<div id="stats">
<span class="stat">XP: <strong><span id="xpText">0</span></strong></span>
<span class="stat">Health: <strong><span id="healthText">100</span></strong></span>
<span class="stat">Gold: <strong><span id="goldText">50</span></strong></span>
</div>
<div id="controls">
<button id="button1">Go to store</button>
<button id="button2">Go to cave</button>
<button id="button3">Fight dragon</button>
</div>
<div id="monsterStats">
<span class="stat">Monster Name: <strong><span id="monsterName"></span></strong></span>
<span class="stat">Health: <strong><span id="monsterHealth"></span></strong></span>
</div>
<div id="text">
Welcome to Dragon Repeller. You must defeat the dragon that is preventing people from leaving the town. You are in the town square. Where do you want to go? Use the buttons above.
</div>
</div>
<script src="./script.js"></script>
</body>
</html>

L’esperienza più impegnativa

È stato il progetto più lungo e stancante fatto finora. È stato difficile entrare nella logica di JavaScript e ancora non mi sento del tutto a mio agio.

A metà progetto mi sono preso un giorno intero di pausa, in cui ho letto solo qualche pagina di Refactoring UI: ne avevo bisogno per ricaricarmi.

I momenti di gioia

Appena iniziato il progetto sono partito con grande energia scrivendo HTML e CSS e, con la stessa energia, ho assegnato gli elementi HTML al JavaScript, come i button.

Ammetto che anche funzioni e cicli if/else mi hanno divertito (anche se meno rispetto alle aree citate prima), forse perché ripetendoli continuamente durante il progetto ho iniziato a sentirmi sicuro — ed è proprio questa sensazione che mi dà gioia mentre lavoro.

Il tallone d’Achille

I for loop sono il mio tallone d’Achille. Vanno meglio rispetto al progetto precedente, ma non riesco ancora a raggiungere il livello di astrazione che richiedono.

Una scoperta incoraggiante

Ho fatto qualche ricerca e ho scoperto che per una mente da designer è normale trovare i for loop più difficili, soprattutto rispetto agli if/else. Sono sicuro che lungo il corso, con tutti i progetti che ci saranno, imparerò a padroneggiarli completamente.

Cosa Ho Imparato

DOM Manipulation:

  • document.querySelector() per selezionare elementi HTML
  • eventi onclick per gestire le interazioni dell’utente
  • innerText e innerHTML per aggiornare dinamicamente i contenuti
  • style.display per mostrare/nascondere elementi

Game Logic:

  • State management con variabili globali
  • Array di oggetti per armi, mostri e location
  • Aggiornamenti dinamici della UI in base allo stato del gioco
  • Flusso di gioco condizionale con più location

JavaScript Avanzato:

  • Math.random() per elementi casuali
  • Array methods (push, pop, shift, includes)
  • Condizionali complessi per le meccaniche di gioco
  • Function composition per sistemi interconnessi

Integrazione HTML/CSS/JS:

  • Comportamento responsive dei button con JavaScript
  • Aggiornamenti dinamici dei contenuti mantenendo lo stile CSS
  • Event handling per le interazioni utente
  • Visualizzazione delle statistiche in tempo reale sincronizzata con lo stato del gioco

Pattern di sviluppo osservati

Architettura del gioco:

  • Sistema di location – ogni location ha testi dei button e funzioni dedicate
  • Pattern di update – una funzione centrale che aggiorna l’intera UI
  • Persistenza dello stato – variabili globali per mantenere i progressi

Sistema di combattimento:

  • Logica a turni con opzioni di attacco/difesa/fuga
  • Calcolo del danno tramite formule matematiche
  • Elementi casuali per aumentare la varietà del gameplay

Riflessione

Sono contento della sicurezza che ho sviluppato con funzioni e cicli if/else, mi dà fiducia sul fatto che anche i loop diventeranno naturali con la pratica.


Prossimo Progetto: Imparare il Basic Debugging costruendo un Random Background Color Changer