Primo Victoria - La gilda di WoWSoC

Forza 4 dei poveri

« Older   Newer »
  Share  
view post Posted on 19/2/2013, 13:13
Avatar

Operativo

Group:
Veteran
Posts:
315
Location:
Milano

Status:


Visto che tutti creano programmi e li pubblicano qui sul forum anch'io condividerò con voi un paio di mie creazioni informatiche. :D

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
 
Web  Top
view post Posted on 19/2/2013, 14:12
Avatar

Un po' di cose le so

Group:
Officer e Class Leader
Posts:
206

Status:


cool bro!

Questo è stato il mio apice di programmazione in C++ per pc Video


Poi da un pò mi diletto con l'arduino :)
 
Top
view post Posted on 19/2/2013, 16:37
Avatar

Operativo

Group:
Veteran
Posts:
315
Location:
Milano

Status:


Floxy nuovo Bill Gates!
Mi viene voglia di riscaricarmi il mio amato DevC++ e raggiungere nuovi traguardi... Ma dovrei fare tutto da autodidatta :/ che due bolle..
 
Web  Top
view post Posted on 19/2/2013, 18:46
Avatar

Un po' di cose le so

Group:
Officer e Class Leader
Posts:
206

Status:


Lol, usa il visual studio almeno xD consiglio il 2008 express :D

Eheh, io ho la fortuna di farlo a scuola xD chiaramente non ho raggiunto i miei livelli grazie a questa (per la maggior parte auto didatta xD), però è lei che mi ha fatto appassionare alla cosa xD

Per imparare il tipo di ragionamento che serve alla programmazione ti consiglio il vb.net, è molto più semplice ed intuitivo. Però è anche vero che se sai il C plus plés gli altri vengon da sè! (dovevo adattarlo per fare la rima LOL)


Edit:

Per evitare di diventare strabici quando si gioca (le R, gli 0, etc...), penso che questo ti possa aiutare molto :)



Ti posto anche il codice relativo :)

CODICE
#include "stdafx.h" //se non usi visual studio leva quest'inclusione.
#include <iostream>
#include <windows.h>
using namespace std;
// i colori con la L son luminosi, gli altri sono scuri.
enum Colors
{
    Black, Blue, Green, Aqua, Red, Purple, Brown, LGray,
    Gray, LBlue, LGreen, LAqua, LRed, LPurple, LYellow, White
};
void String_Painted(char* s, Colors Text, Colors Background=Black)
{
   HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
   CONSOLE_SCREEN_BUFFER_INFO x;
   GetConsoleScreenBufferInfo(hStdOut, &x);

       SetConsoleTextAttribute(hStdOut, (Text & 0xf) | (Background<<4));
   cout<<s;
   SetConsoleTextAttribute(hStdOut, x.wAttributes);
}
int main()
{        String_Painted("Rosso.",LRed); //tutti colorati
       String_Painted("\nVerde.",LGreen);
       String_Painted("\nViola.",LPurple);
       //ogni volta viene ripristinato il colore console originale (gray)
       cout<<"\nGrigio.";
       return 0;
}



Se qualcosa non ti è chiaro, chiedi pure :)

Edited by Floxytek - 19/2/2013, 19:20
 
Top
view post Posted on 19/2/2013, 20:38
Avatar

Operativo

Group:
Veteran
Posts:
315
Location:
Milano

Status:


Chiarissimo, ho ancora il codice salvato sul computer ma non dispongo di DevC++ al momento.
Grazie a te ci sarà (un giorno) la versione 2.0, con grafica accattivante e a questo punto anche player vs com! XD

Edited by Luca di Nazareth - 12/4/2022, 00:00
 
Web  Top
view post Posted on 20/2/2013, 07:13
Avatar

Un po' di cose le so

Group:
Officer e Class Leader
Posts:
206

Status:


Non uso DevC++ da qualche anno (3 o 4 lol), però se non erro, l'estensione del progetto dovrebbe essere .cpp che dovrebbe essere equivalente per tutti gli IDE, quindi non dovresti aver problemi a passare da uno all'altro :)
 
Top
facciadatorta
view post Posted on 20/2/2013, 23:09




Io ti consiglio matlab...è più immediato ed anche più fattibile da autodidatta :)
 
Top
view post Posted on 21/2/2013, 00:09
Avatar

Operativo

Group:
Veteran
Posts:
315
Location:
Milano

Status:


Ho usato anche MatLab, ma per tutt'altro... Non saprei come usarlo per queste cose .-.
 
Web  Top
deste_92
view post Posted on 21/2/2013, 09:43




ma matlab è il peggio...D:
è orrido e matematico...ad un informatico non serve...e un codice troppo easy e di alto livello...più belli i linguaggi di basso livello
 
Top
facciadatorta
view post Posted on 21/2/2013, 12:51




io infatti non faccio informatica ma ingegneria biomedica XD
 
Top
view post Posted on 21/2/2013, 15:46
Avatar

Un po' di cose le so

Group:
Officer e Class Leader
Posts:
206

Status:


a sto punto abbassiamo il livello all'assembly e gg xD
 
Top
Shampagne
view post Posted on 23/2/2013, 14:19




Consigliare di programmare in vb.net per imparare a programmare è da pazzi XD
 
Top
view post Posted on 23/2/2013, 14:41
Avatar

Un po' di cose le so

Group:
Officer e Class Leader
Posts:
206

Status:


CITAZIONE (Shampagne @ 23/2/2013, 14:19) 
Consigliare di programmare in vb.net per imparare a programmare è da pazzi XD

ma dai, per fare cose relativamente semplici, è molto banale xD almeno impari a "ragionare da programmatore". Poi il passaggio al C sarebbe comunque tosto data la grossa differenza del framework e delle classi che nel C mancano
 
Top
Shampagne
view post Posted on 23/2/2013, 15:59




Il vb non aiuta per nulla a sviluppare capacità di ragionamento da programmatore, non è C-like ed è lento come una capanna.

Per iniziare al ragionamento meglio qualcosa tipo Pascal data la sintassi rigida e l'obbligo di divisione del codice in sezioni ben definite.

Poco male è iniziare dal c direttamente, per poi passare a linguaggi ad ogetti, consiglierei Java.

Mia esperienza personale è stata: C, Assembly per ST62, MIPS, C ad alti livelli, Java J2SE,PHP, C#, Java J2EE con annessi e connessi :)

E comunque è sconsigliatissimo iniziare da linguaggi ad oggetti, visto che senza una base solida di programmazione procedurale è tosta entrare nell'ottica di cosa sia un oggetto e come debba essere implementato e del perchè il tutto funzioni eheh.
 
Top
facciadatorta
view post Posted on 23/2/2013, 19:06




Regà da quello che ho capito vorrebbe farlo da autodidatta...e siccome credo che voglia avere una vita oltra a giocare a wow e programmare credo che gli convenga qualcosa di semplice...poi se vuoi fare il figo ti impari a programmare in modula-2 che potrebbe diventare (negli anni '70 è caduto in disuso quasi subito dato che le librerie non erano standardizzate e la migrazione da modula-2 a un altro formato era complicatissima per l'epoca) il linguaggio del futuro (delphi è una sua "involuzione").
 
Top
23 replies since 19/2/2013, 13:13   2080 views
  Share