View Full Version : [C++] Info sulla creazione di videogame
xeeynamo
01-04-2008, 14:59
Credo che quasi tutti noi abbiamo sempre sognato di creare un videogame tutto nostro... Ecco, io sono uno dei tanti che vorrebbe riuscirci... Il mio scopo è creare un videogame platform 2D (come Sonic, dove ho intenzione di prendere l'ispirazione). Conosco la programmazione in C++, sò alla perfezione l'uso delle varie funzioni di default del C, sò usare bene le librerie stdio, stdlib, conio e un pò le api windows... Un paio di mesi fa avevo provato un SDK chiamato Dark GDK che combinato con Visual C++ 2008 avevo ottenuto qualche piccolo risultato tipo sprite animate, menu funzionanti e completi di grafiche animate e complete! Però dopo un pò mi accorgo che la maggior parte delle funzioni è per creare un videogame completamente 3D e qundi quelle librerie non mi sarebbero servite a molto, anche perchè gli example erano tutti riferiti a piccole demo 3D quindi... Ho intenzione di lavorare con librerie potenti, tipo le DirectX e quindi lasciar perdere librerie tipo l'allegro. Io penso che con un paio di mesi (giusto il tempo di prendere familiarità con la libreria) e potrei realizzare qualcosa di veramente serio! Il fatto è che non sò dove partire! anche perchè le basi del C++ le sò! Sò anche programmare per PSP quindi volendo potrei realizzare il videogame anche lì. Indicatemi voi la strada, magari seguendo qualche buon tutorial! Con l'inglese ci sò fare, quindi anche qualche tutorial in inglese mi va bene (anche se ho un pò di difficoltà nel parlarlo). Poi anche un'altra cosa che non credo sia semplice imparare, è come posso usare formati particolari, ad esempio quei videogame che hanno quei pack che contengono vari file. Non vorrei fare di certo un videogame che carica le risorse con formati ad esempio png o ogg XD sò che bisognerebbe fare riferimento ad altre librerie ancora oppure crearsele da zero ma come nel caso precedente, non sò dove cercare >.< spero di avere risposte che mi aiutino, in modo da realizzare il mio sogno che è nato da quand'ero piccolino :)
Credo che quasi tutti noi abbiamo sempre sognato di creare un videogame tutto nostro...
Beh si' :D
spero di avere risposte che mi aiutino, in modo da realizzare il mio sogno che è nato da quand'ero piccolino :)
Guarda la mia firma, segui il link per Diamonds, dimentica C/C++, per un gioco 2D non ti servono, impara Java e parteciperai anche tu alla creazione di un giochino.
Se vuoi fare tutto da solo in C++, al contrario, le probabilita' di non realizzare il tuo sogno sono prossime al 100%.
cdimauro
01-04-2008, 15:55
Esagerato! Dagliela almeno qualche possibilità. Diciamo che al 99,9999(periodico)% non ci riuscirà... :O
:asd:
P.S. Ovviamente quoto. :)
xeeynamo
01-04-2008, 16:02
dimentica C/C++, per un gioco 2D non ti servono, impara Java e parteciperai anche tu alla creazione di un giochino.
Se vuoi fare tutto da solo in C++, al contrario, le probabilita' di non realizzare il tuo sogno sono prossime al 100%.
E come mai? Cioè io sapevo che col C++ si poteva fare qualsiasi cosa, dai giochini più scemi a quelli più complessi! Comunque fare il videogame da solo è quasi impossibile, me ne rendo conto purtroppo :( ma vorrei sapere come si fa perchè le basi del C++ ce le ho e qualcosina con alcune librerie la sono riuscita a fare. Il java lo studierò l'anno prossimo a scuola (adesso faccio il terzo superiore) magari l'anno prossimo avendo le basi buone potrò anche cercare di fare qualcosina in java!
Credo che quasi tutti noi abbiamo sempre sognato di creare un videogame tutto nostro... Ecco, io sono uno dei tanti che vorrebbe riuscirci... Il mio scopo è creare un videogame platform 2D (come Sonic, dove ho intenzione di prendere l'ispirazione). Conosco la programmazione in C++, sò alla perfezione l'uso delle varie funzioni di default del C, sò usare bene le librerie stdio, stdlib, conio e un pò le api windows... Un paio di mesi fa avevo provato un SDK chiamato Dark GDK che combinato con Visual C++ 2008 avevo ottenuto qualche piccolo risultato tipo sprite animate, menu funzionanti e completi di grafiche animate e complete! Però dopo un pò mi accorgo che la maggior parte delle funzioni è per creare un videogame completamente 3D e qundi quelle librerie non mi sarebbero servite a molto, anche perchè gli example erano tutti riferiti a piccole demo 3D quindi... Ho intenzione di lavorare con librerie potenti, tipo le DirectX e quindi lasciar perdere librerie tipo l'allegro. Io penso che con un paio di mesi (giusto il tempo di prendere familiarità con la libreria) e potrei realizzare qualcosa di veramente serio! Il fatto è che non sò dove partire! anche perchè le basi del C++ le sò! Sò anche programmare per PSP quindi volendo potrei realizzare il videogame anche lì. Indicatemi voi la strada, magari seguendo qualche buon tutorial! Con l'inglese ci sò fare, quindi anche qualche tutorial in inglese mi va bene (anche se ho un pò di difficoltà nel parlarlo). Poi anche un'altra cosa che non credo sia semplice imparare, è come posso usare formati particolari, ad esempio quei videogame che hanno quei pack che contengono vari file. Non vorrei fare di certo un videogame che carica le risorse con formati ad esempio png o ogg XD sò che bisognerebbe fare riferimento ad altre librerie ancora oppure crearsele da zero ma come nel caso precedente, non sò dove cercare >.< spero di avere risposte che mi aiutino, in modo da realizzare il mio sogno che è nato da quand'ero piccolino :)
vai quì:
http://www.gameprog.it/
c'è un forum apposito per videogame in ita e molte info.
per il [c++] chiedi pure qui
cdimauro
01-04-2008, 16:16
E come mai? Cioè io sapevo che col C++ si poteva fare qualsiasi cosa, dai giochini più scemi a quelli più complessi!
Indubbiamente. Chiediti anche: ma in quanto tempo?
Comunque fare il videogame da solo è quasi impossibile, me ne rendo conto purtroppo :(
Appunto per questo segui il consiglio di Fran: aggregati al progetto Diamonds, che ha un già un team ben consolidato ed è diretto da uno dei massimi esponenti italiani (e non) attuali nel campo dei videogiochi. ;)
ma vorrei sapere come si fa perchè le basi del C++ ce le ho e qualcosina con alcune librerie la sono riuscita a fare. Il java lo studierò l'anno prossimo a scuola (adesso faccio il terzo superiore) magari l'anno prossimo avendo le basi buone potrò anche cercare di fare qualcosina in java!
Passare da C++ a Java non ti sarà difficile. Anzi: Java è una pacchia, e in Diamonds c'è gente che l'ha imparato sul campo, in poco tempo.
E come mai? Cioè io sapevo che col C++ si poteva fare qualsiasi cosa, dai giochini più scemi a quelli più complessi! Comunque fare il videogame da solo è quasi impossibile, me ne rendo conto purtroppo :( ma vorrei sapere come si fa perchè le basi del C++ ce le ho e qualcosina con alcune librerie la sono riuscita a fare. Il java lo studierò l'anno prossimo a scuola (adesso faccio il terzo superiore) magari l'anno prossimo avendo le basi buone potrò anche cercare di fare qualcosina in java!
Certo, in C++ puoi fare qualunque cosa, anche in assembly. Il problema qui non e' cio' che puoi fare con un linguaggio, ma in quanto tempo riesci a farlo.
In C++ impieghi a scrivere un gioco probabilmente dieci volte il tempo che impiegheresti con un linguaggio come Java/C#/Python. Questo presupponendo che tu abbia una decina di anni di esperienza di programmazione alle spalle.
Ma non li hai.
Quindi hai due scelte:
1) Aiuti altri a scrivere un gioco 2D con un linguaggio ad alto livello imparando il mestiere
2) Provi a scrivi tutto da solo in C++ non concludendo nulla quasi sicuramente
A te la scelta :)
xeeynamo
01-04-2008, 17:08
va bene dai, proverò col java =) magari aiutandovi nel vostro progetto potrei avere conoscienze abbastanza buone se magari voglio realizzare minigiochi in java!! Mi metterò a leggere qualche tutorial per imparare bene le basi! Cmq grazie per la proposta di entrare a far parte del progetto :D sciaoz!!
Secondo me... non vorrei incorrere nelle giuste ire dei più esperti :D ...
1) Aiuti altri a scrivere un gioco 2D con un linguaggio ad alto livello imparando il mestiere
Pro:
-Linguaggio di alto livello più "semplice" da usare;
-riuscirai quasi certamente a finire un progetto carino;
-avrai idea dello sviluppo di un gioco nel suo complesso;
-facile; :rolleyes:
Contro
-linguaggio di alto livello che rende difficile sfruttare appieno l'hardware;
-il gioco non verrà "fico", se mi passate il termine.
E' la scelta migliore se preferisci finire un progetto rispetto a imparare cose avanzate.
2) Provi a scrivi tutto da solo in C++ non concludendo nulla quasi sicuramente
Pro:
-linguaggio "intermedio livello" che permette di creare applicazioni prestanti, e che sfruttano appieno l'hardware;
-volendo invece puoi usare diversi middleware come Ogre3D o PhysX;
-qualsiasi cosa ti venga in mente, c'è una libreria che la implementa in C++;
-esperienza avanzata dovuta ai punti precedenti;
-I giochi "veri" sono fatti in C++, anche se il trend si sta invertendo.
Contro
-linguaggio di "intermedio livello" che permette al programmatore di rovinarsi con le sue mani; ergo, ci si mette moltissimo a fare qualcosa;
-si rischia di non avere idea di come si faccia un progetto grosso;
-perchè non è facile lavorare in team;
-perchè si rischia di fare tante piccole demo e mai un gioco vero e proprio;
-non finirai il tuo gioco, se non dopo anni di esperienza.
E' la scelta migliore se preferisci imparare cose avanzate più che finire un progetto. (Ammetto che è una scelta un po old;) )
Indi, la scelta dipende solo da te :D
Preferisci finire un gioco semplice o saperne fare uno complesso solo in teoria?
Io ho scelto la seconda solo perchè sono affascinato dalle tematiche avanzate come shaders, nuove tecniche, gestione a basso livello ecc... ma so che a molti potrebbe sembrare terribile :D
EDIT: tutto sto post e lui ha deciso prima :doh: :D
stdecden
01-04-2008, 17:25
99,9999(periodico)% non ci riuscirà... :O
Quarda che quel numero corrisponde a 100%
banryu79
01-04-2008, 17:35
Ulteriore PRO nel partecipre a Diamonds:
- impari a lavorare in un team;
- confrontandoti con altri programmatori (e nota che sono esperti) impari molto di più che da solo;
- fai esperienza con la metodologia di sviluppo TDD (Test Driven Development) che ti permette di approcciare le scelte di design di un applicazione e l'evoluzione del codice prodotto da un nuovo punto di vista.
Viste le alternative, la partecipazione al progetto Diamonds ha molti più "PRO", imho, poi ovviamente tutto dipende da cosa vuoi ottenere ;)
-linguaggio di alto livello che rende difficile sfruttare appieno l'hardware;
Pensi con un gioco 2D di arrivare davvero da solo al punto di trovarti di fronte al problema e "ok, per fare questo ho bisogno del C++ per sfruttare meglio l'hardware". Secondo me no. Non ci riescono interi team di sviluppo ad arrivare a quel livello di uso dell'hardware dopo anni di sviluppo.
-il gioco non verrà "fico", se mi passate il termine.
Un gioco che non finira' mai e' molto meno fico ;)
-I giochi "veri" sono fatti in C++, anche se il trend si sta invertendo.
I giochi "veri" NON sono scritto tutti in C++ da anni.
E' la scelta migliore se preferisci imparare cose avanzate più che finire un progetto. (Ammetto che è una scelta un po old;) )
Prima di imparare le cose avanzate, imparerei quelle base. Questo tralasciando il fatto che puoi imparare tantissime cose avanzate che riguardano il game programming e il 3D senza sfiorare il C++.
MasterDany
01-04-2008, 17:44
fek :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:
sto male:cry: :cry: :cry:
MasterDany
01-04-2008, 17:45
Ulteriore PRO nel partecipre a Diamonds:
- impari a lavorare in un team;
- confrontandoti con altri programmatori (e nota che sono esperti) impari molto di più che da solo;
- fai esperienza con la metodologia di sviluppo TDD (Test Driven Development) che ti permette di approcciare le scelte di design di un applicazione e l'evoluzione del codice prodotto da un nuovo punto di vista.
Viste le alternative, la partecipazione al progetto Diamonds ha molti più "PRO", imho, poi ovviamente tutto dipende da cosa vuoi ottenere ;)
sto leggendo un manuale di JAVA prima di entrare nel tema devo conoscere JAVA?
MasterDany
01-04-2008, 17:51
come a scritto diobrando c'è che ha imparato java lì io con il vostro aiuto e con il manuale ci capirò qualcosa o no?
cdimauro
01-04-2008, 18:19
Quarda che quel numero corrisponde a 100%
Ero "leggermente" sarcastico... :stordita: :D :asd:
m.distrutti
01-04-2008, 20:40
java3D credo poi sia una rivoluzione ihih
non voglio denigrare il C++ che lo studio con passione da anni,da quando ero alto un metro e un tappo asd, ma per cultura e passione alla materia studio tutto
detto cio in Java l'apprendimento di molte cose e' più veloce e intuitivo a mio parere di fatti le universita si stanno spostando tutte al Java come linguaggio principale
se vuoi a mano da solo riscrivere un videogame 3D in C++ da solo con Engine e tutto credo anche io sia impossibile, ma studiare cmq la programmazione delle librerie grafiche 3D indipendentemente dal linguaggio e' utile per se stessi :)
Pensi con un gioco 2D di arrivare davvero da solo al punto di trovarti di fronte al problema e "ok, per fare questo ho bisogno del C++ per sfruttare meglio l'hardware". Secondo me no. Non ci riescono interi team di sviluppo ad arrivare a quel livello di uso dell'hardware dopo anni di sviluppo.
2D no, ma uno nel 2008 spera di farlo 3D mi sa ;)
E li è piuttosto facile andare incontro ai limiti hardware, se non si sa cosa si sta facendo.
Un gioco che non finira' mai e' molto meno fico ;)
In effetti... :D
I giochi "veri" NON sono scritto tutti in C++ da anni.
Bhe, ma l'engine e il framework si... e se uno vuole per caso comprendere come funzionano oppure scriverne uno, non può non sapere C++.
Prima di imparare le cose avanzate, imparerei quelle base. Questo tralasciando il fatto che puoi imparare tantissime cose avanzate che riguardano il game programming e il 3D senza sfiorare il C++.
Bhe quelle base le davo per scontate :mbe:
Cmq si, il linguaggio è solo il mezzo per implementare un algoritmo.
In ogni caso, conoscere cose che non sono direttamente connesse al proprio obiettivo spesso può far scoprire molte cose... altrimenti perchè insistono ad insegnare ASM all'università? Non si usa più da decenni...
indi secondo me uno che riesce a fare il suo giochello 2D, senza gestire la memoria, senza usare la scheda video ne aver visto un vertice eccetera, avrà comunque una visione molto incompleta di "come funziona" un videogioco moderno.
Poi certo, se gli interessa solo averci un gioco finito studiare altro è ovviamente inutile...
2D no, ma uno nel 2008 spera di farlo 3D mi sa ;)
E li è piuttosto facile andare incontro ai limiti hardware, se non si sa cosa si sta facendo.
Un gioco 3D da solo. Hmm..
Se riesci ad essere CPU bound in una scena relativamente semplice (perche' non hai un team che ti produce content per una scena complessa) con una CPU dual core, non hai bisogno di usare un C++, hai bisogno di riscrivere l'engine da zero.
Per tutto quello che puoi fare a casa da solo, XNA va piu' che bene, anzi ce n'e' di avanzo abbondante. Non avrai mai bisogno neppure di avvicinarti al C++.
Nel 99.99% dei casi ti ritrovi GPU bound.
Bhe, ma l'engine e il framework si... e se uno vuole per caso comprendere come funzionano oppure scriverne uno, non può non sapere C++.
Puoi scrivere un engine sovrabbondante per quello che mai ti servira' in C# usando XNA senza mai vedere il C++.
Sbagli gia' in partenza: il C++ non ti serve per una questione prestazionale, ma per avere sotto controllo il layout degli oggetti in memoria e il loro ciclo di vita. E queste cose sono importanti quando hai decine di migliaia di oggetti su console, non dieci su PC.
Bhe quelle base le davo per scontate :mbe:
Cmq si, il linguaggio è solo il mezzo per implementare un algoritmo.
Ecco, studia gli algoritmi e usa il linguaggio piu' ad alto livello che puoi per implementarli senza badare alle performance. Per i prossimi anni per te non sara' mai un problema.
altrimenti perchè insistono ad insegnare ASM all'università?
Perche' sbagliano.
indi secondo me uno che riesce a fare il suo giochello 2D, senza gestire la memoria, senza usare la scheda video ne aver visto un vertice eccetera, avrà comunque una visione molto incompleta di "come funziona" un videogioco moderno.
Al contrario, avra' la visione migliore di cio' che veramente conta in un videogioco: gli algoritmi. E non rischiera' di diventare quello che ti dice "Cioe', figa, scrivo tutto ottimizzatissimo per PS3 cioe' non l'ho mai lanciato ma so' che e' veloooooooce". Sapessi quanti ne ho visti...
Lascia perdere il C++ se vuoi fare videogiochi e impara prima a programmare.
Un gioco 3D da solo. Hmm..
Se riesci ad essere CPU bound in una scena relativamente semplice (perche' non hai un team che ti produce content per una scena complessa) con una CPU dual core, non hai bisogno di usare un C++, hai bisogno di riscrivere l'engine da zero.
Per tutto quello che puoi fare a casa da solo, XNA va piu' che bene, anzi ce n'e' di avanzo abbondante. Non avrai mai bisogno neppure di avvicinarti al C++.
Nel 99.99% dei casi ti ritrovi GPU bound.
Bhe, dipende sempre dai gusti. Se io lo faccio proprio per capire come funziona un engine 3d, fare un gioco 2D in Java non mi dà nulla, ne mi interessa completare il progetto.
E non credo sia un male essere in grado di ottimizzare il proprio codice (cosa che molti programmatori di "alto livello" credono inutile)
Puoi scrivere un engine sovrabbondante per quello che mai ti servira' in C# usando XNA senza mai vedere il C++.
Sbagli gia' in partenza: il C++ non ti serve per una questione prestazionale, ma per avere sotto controllo il layout degli oggetti in memoria e il loro ciclo di vita. E queste cose sono importanti quando hai decine di migliaia di oggetti su console, non dieci su PC.
Ma io non ho detto il contrario :D So bene che il maggiore problema è l'organizzazione delle risorse. Certo, questo porta anche anche un piccolo vantaggio prestazionale che gli studi coi soldi non si lasciano sfuggire.
Io dicevo solamente che per capire il gli engines degli altri devi sapere il C++, perchè il spessissimo sono scritte in C++...
E la mia idea cmq non è rimanere a gestire 10 oggetti su PC, ma quello è un'altro discorso :rolleyes:
Ecco, studia gli algoritmi e usa il linguaggio piu' ad alto livello che puoi per implementarli senza badare alle performance. Per i prossimi anni per te non sara' mai un problema.
Alcuni programmi che ho provato mettono in crisi il mio pc in C++... anche se sono certo che li avrei potuti organizzare meglio. Ma in quei casi entrava in gioco la matematica :D
Perche' sbagliano.
Ci speravo in realtà :D
Al contrario, avra' la visione migliore di cio' che veramente conta in un videogioco: gli algoritmi. E non rischiera' di diventare quello che ti dice "Cioe', figa, scrivo tutto ottimizzatissimo per PS3 cioe' non l'ho mai lanciato ma so' che e' veloooooooce". Sapessi quanti ne ho visti...
Lascia perdere il C++ se vuoi fare videogiochi e impara prima a programmare.
Vero... posso ribattere invece che molti sanno solo gli algoritmi e seguono quelli alla cieca, creando roba che va lentissima :D
Indi, credo sia una questione di gusti...
E non credo sia un male essere in grado di ottimizzare il proprio codice (cosa che molti programmatori di "alto livello" credono inutile)
Non e' male, e' molto peggio. Per mia esperienza con questa mentalita' finisci sempre con codice piu' lento e meno gestibile. Sempre. Mai vista un'eccezione alla regola.
E la mia idea cmq non è rimanere a gestire 10 oggetti su PC, ma quello è un'altro discorso :rolleyes:
La mia idea e' passare la notte con Keira Knightley ma la sua idea e' differente dalla mia ;)
Prima di imparare a gestire una scena complessa, devi imparare a gestirne una semplice e se ti fissi con l'ottimizzazione (come e' evidentissimo da cio' che scrivi), non sarai mai in grado di scrivere un engine per gestire migliaia di oggetti, perche' ti perderai prima nella complessita'.
Non ti serve imparare il C++, ti serve imparare gli algoritmi.
Alcuni programmi che ho provato mettono in crisi il mio pc in C++... anche se sono certo che li avrei potuti organizzare meglio. Ma in quei casi entrava in gioco la matematica :D
Allora riscrivili in un linguaggio ad alto livello e ottimizza gli algoritmi. C# e XNA vanno benissimo. Per anni non raggiungerai il limite di cio' che puoi fare con questo strumento.
Vero... posso ribattere invece che molti sanno solo gli algoritmi e seguono quelli alla cieca, creando roba che va lentissima :D
Indi, credo sia una questione di gusti...
Permettimi, scrivo engine da dieci anni e non e' una questione di gusti. Il 99% delle mie ottimizzazioni sono algoritmiche, l'1% sono a basso livello. Negli ultimi cinque anni in due progetti conclusi ho scritto alcune centinaia di migliaia di righe di codice... e circa dieci in assembly.
Se parti con l'idea che devi pensare all'ottimizzazione, ti troverai di fronte una strada in forte salita e prima o poi dovrai infilarti in testa che prima devi far funzionare le cose, poi renderle semplici e infine... solo dove c'e' bisogno... ottimizzarle.
banryu79
02-04-2008, 09:05
prima devi far funzionare le cose, poi renderle semplici e infine... solo dove c'e' bisogno... ottimizzarle.
Grazie fek, questa me la imparo a memoria: a volte commetto l'errore di dare per scontato il fatto che la funzionalità che sto scrivendo, nel modo in cui la sto scrivendo, funzionerà/farà esattamente ciò che voglio... e passo a pensare subito a come organizzarla perchè il codice sia semplice da capire, prima di averlo ancora steso quel codice :doh:
Grazie fek, questa me la imparo a memoria: a volte commetto l'errore di dare per scontato il fatto che la funzionalità che sto scrivendo, nel modo in cui la sto scrivendo, funzionerà/farà esattamente ciò che voglio... e passo a pensare subito a come organizzarla perchè il codice sia semplice da capire, prima di averlo ancora steso quel codice :doh:
Allora ti riporto l'originale inglese: Make it work, Make it nice, Make it fast.
Io scrivo sempre prima qualcosa che funzioni, commettendo tutti i peccati possibili basta che funzioni. Non mi interessa che sia lento o veloce, ma voglio vedere qualcosa che gira. Poi lo rifattorizzo e poi, solo se necessario, lo ottimizzo.
DioBrando
02-04-2008, 14:11
come a scritto diobrando c'è che ha imparato java lì io con il vostro aiuto e con il manuale ci capirò qualcosa o no?
Eh? :stordita:
Allora ti riporto l'originale inglese: Make it work, Make it nice, Make it fast.
Io scrivo sempre prima qualcosa che funzioni, commettendo tutti i peccati possibili basta che funzioni. Non mi interessa che sia lento o veloce, ma voglio vedere qualcosa che gira. Poi lo rifattorizzo e poi, solo se necessario, lo ottimizzo.
Alla fine è lo stesso principio che c'è dietro la realizzazione di un algoritmo.
Prima l'intuizione, la stesura di un codice naive (pseudocodice) che funzioni e poi si cerca di migliorarlo diminuendone la complessità.
Ecco perchè si consigliano sempre linguaggi che nascondano dettagli per concentrarsi sul "cosa" e non sul "come".
() per gli interessati allo sviluppo di giochi, ci dovrebbero essere materiale informativo (training videos, ecc.) sul sito Microsoft per XNA
A proposito di codice offuscato e C/C++, beccatevi questo (http://blogs.ugidotnet.org/corrado/archive/2008/03/27/91914.aspx) :asd:
...
Bhe, io non sono assolutamente un maniaco dell'ottimizzazione, anzi. Ho iniziato a pormi il problema da pochissimo tempo.
Anche perchè è solo da poco che come abilità arrivo a pensare ad ottimizzare...
prima mi fermavo al "Make it work";
"Make it nice" è spesso questione di gusti (come ho imparato lavorando in team);
allora sto pensando all'ultimo passo :D
Io semplicemente difendo la possibilità di fare tutto, perchè con C++ puoi focalizzarti sia sul "cosa" sia sul "come", per quanto sia più difficile, mentre in linguaggi come Java il come è quello che ti impone il linguaggio, in molti casi.
A proposito di codice offuscato e C/C++, beccatevi questo (http://blogs.ugidotnet.org/corrado/archive/2008/03/27/91914.aspx) :asd:
Paura :eek:
cdimauro
02-04-2008, 15:35
Il "make it nice" non è questione di gusti: il codice, dopo la prima stesura, va rifattorizzato per fargli assumere una forma che sia semplice, pulita e soprattutto manutenibile.
Quanto al C++, è vero che ti permette di specificare in dettaglio COME si fanno le cose, ma il concetto è sempre lo stesso: quanto tempo devi perderci? Ma soprattutto: ne vale realmente la pena?
"Make it nice" è spesso questione di gusti (come ho imparato lavorando in team);
allora sto pensando all'ultimo passo :D
"Make it nice" non e' una questione di gusti, e' questione di finire il progetto oppure no. Se non hai mai lavorato su una code base da milioni di righe di codice e' difficile apprezzare questo concetto e l'importanza che riveste la manutenzione del codice. Perche' il codice si scrive una volta sola, ma si legge decine e decine di volte.
Si privilegia sempre la leggibilita' del codice alla sua velocita' di esecuzione a meno che non ci siano dati chiari di un profiler, e chiari requisiti, che impongano la seconda. E, ripeto, a te questi requisiti non arriveranno ancora per anni.
Prima di imparare a ottimizzare devi imparare a programmare e gli algoritmi, non so veramente in che lingua dirtelo, e ti parlo da dieci anni di esperienza a fare questo lavoro :)
Io semplicemente difendo la possibilità di fare tutto, perchè con C++ puoi focalizzarti sia sul "cosa" sia sul "come", per quanto sia più difficile, mentre in linguaggi come Java il come è quello che ti impone il linguaggio, in molti casi.
Cio' che difendi e' sbagliato. In Java/C# puoi concentrarti sia sul cosa sua sul come. L'unica differenza fra Java/C# e C++ e' la produttivita', molto piu' bassa col secondo e in cambio non ricevi nulla perche' a te usare il C++ non cambia nulla. Non c'e' assolutamente nessun algoritmo grafico che ti serva tu possa implementare in C++ e non in Java/C#. Nessuno.
Se non e' chiaro lo ripeto: non c'e' niente che tu possa scrivere in C++ e non in Java/C# :)
Sono rarissimi gli scenari nel mio lavoro di tutti i giorni per le quali ho bisogno del C++, ne farei molto volentieri a meno la maggior parte del tempo.
Tutto cio' per cui il C++ ti sarebbe indispensabile e' totalmente al di la' delle tue possibilita' e del tuo team. Ormai tutti i team professionisti con decenni di esperienza alle spalle si stanno muovendo verso linguaggi ad alto livello, non vedo in che misura tu possa avere piu' esperienza e qualita' di loro e fare scelte diverse.
Capisco che sia dura messa cosi', ma e' vero.
Ne ho visti tanti fare esattamente i discorsi che fai tu durante i colloqui di lavoro che ho tenuto qui: il colloquio e' sempre durato al massimo dieci minuti e il risultato e' stato una riga rossa sul CV. Quindi occhio, se vuoi fare questo lavoro cambia mentalita'... e in fretta.
"Make it nice" non e' una questione di gusti, e' questione di finire il progetto oppure no. Se non hai mai lavorato su una code base da milioni di righe di codice e' difficile apprezzare questo concetto e l'importanza che riveste la manutenzione del codice. Perche' il codice si scrive una volta sola, ma si legge decine e decine di volte.
Si privilegia sempre la leggibilita' del codice alla sua velocita' di esecuzione a meno che non ci siano dati chiari di un profiler, e chiari requisiti, che impongano la seconda. E, ripeto, a te questi requisiti non arriveranno ancora per anni.
Prima di imparare a ottimizzare devi imparare a programmare e gli algoritmi, non so veramente in che lingua dirtelo, e ti parlo da dieci anni di esperienza a fare questo lavoro :)
Ottimizzare in questo caso non c'entra nulla, si è tutti d'accordo sul fatto che il codice debba essere semplice e leggibile.
La questione di gusti è appunto definire la leggibilità e la semplicità.
Per alcuni membri una cosa era semplice e leggibile in un modo, per altri nel modo opposto.
Non c'era alcuna intenzione di ottimizzare, anzi, io spesso ero quello che difendeva l'approccio più lento ma più "high-level".
Purtroppo, avendo tutti la stessa importanza decisionale, questo ci ha portato solo a brutte litigate sul design fine a se stesso.
(Mi sembra che i programmatori siano tutti molto caparbi sulle proprie idee ;) )
Per il resto, ti do pienamente ragione. L'unica cosa in più che ha C++ rispetto agli altri linguaggi è che mi ci trovo bene...
Ormai tutti i team professionisti con decenni di esperienza alle spalle si stanno muovendo verso linguaggi ad alto livello,-
Una mia curiosità: mi pare di aver notato che c'è un'estremizzazione, di cui quello che citi tu è uno dei due aspetti:
ho letto in un'intervista a Tim Sweeny, che sta sviluppando UE4, che nel futuro l'engine bypasserà addirittura DirectX e OpenGL per programmare la GPU direttamente nel suo linguaggio, e saltare così decine di layers di astrazione.
Quindi mi pare che chi ha i soldi, da una parte tenda a astrarre il gameplay e il codice di gioco in alto livello, quando dall'altra ottimizza in maniera assurda, facendo qualsiasi cosa pur di guadagnare in prestazioni.
E vero? :mbe:
PS: non sono un maniaco dell'ottimizzazione, ci tengo a precisarlo :D
La questione di gusti è appunto definire la leggibilità e la semplicità.
Non e' una questione di gusti, ripeto. C'e' una montagna di letteratura in merito.
Purtroppo, avendo tutti la stessa importanza decisionale
Male, si discute un coding standard, uno lo decide, tutti lo seguono. L'alternativa e' il caos e una code base ingestibile.
Per il resto, ti do pienamente ragione. L'unica cosa in più che ha C++ rispetto agli altri linguaggi è che mi ci trovo bene...
Il trovarcisi bene e' l'ultimo dei motivi per scegliere un linguaggio. Non usi un martello per cavare i tappi perche' ti ci trovi bene, usi un cavatappi e se non lo sai usare impari. La capacita' di adattarsi ai tool e' una delle caratteristiche (insieme al saper scrivere codice leggibile e mantenibile) che distingue un programmatore da uno scripter.
Una mia curiosità: mi pare di aver notato che c'è un'estremizzazione, di cui quello che citi tu è uno dei due aspetti:
ho letto in un'intervista a Tim Sweeny, che sta sviluppando UE4, che nel futuro l'engine bypasserà addirittura DirectX e OpenGL per programmare la GPU direttamente nel suo linguaggio, e saltare così decine di layers di astrazione.
Tim Sweeney non scrive una riga di codice da anni e l'engine di GoW non e' esattamente un esempio lampante di engine snello in grado di sfruttare efficientemente le risorse di una macchina ;)
Ha fatto una sparata, per altro del tutto incondivisibile, visto che la tendenza dell'Industry e' l'esatto contrario.
Quindi mi pare che chi ha i soldi, da una parte tenda a astrarre il gameplay e il codice di gioco in alto livello, quando dall'altra ottimizza in maniera assurda, facendo qualsiasi cosa pur di guadagnare in prestazioni.
E vero?
No :)
Ciao..volevo chiedervi una cosa?
Fek ha scritto in poche parole che la produttività di C# è inferiore a quella di JAVA e C++...non metto in dubbio l'esperienza di Fran ma......è cosi veramente?:help:
Non e' una questione di gusti, ripeto. C'e' una montagna di letteratura in merito.
Male, si discute un coding standard, uno lo decide, tutti lo seguono. L'alternativa e' il caos e una code base ingestibile.
Verissimo, ma la fai facile :D
Per lo standard è facile, e ci siamo adeguati bene.
Ma quando si viene alla risoluzione dei problemi, nessuno lavora gratis senza pretendere di dire "ah fare così non mi sta proprio bene", come leggo anche nei topic di Diamonds, e proprio qui si generano i dissidi, senza uno che comanda e zittisce.
Ma se decide uno solo, diventa una questione dei SUOI gusti... dovrà sempre fare una decisione arbitraria prima o poi. E chi dice che questo tale è capace di risolvere il problema meglio degli altri?
In un team "vero" la gerarchia, ma in uno amatoriale no... si finisce sempre a discutere tutto...
Tim Sweeney non scrive una riga di codice da dieci anni e l'engine di GoW non e' esattamente un esempio lampante di engine snello in grado di sfruttare efficientemente le risorse di una macchina ;)
Ha fatto una sparata, per altro del tutto incondivisibile, visto che la tendenza dell'Industry e' l'esatto contrario.
Peccato... anche se in parte la tendenza dell'industry la fa lui, dato che l'UE3 è suo come design... (almeno così dice lui)
This user is ignored
Essere sospeso non vuol dire "iscriviti con un altro utente e continua come se non fosse successo nulla a mandare PM".
Ignore list. E non mi contattare.
Verissimo, ma la fai facile :D
No, la faccio com'e' nella realta' lavorativa dove i team sono composti da decine di persone.
Peccato... anche se in parte la tendenza dell'industry la fa lui, dato che l'UE3 è suo come design... (almeno così dice lui)
Per fortuna non fa lui la tendenza dell'industry ma solo di quelli che hanno la (s)fortuna di lavorare con l'engine che producono ;)
A partire da chi li denuncia perche' e' inusabile...
Essere sospeso non vuol dire "iscriviti con un altro utente e continua come se non fosse successo nulla a mandare PM".
Ignore list. E non mi contattare.
leggi il secondo pvt!poi posta
Ciao..volevo chiedervi una cosa?
Fek ha scritto in poche parole che la produttività di C# è inferiore a quella di JAVA e C++...non metto in dubbio l'esperienza di Fran ma......è cosi veramente?:help:
Beh ha detto che la produttività di Java > C# > C++, se ho capito bene.
E credo proprio che siano parole sante.;)
Beh ha detto che la produttività di Java > C# > C++, se ho capito bene.
E credo proprio che siano parole sante.;)
capito!
No, la faccio com'e' nella realta' lavorativa dove i team sono composti da decine di persone.
Queste decine di persone sono pagate, anche per obbedire ad un capo, il quale ha comprovata esperienza e può decidere per loro.
Invece, nel caso di gente che si incontra su internet per fare un gioco amatoriale, chi decide chi è "il capo"? Non è facile come sembra... tutti credono di avere le idee migliori eh :rolleyes:
banryu79
02-04-2008, 17:16
Ma quando si viene alla risoluzione dei problemi, nessuno lavora gratis senza pretendere di dire "ah fare così non mi sta proprio bene", come leggo anche nei topic di Diamonds, e proprio qui si generano i dissidi, senza uno che comanda e zittisce.
Ma se decide uno solo, diventa una questione dei SUOI gusti... dovrà sempre fare una decisione arbitraria prima o poi. E chi dice che questo tale è capace di risolvere il problema meglio degli altri?
In un team "vero" la gerarchia, ma in uno amatoriale no... si finisce sempre a discutere tutto...
Ci sono alcuni campi/settori in cui la "democrazia" è controproducente ed una sana tirannide è molto più pratica e produttiva (nonchè realistica, imho) :asd:
Ci sono alcuni campi/settori in cui la "democrazia" è controproducente ed una sana tirannide è molto più pratica e produttiva (nonchè realistica, imho) :asd:
Sono d'accordissimo, il problema è proprio trovare programmatori che obbediscano di propria volontà, senza avere nulla in cambio, a chi si dichiara lead...
Non ne ho ancora visti io :D
^TiGeRShArK^
02-04-2008, 17:21
Io semplicemente difendo la possibilità di fare tutto, perchè con C++ puoi focalizzarti sia sul "cosa" sia sul "come", per quanto sia più difficile, mentre in linguaggi come Java il come è quello che ti impone il linguaggio, in molti casi.
Ma anche no.
Intanto, come dicono giustamente tutti, l'ottimizzazione migliore è quella algoritmica.
Poi ottimizzare qualcosa a livello di linguaggio vuol dire rendere meno leggibile e manutenibile il codice.
In java, volendo, potresti anche scrivere pezzi di codice richiamando direttamente una routine scritta in assembly.
Quindi se vuoi puoi avere il controllo totale della macchina.
Però non lo fai praticamente mai, dato che è MOLTO + efficiente scrivere un algoritmo migliore in Java piuttosto che scrivere lo stesso algoritmo in assembly o nel linguaggio che vuoi.
Quindi java ti impone solo una cosa.
Risolevere il problema nel modo migliore a livello algoritmico.
Se sei così cocciuto da voler per forza mettere codice c/c++/assembly per sentirti + figo (dato che nel 99% dei casi questo è l'unico motivo) lo puoi anche fare tramite JNI.
leggi il secondo pvt!poi posta
Chi da sospeso si reiscrive viene punito con il raddoppio della sospensione. Ti avevo detto di stare tranquillo, evidentemente non hai recepito.
Beh ha detto che la produttività di Java > C# > C++, se ho capito bene.
E credo proprio che siano parole sante.;)
Non mi sembra l'abbia detto, e non concordo comunque.
Al limite direi
Java/C# > C++
E sottolineo il limite, non scrivo altro per non scatenare flame.
Non mi sembra l'abbia detto, e non concordo comunque.
Al limite direi
Java/C# > C++
E sottolineo il limite, non scrivo altro per non scatenare flame.
Dalla mia (per la verita' limitata esperienza) in C# e Java, i due linguaggi sono piu' o meno equivalenti in termini di produttivita'. Preferisco C# come linguaggio e ambiente (librerie, runtime CLR), ma Java come tool (Eclipse :D).
m.distrutti
02-04-2008, 19:12
Dalla mia (per la verita' limitata esperienza) in C# e Java, i due linguaggi sono piu' o meno equivalenti in termini di produttivita'. Preferisco C# come linguaggio e ambiente (librerie, runtime CLR), ma Java come tool (Eclipse :D).
scusa l'ignoranza fek ma in questa materia sono ancora giovincello ihih ma vorrei approfittarne per fare una domanda a te,
io ho sempre saputo che Java non potendo sfruttare a pieno l'hardware(in particolar modo dedicato quali console poiche progettato per essere multi piattaforma), affermazione per la quale mi stanno venendo dubbi ora dati i tuoi post e quello di Shark, non potrebbe essere utilizzato per programmare console...immagino sia una affermazione sbagliata ma se cosi fosse come >_<?
PS : anche quello di Shark nel quale dice che si possono eseguire librerie asm, non la sapevo proprio mi direste come solo per curiosita ihih...ora cerco anche in internet cmq :P)
io ho sempre saputo che Java non potendo sfruttare a pieno l'hardware(in particolar modo dedicato quali console poiche progettato per essere multi piattaforma), affermazione per la quale mi stanno venendo dubbi ora dati i tuoi post e quello di Shark, non potrebbe essere utilizzato per programmare console...immagino sia una affermazione sbagliata ma se cosi fosse come >_<?
Java e' un linguaggio che eventualmente puo' essere compilato direttamente in codice macchina per l'esecuzione in una console. Se e' usato per scrivere giochi sui cellulari, non vedo perche' non potrebbe essere usato per scrivere su console (se non per il fatto che non esiste un SDK).
I giochi sono ormai scritti in buona parte in LUA o Python ad esempio.
khelidan1980
02-04-2008, 19:38
PS : anche quello di Shark nel quale dice che si possono eseguire librerie asm, non la sapevo proprio mi direste come solo per curiosita ihih...ora cerco anche in internet cmq :P)
http://en.wikipedia.org/wiki/Java_Native_Interface
Byee
m.distrutti
02-04-2008, 20:37
http://en.wikipedia.org/wiki/Java_Native_Interface
Byee
ah ecco lo stavo giusto cercando, mi era sfuggito il termine JNI dal post di Shark ihih
grazie ^^
ma i giochi di ora in che linguaggio sono scritti?
tipo crysis, call of duty 4 ecc
vedo che qui ci sono molte persone competenti, e volevo approfittarne per chiedere: in che modo viene creato un gioco? tipo il team come si divide, per fare cosa, che programmi utilizzate(a messo che ne usiate) ecc
Vero piacerebbe saperlo anche a me... in effetti ho un'idea molto vaga di come lavorino i "pro" :D
Esagerato! Dagliela almeno qualche possibilità. Diciamo che al 99,9999(periodico)% non ci riuscirà... :O che è matematicamente la stessa cosa :Prrr:
m.distrutti
03-04-2008, 14:27
Vero piacerebbe saperlo anche a me... in effetti ho un'idea molto vaga di come lavorino i "pro" :D
hai avuto opinioni(che per me sono anche convincenti) da ingegnieri di software 3D, di cui uno lavora alla lionhead studios >_<'
non penso venga utilizzato solo un linguaggio per sviluppare questi applicativi
ora ognuno pensa a modo suo, linus torvald afferma che si e' più produttivi programmando in C(omg so gia che nasceranno flame >_<'),
ma la tua ironia non l'ho capita :S:mbe:
hai avuto opinioni(che per me sono anche convincenti) da ingegnieri di software 3D, di cui uno lavora alla lionhead studios >_<'
non penso venga utilizzato solo un linguaggio per sviluppare questi applicativi
ora ognuno pensa a modo suo, linus torvald afferma che si e' più produttivi programmando in C(omg so gia che nasceranno flame >_<'),
ma la tua ironia non l'ho capita :S:mbe:
Mi sono espresso male, io ero interessato alla seconda parte della domanda di -Slash, cioè, oltre all'aspetto linguaggio, un team moderno come organizza il proprio lavoro?
Non credo sia una cosa banale, anzi suppongo abbia la stessa importanza della parte "tecnica"...
m.distrutti
03-04-2008, 15:06
forse anche di piu secondo me uhm
cmq il mio non voleva essere un post aggressivo, non sono il tipo che scatena flame ^^'
EDIT:ma a sto punto le voci autorevoli non potrebbero fare un post da tenere in zona importante con le proprie opinioni? io in ogni forum che vado trovo sempre domande relative al come quando dove si inizia,potrebbe anche aumentare l'utenza del forum, io sono uno di quelli che vorrebbe investire su un master con sbocchi lavorativi in grosse o medie software house, ma non saprei quale anche perche qui a milano non c'e' niente chq io sappia...anzi qui in italia non c'e' niente,di team con voglia vera mai trovato uno >_< :S
cdimauro
03-04-2008, 15:17
che è matematicamente la stessa cosa :Prrr:
http://www.hwupgrade.it/forum/showpost.php?p=21822093&postcount=16 :read: :Prrr: :banned:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.