Visto che tutti creano programmi e li pubblicano qui sul forum anch'io condividerò con voi un paio di mie creazioni informatiche.
3 anni fa ho imparato all'università le basi del linguaggio C++ e mi sono dilettato a creare programmini stupidi...
All'inizio ho creato programmini standard del tipo: "Calcolatore della serie di Fibonacci", "Controlla se la parola è palindroma", "Trova la posizione della lettera nell'alfabeto"... Insomma, gli esercizi che si fanno per imparare a smanettare in C++.
Quando ho visto che stavo diventando potentissimo over nine thousand ho cominciato ad approfondire l'argomento e ho raggiunto l'apice della mia esperienza da programmatore con la creazione (interamente in linguaggio C++, circa 1200 righe di codice se non ricordo male) del programma "Forza 4".
In pratica è una simulazione del semplice Forza 4 riportata su computer a cui si può giocare SOLO contro un altro giocatore reale, non ho inserito la modalità PLAYER VS COM (come ho scritto anche nello spoiler, proprio alle ultime righe).
Spoiler: storia ed evoluzione del programma:
La prima versione del programma (diciamo la
1.0) era grezza e funzionava decentemente, ma aveva come pecca il fatto che non ti avvisava quando un giocatore vinceva, quindi ho provveduto subito ad aggiungere dei controlli alla fine di ogni turno che permettono di scoprire se un giocatore o l'altro vince.
Inoltre ho aggiunto sopra ad ogni colonna dello schema di gioco dei numeri in corrispondenza delle colonne (sopra la prima colonna un 1, sopra la seconda un 2, etc...).
Nacque così, in seguito a queste due modifiche, la versione
1.1!
[Controllo delle combinazioni in orizzontale, verticale e diagonale in entrambi i sensi]
Sorse però un problema: non mi rilevava le combinazioni vincenti in diagonale se esse partivano dalla prima colonna... Ci ho messo un po' di tempo a capire che dipendeva dal fatto che la prima colonna è la colonna 0, non 1 (che capra che sono!) e quindi i controlli cominciavano dalla seconda colonna stampata a video.
Bug fixed semplicemente modificando un valore numerico nello script.
Arrivò il giorno in cui feci provare questo programma ad un mio compagno di università noto per la sua maestria con la matematica e i problemi logici per guadagnarmi la sua stima e magari diventare il suo servetto... Ha constatato che funzionava tutto correttamente, nonostante un'interfaccia brutta (se scaricherete il programma vedrete), e mi spinse verso la creazione della versione
1.2.
Cosa cambiava rispetto alla
1.1?
In pratica il programma chiede all'inizio di ogni turno in quale colonna il giocatore vuole inserire il proprio gettone; si presuppone che il giocatore inserisca un numero, ma nel caso in cui il giocatore rispondeva inserendo una lettera o un altro carattere succedevano cose strane...
Bug fixed semplicemente aggiungendo un ciclo da cui non si usciva finchè non si inseriva un valore accettabile.
Edit: ho provato ora a mettere alla prova il programma e ho notato che questo fix non c'è (o meglio, se inserisco caratteri non numerici il programma va in loop infinito, se inserisco caratteri numerici non validi invece mi fa ripetere l'operazione finchè non inserisco un carattere numerico valido, come è giusto che sia). A questo punto mi viene da pensare che non avevo risolto il problema di char inseriti al posto di int.Creai anche una versione
1.3, che non ho trovato ahimè
, in cui al termine della partita venivano conteggiati i secondi totali impiegati da ogni player per effettuare le proprie mosse (sia la somma sia la media, tu pensa che roba da premio Nobel).
Avevo anche pensato alla possibilità di fare partite contro il computer tramite l'utilizzo della funzione random, ma non ho mai avuto la voglia di riprendere in mano il programma....
Vi dovrete accontentare della
1.2!
Il programma pesa la bellezza di 23 Kb, lo script è bello lungo, ma non ottimale dal punto di vista computazionale.... E chissene! Tanto mica deve fare chissà quali calcoli! XD
Per introdurvi al gioco ecco un breve tutorial.
Appena apri il file (è un .exe) viene stampata a video una matrice piena di zeri posta sotto ad una riga coi numeri da 1 a 7 in corrispondenza delle colonne:
1 2 3 4 5 6 7 <--- Riga che indica il numero delle colonne
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0 <--- Matrice piena di zeri
0 0 0 0 0 0 0
0 0 0 0 0 0 0
All'inizio di ogni turno il programma chiede:
"Giocatore X (1 o 2, dipende da chi deve compiere l'azione): in che colonna vuoi mettere il gettone?"
E' qui che diventa utile la prima riga (quella coi numeri da 1 a 7), non dovremo metterci a contare ogni volta per conoscere la posizione di una colonna; se non sono stato chiaro fidatevi che giocando se ne coglie l'utilità.
Supponiamo che il giocatore risponda "3", cioè vuole inserire un gettone nella terza colonna.
Verrà stampato a video questo:
1 2 3 4 5 6 7
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 R 0 0 0 0
Lo so, si vede poco, ma ci si fa l'abitudine e non sapevo fare altrimenti.
Nella colonna 3 è stato inserito un gettone R (red), a questo punto toccherà al secondo giocatore che inserirà un gettone Y (yellow) e si andrà avanti finchè non si avrà un vincitore (o lo schema non sarà pieno).
Esempio di schema dopo alcune mosse:
1 2 3 4 5 6 7
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 R 0 0 0
0 0 0 Y 0 0 0
0 0 0 Y Y R 0
R 0 R Y R Y 0
Purtroppo non è facile distinguere le Y, le R e gli 0, ma non avevo le conoscenze per fare altrimenti.
Penso di aver detto tutto.
Click qui per download da mediafire se siete curiosi.
Non mi aspetto che vi divertiate a giocarci o chissaccheccosa, però non sapevo che fare e ho deciso di buttarvi lì l'idea... Magari vi stimolerà a creare a vostra volta programmi (magari utili XD) che condividerete qua sul forum e stimolerete altre persone a creare altri programmi ancora più utili e così via all'infinito!
Edited by Luca di Nazareth - 11/4/2022, 23:54