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!

Annunci

Expeditus: prima demo

Ciao ragazzi!

Eccomi dopo un po’ di tempo con un nuovo aggiornamento riguardante Expeditus.

Il sistema per i dialoghi è ormai completato: legge testi da file binari, è possibile utilizzare l’animazione che simula il battere a macchina (mostra un carattere alla volta), può mostrare un singolo o una sequenza di dialoghi, e chiede all’utente di rispondere YES o NO ad eventuali domande.

Dopo la fase di introduzione, vi è una piccolissima demo che mostra la feature NPC patterns: il rettangolino rosso inizia a muoversi in tondo seguendo sempre lo stesso pattern, finché non viene riacciuffato.

In fondo al post vi è uno screenshot.

Qui è possibile scaricare l’eseguibile con le librerie necessarie; per consultare il codice sorgente vi rimando al repository.

Stay tuned!

Expeditus: sistema dialoghi

Seppur con lentezza e qualche difficoltà, lo sviluppo del progetto Expeditus procede. Il sistema di dialogo è ormai pronto, anche se manca la possibilità di fornire risposte (i semplici YES/NO): questa feature verrà presto implementata.

Alla fine del post, una gif mostra la finestra di dialogo in azione. Ho voluto rendere un piccolo omaggio al mondo dei Pokémon, ricavando le prime battute del Prof. Oak da Pokémon Versione Oro.

Vi invito a seguire il repository ufficiale per informazioni più frequenti e dettagliate.

Update: ora è presente un piccolo cursore animato in basso a destra.

Stay tuned!

Nuovo progetto: Expeditus

Salve a tutti!

Oggi voglio parlarvi del progetto a cui sto lavorando in questi giorni: Expeditus. Il titolo è latino, e sta per agile, armato, pronto.

Si tratta di un piccolo videogioco d’avventura in 2D, con vista dall’alto in stile Pokémon. Alla base del gioco vi sono delle carte, che il giocatore potrà collezionare, scambiare, ed utilizzare per compiere qualsiasi azione.

Esistono quattro tipi di carte:

object_cardCarte oggetto: rappresentano un oggetto che può essere utilizzato dal giocatore, come una pozione o un indumento;

utility_cardCarte utilità: rappresentano strumenti utilizzabili dal giocatore, come la capacità di spostarsi velocemente da un punto ad un altro della mappa;

battle_cardCarte combattimento: rappresentano i tipi di attacchi (o difesa) utilizzabili dal giocatore in combattimento;

special_cardCarte speciali: sono carte molto rare e potenti, che danno grande vantaggio al giocatore che le utilizza.

Ulteriori dettagli sulla struttura del gioco verranno condivise appena disponibili.

Ci tengo a sottolineare che in questo progetto non ho come obiettivo quello di produrre un videogioco nel tentativo di competere con gli altri, di ottenere numerosi download, né tantomeno vendite. L’obiettivo principale di Expeditus è fornirmi una base di sperimentazione per le mie capacità di programmazione, che spero miglioreranno con l’aiuto di questo gioco.

Proprio per questo motivo, cercherò di non utilizzare librerie esterne (al limite del possibile), ma di produrre io stesso tutto il codice. Il linguaggio di programmazione utilizzato è C++, con Lua per la parte di scripting relativa all’utilizzo delle carte.

A breve sarà disponibile un repository pubblico su bitbucket.org, tramite cui sarà possibile visionare e scaricare il codice sorgente.

Update: Il repository è ora online!

Stay tuned!

 

Design di Andy, il braccio robotico

Salve a tutti!

Oggi voglio proporvi il design 3D che ho realizzato riguardo un nuovo progetto: “Andy”. Si tratta di un braccio robotico, ed il nome si riallaccia ai termini inglese “hand” (“mano”) e “handy” (“utile”, “maneggevole”).

Una descrizione del progetto (realizzato con il software Autodesk 123D Design) insieme ad un tutorial passo passo su come riprodurlo, è disponibile qui.

Ho sfruttatto l’occasione per partecipare all’Autodesk 123D Design Challenge su Instructables.com. Quindi, se ti è piaciuto il mio lavoro, votami!

Stay tuned!

KnockBox – (4) Conclusione

Finalmente, ecco qui l’ultimo post del progetto KnockBox. Oggi costruiremo la scatola che racchiuderà il sistema e metteremo insieme tutti i pezzi. Assicuratevi di aver seguito tutti i passaggi necessari: li trovate nel menu in alto sotto la voce “Projects > KnockBox”.

Iniziamo subito: per prima cosa procuriamoci una scatola abbastanza grande da contenere Arduino e tutti i componenti – si può ridurre lo spazio utilizzato programmando un chip (ad esempio l’ATMega328P) e saldare il tutto su una basetta millefori, per creare uno standalone (per maggiori informazioni vedi qui).

Io ho utilizzato una scatola acquistata da Leroy Merlin per il prezzo di €2.50.

Attenzione: il coperchio della scatola non deve essere completamente dritto, ma ha bisogno di una componente verticale, come quello della mia scatola.

Con un trapano, fate sette buchi sulla facciata della scatola, come nell’immagine: i primi tre conterranno i LED, il quarto l’interruttore e gli ultimi tre i pulsanti. Cercate di essere più precisi di me – era la prima volta che ho preso in mano un trapano.

100_2795

Adesso il sistema di chiusura: forate il coperchio della scatola nel punto indicato dall’immagine precedente: è lì che la linguetta del servomotore si inserirà bloccando l’apertura. Trapanate leggermente sul lato interno nei pressi del foro appena effettuato creando una sorta di “scia” dando alla linguetta del servomotore lo spazio necessario per muoversi.

Di seguito, alcune immagini scattate durante la realizzazione del progetto:

100_2781 100_2780100_2744

100_2745100_2742100_2750100_2743

Inserite il vostro Arduino (o il vostro chip) con tutti i componenti all’interno della scatola, fissate il sensore piezo al centro del coperchio ed il servo motore in corrispondenza del foro.

Potete utilizzare un pezzo di cartoncino colorato o di altro materiale per nascondere alla vista il circuito.

Complimenti, la vostra personale KnockBox è pronta a custodire i vostri segreti!

Se ti è piaciuto il progetto, per favore votami per l’Arduino Contest su Instructables.com!

Stay tuned!