Close

Questo sito utilizza cookie. Può leggere come li usiamo nella nostra Privacy Policy.

papo Iacopo Vettori
Skip Navigation Links
Skip Navigation Links. Skip Navigation LinksHome page : Programmazione : Programmini

Programmini inutili

Come omaggio a chi si è peritato di curiosare fin qui, allego alcuni dei miei programmini inutili, scritti per divertimento o per provare qualche nuova tecnica di programmazione.
Quelli scritti per VB6 richiedono msvbvm60.dll, gli altri il Framework NET 1.1 o 2.0. Alien richiede DirectX 9c con ManagedDX. Dovrebbe essere tutto reperibile sul sito MSDN della Microsoft.

ALIEN (spara a raffica contro le astronavi aliene che tentano di atterrare)

ALIENZACK (uguale ma con l'aggiunta di un'astronave gigante nell'ultimo schema e la possibilità di configurare le opzioni)

     

Note tecniche:
La prima versione di questo gioco era scritta in Basic per DOS e qualche routine in assembly a 16 bit per 80286 con scheda grafica EGA 640x350. Ho voluto mantenere la stessa grafica anche se il gioco è completamente riscritto in VB.NET 2003 e usa una finestra di 640x480 pixel. Per gli effetti sonori usa DirectSound 9.03. La musica iniziale è una mia creazione presente già nella prima versione.
AlienZack è stato fatto su richiesta del nipotino Zack che, come già altri nipoti prima di lui, mi ha suggerito di aggiungere un'astronave gigante come schema finale. Poiché voleva anche avere più vite e meno nemici, ho aggiunto la possibilità di premere F4 durante la sigla iniziale per accedere a una finestra per la configurazione che permette anche di memorizzare diverse configurazioni e scegliere ogni volta quella da usare. Un'ultima modifica che però appare solo se si imposta l'opzione in configurazione, è l'aiutante spaziale "Astrohelp" che arriva dopo la metà di ogni schema, o quando si richiama premendo F1. Al suo passaggio, elimina tutte le astronavi aliene più minacciose. Nell'ultimo schema però appare solo se richiamato con F1, e non può far niente contro l'astronave gigante. AlienZack è stato compilato con VB.NET 2008 e richiede il NET Framework 3.5.

Istruzioni:
Riporto la presentazione originale che appare nella prima schermata:
Un orribile pericolo minaccia la Terra. Il tuo compito è di abbattere le navi spaziali degli invasori Alieni prima che arrivino a terra. Devi evitare le bombe che le navi lanciano e i proiettili degli incrociatori. Gli incursori non sparano ma tentano di atterrare rapidamente con una traiettoria verticale. Puoi essere colpito tre volte, ma né le navi né gli incursori devono atterrare, o sarai comunque perduto. Il gioco termina dopo 10 schemi da 25 navi ciascuno. Usa i tasti SINISTRA e DESTRA per muoverti, SU per sparare e GIÙ per lo scudo di energia, ESC per uscire e SPAZIO per fermare il gioco. Che la Forza sia con te!

CHRONO (cronometro da usare quando state al computer mentre cucinate qualcosa, con segnale acustico)

 

Istruzioni:
Premere il tasto "Start" per avviare il cronometro, che conta ore (fino a 24), minuti e secondi. Le lancette indicano solo minuti e secondi. Dopo essere stato premuto, il tasto "Start" diventa "Stop", e permette di sospendere il cronometraggio; premendo di nuovo, la sua etichetta diventa "Continue", per permettere di riprenderlo da dove si è interrotto. L'altro tasto è "Alarm...", e permette di accedere ad una seconda finestra per impostare un segnale acustico che si attiva dopo il numero di minuti specificato, da 1 a 60. Quando l'allarme è impostato, viene visualizzata una terza lancetta rossa che non si muove, ed indica i minuti della scadenza. Per chiudere l'applicazione, premere la "X" rossa in alto a destra. Se si riduce a icona, resta visibile l'ora indicata come testo che continua ad aggiornarsi.

Note tecniche:
Per la generazione del segnale acustico, viene ricercato il file "Tada.wav" nella sottocartella "\media\" di Windows.
Nel caso in cui il file non sia presente, il tempo scaduto viene segnalato visualizzando un dialog box di avviso.

Punti di interesse:
Ottimo per controllare il tempo della pastasciutta che mi cucino mentre sto al PC. Ero stufo di mangiarla sempre scotta!

GP (le macchinine con la pista vista dall’alto)

 

Note tecniche:
La prima versione è precedente a quella di Alien e risale anch'essa ai mitici tempi del DOS con Basic e assembly  a 16 bit per 80286 con scheda grafica EGA 640x350. Il gioco è stato fatto in collaborazione con mio fratello Francesco che ha curato la regia generale, le regole, i disegni dei piloti (che appaiono al termine del GP), dei circuiti e soprattutto la logica con cui si muovono le macchinine automatiche. Io mi sono occupato del controllo della tastiera (potevamo giocare in due usando la stessa tastiera), le routine per l'aggiornamento del video e per la rilevazione delle collisioni, l'incapsulamento delle risorse nello stesso file exe, e la produzione dei suoni con il beep. Poiché i circuiti sono 12 e nel gioco originale i piloti erano una decina, invece di imporre dei percorsi prestabiliti abbiamo studiato un metodo perché ogni pilota avesse delle sue caratteristiche di "lungimiranza" e "audacia" e fosse in grado di valutare quale movimento risultasse più opportuno. Purtroppo, nella mia trascrizione in VB.NET 2003 qualche dettaglio è andato perduto e le macchinine si muovono in modo più stupido dell'originale in DOS. A mia parziale discolpa, posso solo addurre il fatto che il mio principale interesse era quello di studiare le tecniche disponibili in VB.NET e non riprodurre il gioco in totale fedeltà. Il gioco originale dava anche la possibilità di specificare quali circuiti usare e quanti giri per circuito, scegliere l'identità dei "piloti automatici" e anche di modificare le loro caratteristiche di audacia e lungimiranza, e infine teneva anche il punteggio tra i vari circuiti per stilare una classifica generale con tanto di giri più veloci per ogni circuito. L'ultima versione, permetteva addirittura di visualizzare il circuito nella vista soggettiva del pilota! Non credo che né io né mio fratello avremo mai più il tempo necessario per curare simili dettagli nella versione per Windows, per cui accontentatevi di questa...

Istruzioni:
Il programma richiede il numero di giocatori (1 o 2). Il primo giocatore guida sempre la macchinina rossa e si muove con le frecce, il secondo guida la macchinina blu e si muove con i tasti "A", "S", "D" e "W". Il programma poi richiede il numero di piloti automatici (da 0 a 5, se si gioca da soli, e da 0 a 4 se si gioca in coppia). Si parte quando il semaforo diventa verde. La freccia SU è l'acceleratore, la freccia in GIÙ è il freno, le frecce SINISTRA e DESTRA servono per ruotare la macchinina a sinistra o a destra. Attenzione che quando la macchina va verso il basso, diventa difficile premere i tasti giusti e bisogna fare un po' di pratica, ma ne vale la pena! Premendo SPAZIO si mette il gioco in pausa. Tutti i gran premi terminano dopo sette giri. I piloti automatici vanno un po' troppo a spasso e a volte tornano anche indietro, ma sul traguardo "rimbalzano" e si rimettono nella direzione giusta. A volte si possono duramente incastrare da qualche parte, magari anche in coppia. Quando avete finito, se il gioco si dilunga troppo per attendere che arrivino tutti, potete premere il tasto ESC per passare al circuito successivo.

VITA (conoscete il mitico giochino LIFE? Questa è la mia implementazione)

 

Note tecniche:
La mia prima versione di questo gioco è stata scritta in assembly per 6502, nei mitici tempi in cui ancora non avevo un PC, e si tracciavano i disegni con un joystick. La cosa importante infatti è la velocità di aggiornamento del disegno, che deve essere ricalcolato ogni volta punto per punto. Questa versione è scritta in Visual Basic 6 ma usa le API Win32 di Windows e in particolare i DIBSection per la lettura e la scrittura "più veloce possibile" dello schema in memoria di 240x180 punti che poi è riprodotto nella finestra. Le immagini possono essere salvate e caricate sia in formato BMP che in formato ZOO, inventato per l'occasione e molto più conveniente dato che usa un solo bit per punto.

Istruzioni:
Tracciate uno scarabocchio qualsiasi con il mouse. Il tasto sinistro traccia le caselle rosse, il tasto destro le cancella. Fate qualche figura abbastanza densa di punti, dato che i punti isolati svaniscono subito. Vedete ad esempio la figura riportata sopra. Alcune configurazioni interessanti sono comprese nello zip scaricato, nei file con estensione ".ZOO", e possono essere caricate con il dialog box che appare premendo il tasto "Load". Con il tasto "Save" si possono invece salvare le proprie creazioni prima di dare il via premendo il tasto "Go!", che poi diventa "Stop", per fermare il gioco che può essere poi ripreso e fermato quando si vuole. Il tasto "Clear" cancella tutto lo schermo.
Il gioco visualizza l'evoluzione dello schema di punti immesso, secondo semplici regole di vicinanza dei punti. Ogni casella dello schema è quadrata e circondata da altre otto caselle (considerando anche quelle sulle diagonali).
1) Se una casella è accesa o spenta, ed ha tre vicini accesi, nel ciclo successivo essa sarà accesa.
2) Se una casella ha esattamente due vicini accesi, nel ciclo successivo manterrà il proprio stato (acceso o spento che sia).
3) In tutti gli altri casi, nel ciclo successivo la casella sarà spenta.

Punti di interesse:
È sorprendente la ricchezza di comportamento che manifestano le figure che si "evolvono" nello schermo in base a queste poche regole. Non è un caso che il gioco sia stato chiamato "life", cioè "vita". Quando lo schermo è abbastanza grande, e il gioco gira abbastanza velocemente, come in questa versione, si ha proprio l'impressione di assistere al brulichio di microscopici esseri unicellulari. Gli schemi che si evolvono in base a regole di questo tipo sono stati chiamati tecnicamente "automi cellulari", ed è stato dimostrato che la loro complessità è tale che in linea teorica sarebbe possibile assemblare insieme una struttura che si comporti come un computer essa stessa!

CROSSWORD (ideale per risolvere "Ricerca di parole crociate" della Settimana Enigmistica)

 

Punti di interesse:
Forse fate fatica a crederci, ma c'è gente che compra la Settimana Enigmistica e si appassiona a giochi come "Cornici concentriche" o "Ricerca di parole crociate" o addirittura "Incroci obbligati". Se non sapete neanche che cosa sono, passate pure al commento del prossimo giochino. Se avete continuato a leggere, beh ecco il mio programmino per "fare le prove" senza imbrattare troppo lo schema stampato, o per studiarlo meglio dopo che avete già imbrattato inutilmente l'originale. Sarebbe caruccio fare una variante per le "Cornici concentriche", ma per ora accontentatevi di questo.

Istruzioni:
Scrivere normalmente con la tastiera. Premere la barra spaziatrice per alternare la scrittura orizzontale con quella verticale. Posizionare il riquadro che evidenzia la casella che sarà scritta, usando il mouse o le frecce. Le caselle nere si ottengono premendo il punto. Le caselle scritte si cancellano in avanti con il tasto "Canc" oppure indietro con il tasto Backspace. Le voci del menu sono:
- "Nuovo", che permette di specificare anche le dimensioni desiderate (separate con la "x", ad esempio: "9x13").
- "Apri", che permette di ricaricare uno schema salvato in precedenza (con estensione ".crw").
- "Salva" e "Salva con nome", che permettono di salvare lo schema corrente.
I file con estensione ".crw" sono semplici file di testo che potete aprire anche con il blocco note, in cui la prima riga contiene le dimensione dello schema nel formato "LARGHEZZAxALTEZZA", e le righe successive contengono lo schema riportato come testo, dove le caselle vuote sono spazi, le caselle nere sono punti, le righe hanno tutte il numero giusto di caratteri, e terminano tutte con un ritorno a capo.

SUDOKU (l'assistente per la risoluzione di sudoku)

 

Punti di interesse:
Questo programmino non è progettato per risolvere i sudoku, ma solo per assistere il solutore umano. Mi sono accorto che la parte più noiosa della risoluzione dei sudoku consiste negli interminabili test per vedere quali caselle siano univocamente determinate. Questo assistente aiuta in due modi diversi: Il primo consiste nel tracciare dei piccoli quadratini rossi in ogni casella vuota, per mostrare quali numeri sono necessariamente esclusi. Un quadratino rosso in alto a sinistra indica che in quella casella non può essere messo un 1, il quadratino immediatamente accanto esclude il 2, e il seguente quadratino esclude il 3; questi tre quadratini esauriscono la prima fila di quadratini della casella vuota. La seconda fila segnala le esclusioni dei numeri 4, 5 e 6, la terza e ultima fila quella dei numeri 7, 8 e 9. In questo modo, se una casella ha lo sfondo quasi completamente rosso tranne un piccolo quadratino bianco residuo, ad esempio in basso a sinistra, allora sappiamo che in quella casella dovrà essere scritto un 7. Il secondo aiuto consiste nel colorare di verde lo sfondo delle caselle che potrebbero contenere un numero uguale a quello contenuto nella casella selezionata. In questo modo si controlla facilmente se qualche riga o qualche colonna o qualche riquadro di nove caselle ha soltanto una casella disponibile per il numero attualmente selezionato. Inoltre, quando è selezionato un numero, premendo il tasto destro del mouse su una casella libera, si produce un quadratino nero che segna l'esclusione "manuale" di quel numero per quel quadratino. Per togliere l'esclusione, basta premere nuovamente il tasto destro del mouse sulla stessa casella. L'ultima aggiunta che ho fatto, è la funzione di UNDO e REDO con i tasti Backspace e Tab. Inoltre per il funzionamento non è più necessario nessun file ocx (serve solo MSVBVM60.DLL). Si può pensare che questo strumento azzeri il gusto di risolvere i sudoku: può darsi, ma non pensate che tutti i sudoku siano così facili da domare. A volte, malgrado questo strumento, un sudoku può essere irragionevolmente ostinato. Provate ad esempio lo schema riportato nella figura di esempio, che ho tratto da un numero della rivista "Leggo" distribuita gratuitamente a Milano. Vi renderete conto che ad un certo punto si arriva in una situazione che sembra insuperabile, e l'assistente evidenzia soltanto che non vi sono mosse "automatiche" disponibili: bisogna procedere per prove ed ipotesi. È stato proprio uno schema ostico come questo che mi ha fatto prendere la decisione di scrivere questo programmino, che avevo in mente già da qualche tempo. Se state cercando un vero risolutore di sudoku, vi consiglio senz'altro il solutore on-line di Francesco Balena, uno dei miei autori di informatica preferiti, il cui programma funziona anche nel caso in cui la soluzione non sia univoca, ed opzionalmente può visualizzare un report dettagliato su tutti i passi che hanno portato alla soluzione. Inoltre, nella stessa pagina è presente un link ad un sito con molti schemi da risolvere.

Ho realizzato anche una versione online, scritta in JavaScript che dovrebbe funzionare anche per gli smartphone: Sudoku.html

Istruzioni:
Scrivere normalmente con la tastiera. Posizionare il riquadro che evidenzia la casella che sarà scritta, usando il mouse o le frecce. Le caselle già scritte possono essere cancellate con il tasto "Canc". Le voci del menu sono:
- "Nuovo", che ripristina uno schema vuoto e senza nome.
- "Apri", che permette di ricaricare uno schema salvato in precedenza (con estensione ".sdk").
- "Salva" e "Salva con nome", che permettono di salvare lo schema corrente.
I file con estensione ".sdk" sono semplici file di testo che potete aprire anche con il blocco note, le cui righe contengono lo schema riportato come testo, dove le caselle vuote sono zeri, le righe hanno tutte nove cifre, e terminano tutte con un ritorno a capo.

GIOCHINO DI MODE E PICCININO (recupera il bambino perduto nel boschetto!)

 

Note tecniche:
Il primo computer che ho avuto era un VIC 20 della Commodore che mi "passò" il mio amico Gulliver, insieme a un libretto carino in cui non solo si spiegava bene il funzionamento, ma erano presenti anche alcuni listati per realizzare qualche semplice giochino di esempio. Al termine dell'apprendistato, ho scritto la prima versione di questo "Giochino di Mode e Piccinino" che sostanzialmente è identica a quella riproposta in questa versione per Windows, comprese le figurine originali. Il gioco è scritto in Visual Basic 6 e usa i suoni standard di Windows per produrre qualche semplice effetto.

Istruzioni:
Il piccinino è il bambino perduto al centro del boschetto, che vaga senza discernimento e senza decidere bene da che parte andare. Il giocatore muove il personaggio di Mode, che si presume essere la mamma del piccinino. Mode inizialmente si trova nella sua casina in alto a sinistra, dove nessuno può entrare quando lei la occupa (e infatti la sua immagine diventa una casina). Premendo le quattro frecce, si può muovere Mode attraverso il labirinto-boschetto e raggiungere il piccinino, la qual cosa fa terminare lo schema. Al primo schema, sono presenti nel boschetto anche tre streghette, che fanno quasi da "guardia" al piccino: infatti non sono pericolose per lui, ma Mode deve evitarle mentre cerca di raggiungere il piccinino, o perde una delle sue vite. Dal secondo schema, le streghe diventano quattro. Al terzo schema, compare anche l'inquietante personaggio del serpentello che gironzola a caso come il piccinino ma non deve mai e poi mai raggiungerlo, pena la perdita di una vita (nella verisione originale, il gioco terminava senza contare quante vite fossero ancora disponibili, ma ho ritenuto che ciò fosse troppo straziante e così adesso consuma soltanto una vita di Mode). Mode invece è in grado di schiacciare il serpentello, e quindi conviene occuparsi prima di lui e poi andare al recupero del piccinino. Ho deciso che dopo il decimo schema il gioco è durato abbastanza per cui finisce lì (a meno di non ricominciare un'altra partita).

PAROLODIA (per esperimenti di linguistica, inventa parole nuove a partire da un testo dato)

 

Istruzioni:
Selezionate un file di testo con il bottone "Carica file" e poi premete il tasto "Esegui". Il programma analizza le frequenze con cui nel testo si succedono le lettere e scrive un testo casuale in cui sono rispettate le stesse frequenze. Possono essere configurati diversi parametri, di cui il più importante è "Ordine", che se impostato a 4 permette di riconoscere lo "stile" del testo originale. La generazione del testo può essere interrotta e ripresa usando lo stesso bottone iniziale. Le opzioni possono essere impostate a gioco fermo con il bottone apposito. Esse comprendono:
1) Ignora i numeri (utile se il testo originale è una poesia con i versi numerati)
2) Ignora i ritorni a capo (se si vuole ottenere un output a righe continue)
3) Ignora la punteggiatura (se non si vuole che influisca sulle tabelle di frequenze)
4) Imposta tutto minuscolo (se si desidera ignorare le differenze di frequenze tra maiuscolo e minuscolo)
5) Non eliminare gli spazi multipli (se si vuole considerare anche la frequenza degli spazi).
Il tasto "Informazioni" permette di accedere a una finestra con un testo scorrevole ampiamente esplicativo.
Il programma è scritto in Visual Basic 6 ed usa diverse librerie per cui è necessario che sul PC siano presenti i file MSVBVM60.DLL, COMDLG32.OCX, SCRRUN.DLL e VBSCRIPT.DLL. Non è disponibile un comando per il salvataggio del testo prodotto, ma è possibile selezionarlo ed usare il copia-e-incolla per copiarlo in un documento qualsiasi.

Punti di interesse:
Come per il gioco della vita descritto in precedenza, ho ricavato lo spunto per la scrittura di questo dall'interessante fascicolo "Divertirsi con il calcolatore" edito da "Le Scienze" nel settembre 1987, dove erano raccolti diversi articoli apparsi sulla rivista negli anni precedenti. In particolare, l'articolo originale per questo programma era "Un rapporto di ricerca sulla sottile arte del trasformare letteratura in non senso", di Brian Hayes, del numero di Gennaio 1984 di Le Scienze. Nell'articolo, l'autore cita l'affermazione fatta nel 1927 da Sir Arthur Eddington: "Se un esercito di scimmie pestasse su delle macchine da scrivere, potrebbe scrivere tutti i libri del British Museum". L'autore chiama questo ipotetico processo "un generatore di testo di ordine zero", dato che le scimmie non rispetterebbero alcuna probabilità di frequenza delle lettere, né della lingua inglese in generale, né di un testo prescelto in particolare. Se si impone di rispettare le frequenze dei singoli caratteri, senza tener conto di come si succedono tra loro nel testo di riferimento, il generatore di testo diventa di ordine 1. Se questa frequenza è calcolata, invece, sulla base dell'ultimo carattere letto, il generatore di testo diventa di ordine 2; se scegliamo il carattere successivo basandoci sulle frequenze dei caratteri che seguono i due precedenti, il generatore di testo è di ordine 3 (l'autore parla in questo caso di una "scimmia di Eddington del terzo ordine"), dove ogni tripletta di caratteri generata non solo è presente nel testo base, ma ricorre con la stessa frequenza originale. Alcune prove dimostrano che i testi più interessanti si generano utilizzando il terzo, il quarto o il quinto ordine. In questi due casi è possibile in qualche maniera riconoscere una sorta di "stile" dell'originale.

PENTAX (una variante del Tetris più impegnativa ma con la possibilità di un "tasto di attesa")

 

Note tecniche:
La versione originale DOS di questo programma è stata scritta interamente da mio fratello Francesco. Uno dei miei intenti riscrivendo questo programma in VB.NET 2003 era quello di restare il più possibile vicino alla struttura originale del programma DOS, malgrado le differenze tra i due ambienti, in modo che mio fratello, che non si occupa più di programmazione, se fosse desideroso di curiosare nei file sorgenti, potrebbe ambientarsi facilmente e vedere come si possono fare le stesse cose che si potevano fare in DOS.

Istruzioni:
Riporto la presentazione originale che appare nella prima schermata:
PENTAX è un gioco per campioni del TETRIS, le regole sono le solite solo che i pezzi che cascano non sono i 5 tetramini (+ 2 simmetrici) ma i 12 pentamini che vedete a lato. Siccome 12 pezzi sono già abbastanza, tra i tasti di INPUT ce n'è uno che opera lo specchiamento. Riuscire a completare le file è parecchio più incasinato, la prima volta è già un bel risultato se completate una riga! Buon divertimento!
Per muovere usa il tastierino numerico:
- 8 per ruotare
- 4 per spostare a sinistra
- 6 per spostare a destra
- 5 per specchiare
- 2 per la caduta veloce

Istruzioni segrete:
Poiché io non sono abile come mio fratello, nella nuova versione per Windows ho aggiunto la possibilità di modificare i tasti di input aggiungendo un "tasto di attesa": Quando il gioco è nella sua schermata iniziale con le istruzioni, premete il tasto "P" come "Pentax". Un piccolo cerchietto verde dovrebbe apparire sulla finestra, in alto a sinistra. In questo modo, i tasti del tastierino numerico assumono queste funzionalità:
- 2 caduta veloce
- 4 sposta a sinistra
- 5 specchiamento
- 6 sposta a destra
- 7 ruota in senso antiorario
- 8 tiene in sospeso
- 9 ruota in senso orario
Malgrado tutto, anche mio fratello ha approvato le modifiche e il gioco acquista un interesse maggiore anche per i principianti, trasformandosi in gioco strategico più che di abilità e velocità.

Istruzioni segretissime:
Una funzionalità segretissima (che era già presente nella versione DOS), consiste nell'abilitare la visualizzazione della figurina di una ragazza (disegnata ispirandosi ad una foto di un antico numero di Playboy), che viene "spogliata" man mano che si completano le righe. Quando il gioco presenta la sua schermata iniziale, oltre al tasto "P" (che non è obbligatorio ma sicuramente consigliabile in questo caso), premete poi in successione i tasti "2" e "3". Nell'angolo in alto a sinistra, dovrebbe apparire un cerchietto rosso per segnalare l'attivazione di questa utile funzionalità. Durante il gioco, fino al completamento della prima riga non noterete niente; poi, nell'area di destra della finestra dovrebbe rivelarsi gradualmente il disegno sempre meno... censurato. Buon divertimento!

BUBBLE GAME Test in JavaScript e HTML5

Note tecniche:
Test per l'uso di HTML5 e Javascript. Muovere la pallina rossa con il mouse o le frecce, cercando di evitare le altre palline. Se c'è una collisione, dovreste sentire un beep.