Textics

Ciao ragazzi!

Voglio presentare un piccolissimo videogame, una piccola applicazione di nome Textics. Si tratta di un videogame testuale, che si gioca direttamente da console, senza alcuna grafica.

L’obiettivo del gioco è quello di raggiungere l’uscita di ogni stanza senza farsi catturare dai nemici. Alcuni di questi saranno immobili, e basterà non passargli davanti: altri invece si muoveranno secondo pattern prestabiliti, e sarà dunque utile osservare i loro movimenti prima di agire!

L’area di gioco è divisa in righe e colonne, come una scacchiera: ogni cella è individuata da una coppia di coordinate, del tipo (A;g).

Di seguito uno screen del gioco:

Textics screenshot

Legenda:

  • P: la posizione del giocatore
  • E: la posizione del nemico
  • +: la linea visiva del nemico: se ci si passa sopra, si viene catturati!
  • X: l’uscita da raggiungere
  • | oppure _: questi caratteri rappresentano dei muri, su cui il giocatore non può andare e oltre cui i nemici non possono vedere (ovviamente!)

Comandi

Per controllare il giocatore, è possibile utilizzare i seguenti comandi:

  • goto Xy: vai alla casella di coordinate (X; y)Attenzione: il giocatore può muoversi solo in linea retta!
  • wait: aspetta un turno di gioco, così da poter osservare il movimento dei nemici.;
  • exit: supera l’uscita e passa al prossimo livello. Valido solo se ci si trova in una casella adiacente all’uscita;
  • menu: torna al menu principale;
  • quit: chiude il gioco.

Struttura dei livelli

I livelli sono salvati all’interno del file levels.dat. Si tratta di un file XML, che viene letto dall’eseguibile ed utilizzato per creare i livelli. L’utente può liberalmente modificarlo per creare nuovi livelli, semplicemente aggiungendo nuovi dati alla fine del file.

Ecco come. Per prima cosa, bisogna creare un nodo <level id=”xx”>…</level> alla fine del file (ma sempre all’interno del root <levels>), e aggiornare il contatore all’inizio del file <levels count=”xx”>.

Di seguito la lista di tutti i possibili elementi che possono essere aggiunti al livello. Nota: le coordinate xy di ogni nodo devono essere valori numerici compresi tra 0 e 19.

I nodi che vanno obbligatoriamente aggiunti sono:

  • <player x=”xx” y=”yy” />, che individua la posizione del giocatore;
  • <exit x=”xx” y=”yy” />, che individua la posizione dell’uscita.

Gli altri nodi sono:

  • <hwall x=”xx” y=”yy” />, che individua un muro orizzontale, rappresentato sulla mappa dal carattere ‘_’;
  • <vwall x=”xx” y=”yy” />, che individua un muro verticale, rappresentato sulla mappa dal carattere ‘|’;
  • <enemy x=”xx” y=”yy” view=”u/r/l/d” />, che individua un nemico. Il parametro view, i cui possibili valori sono u, r, l, d rappresenta da che lato il nemico è rivolto: nell’ordine, up, right, left, down.
    • Si è già detto che i nemici possono muoversi secondo pattern prestabiliti. Per far ciò, è necessario aggiungere al nodo enemy un nodo <movement>, al cui interno vanno aggiunti tanti nodi <point> quanti sono i punti che il nemico deve raggiungere (escluso il punto di partenza). La sintassi è la seguente: <point x=”xx” y=”yy” view=”u/r/l/d” />.
  • <dialogue>, che può essere aggiunto all’inizio del livello: in esso, racchiuso all’interno del tag <![CDATA[ … ]]>, è possibile inserire il testo che si vuole venga visualizzato alla destra della mappa. Esso deve essere composto al massimo da 20 righe, ognuna delle quali può contenere un massimo di 30 caratteri.

Conclusioni

Allo stato attuale, il gioco conta soltanto 10 livelli, e richiederà non più di una manciata di minuti per essere completato. I progressi vengono salvati dopo ogni livello superato, ed è possibile riprendere il gioco in qualsiasi momento.

In futuro, potrei aggiungere un sistema di inventario, con la possibilità di raccogliere chiavi per aprire l’uscita e altri gadget che possono aiutare il giocatore.

Il codice può essere visualizzato nell’apposito repository, e l’archivio con l’eseguibile è scaricabile da qui.

Stay tuned!