PDA

View Full Version : E' possibile creare giochi in C?


Ledmauro
16-05-2007, 22:03
Solo per curiositò:è possibile creare dei giochi di ruolo a turni (stile final fantasy) con un 2D bello, con il linguaggio di programmazione C?Bisogna utilizzare le Open GL?Grazie e ciao!

PGI-Bis
16-05-2007, 22:30
Direi di si. Non è necessario usare le OpenGL ma se lo fai hai la possibilità di sfruttare la capacità dell'hardware dedicato di fare certe categorie di calcoli e hai accesso a tutta una serie di funzioni che a rifarle da zero si diventa vecchi.

recoil
16-05-2007, 22:58
se sei un nerd di quelli tremendi (livello larva) puoi anche farlo in assembly :eek:

71104
17-05-2007, 13:38
se sei un nerd di quelli tremendi (livello larva) puoi anche farlo in assembly :eek: questo è un luogo comune! il vero nerd non è un coglione :O :D

yorkeiser
17-05-2007, 17:18
Solo per curiositò:è possibile creare dei giochi di ruolo a turni (stile final fantasy) con un 2D bello, con il linguaggio di programmazione C?Bisogna utilizzare le Open GL?Grazie e ciao!
Confermo, dal mio punto di vista è un'ottima soluzione, soprattutto se considerata in termini di prestazioni. L'unico problemino è che ti perdi i vantaggi degli oggetti del C++, ma rimedi facilmente.

se sei un nerd di quelli tremendi (livello larva) puoi anche farlo in assembly :eek:

:doh: :doh: :doh:

Ledmauro
18-05-2007, 12:33
Chi è sto nerd :D?
Cmq si può fare, non è una cosa impossibile :D?Premettendo che sto iniziando da pochissimo con il C, ma potreste dirmi come si dovrebbe programmare un gioco in C?

PGI-Bis
18-05-2007, 12:48
Be', messa così è una storia lunga. Se ti va puoi prendere Core Techniques And Algorithms in Game Programming. E' un libro :D. Parla di parecchie cose e, nel mucchio, c'è anche la parte relativa a come è organizzato un programma-videogioco. Chi fa che cosa. E come lo fa. E' un libro interessante. Non tratta di OpenGL.

ndakota
18-05-2007, 13:48
Be', messa così è una storia lunga. Se ti va puoi prendere Core Techniques And Algorithms in Game Programming. E' un libro :D. Parla di parecchie cose e, nel mucchio, c'è anche la parte relativa a come è organizzato un programma-videogioco. Chi fa che cosa. E come lo fa. E' un libro interessante. Non tratta di OpenGL.


c'è solo in inglese?

PGI-Bis
18-05-2007, 13:50
Bella domanda. Non lo so. Io ho la versione inglese. Non che lo conosca particolarmente bene, lo faccio solo per bullarmi di saperlo :D.

yorkeiser
18-05-2007, 14:58
Ti consiglio vivamente di prendere prima una buona dimestichezza col c, che non è di certo il linguaggio più immediato dell'universo. Cerca soprattutto di comprendere il flusso delle istruzioni, la chiamata a funzioni esterne e lo scope delle variabili. Quindi puoi inziare a vedere come funzionano le openGL. Per qualche esempio di quello che puoi fare, puoi iniziare da qui :
http://nehe.gamedev.net/

A sinistra, sotto "openGL tutorials", trovi diverse lezioni di difficoltà crescente e col codice commentato

PGI-Bis
18-05-2007, 15:12
[Io penso che] se togli il preprocessore C sia un linguaggio meravigliosamente semplice, non solo per le sue poche regole ma anche per la linearità della struttura dei suoi sorgenti. Poi uno può prenderlo e farci delle librerie da ringraziarlo a bastonate ma questo varrebbe anche per il linguaggio degli elfi.

yorkeiser
18-05-2007, 15:43
[Io penso che] se togli il preprocessore C sia un linguaggio meravigliosamente semplice, non solo per le sue poche regole ma anche per la linearità della struttura dei suoi sorgenti. Poi uno può prenderlo e farci delle librerie da ringraziarlo a bastonate ma questo varrebbe anche per il linguaggio degli elfi.

Sono totalmente d'accordo con te, come ho sostenuto più volte anche su questo forum; sento però anche il parere di chi viene da linguaggi di più alto livello e l'approccio col c non è per loro dei più semplici, specie quando si comincia a parlare di puntatori.

PGI-Bis
18-05-2007, 16:28
Non mi fraintedere. Apprezzo C dal punto di vista estetico ma non consiglierei a nessun essere umano di usarlo. Il suo essere semplice deriva, a mio avviso, dalla stretta aderenza alla prospettiva del calcolatore. I fatti sono sequenze parzialmente ordinate di istruzioni elementari che manipolano valori in memoria.

E' un punto di vista preciso e determinato. Non si può sbagliare: vuoi disegnare una sfera in tre d? Una sequenza parzialmente ordinata di istruzioni elementari... Vuoi scrivere un file? Una sequenza parzialmente ordinata...

L'unico intoppo sta nel fatto che gli esseri umani non rappresentano la realtà come una sequenza parzialmente blabla.

Io non credo che sia difficile fare programmi in C. Io credo che sia difficile osservare quello che si vuole realizzare dal punto di vista della macchina. Perchè la macchina non è in grado di manipolare delle relazioni mentre un essere umano con un kilo e rotti di cervello e un gigabit di memoria non può far altro che correlare.

Problema che i linguaggi di alto livello NON risolvono. Se ne parlò una volta sul forum. Ok, "io ne parlò una volta sul forum" :D.

Da un lato c'è la programmazione funzionale alla Lisp, che va bene se ti chiami Giovanni Lambda.

Dall'altro la programmazione orientata agli oggetti. Che soffre di un enorme e inevitabile peccato originale. Nasce quando la psicologia cognitiva riteneva certo che l'uomo rappresentasse i concetti come classi, definite come insiemi di proprietà caratteristiche essenziali. Teoria classica, arrivava dritta dritta da Aristotele.

Oggi vai da un cognitivista e gli chiedi: com'è che l'uomo rappresenta i concetti? E lui ti dirà: non sappiamo esattamente come, ma siamo assolutamente certi che NON usi le classi.

Fu la fuzzy logic a soppiantare la teoria classica. Sbagliata anche quella, a quanto pare. C'è andata bene, ci hanno risparmiato la Fuzzy Oriented Programming. Phew.

Comunque sia, io penso che la storia ci spieghi perchè l'orientamento agli oggetti, questa mitologica prospettiva umana alla rappresentazione dei sistemi, sia tanto difficile da digerire. Perchè è sbagliata. Pretendiamo che sia evidente ma, in realtà, essa è evidente tanto quanto può esserla l'architettura dei calcolatori. Con il notevole inghippo che mentre l'architettura dei calcolatori è oggettivamente determinata, l'orientamento agli oggetti è errato in principio e piagato da ulteriori errori per via dell'interpretazione soggettiva che se ne da.

Con buona pace dello stramaledettissimo "Object Oriented Design" di Gamma e soci :D.

Slayer86
18-05-2007, 16:35
Sono totalmente d'accordo con te, come ho sostenuto più volte anche su questo forum; sento però anche il parere di chi viene da linguaggi di più alto livello e l'approccio col c non è per loro dei più semplici, specie quando si comincia a parlare di puntatori.

Io ci sono passato da poco infatti all'uni ci hanno insegnato java fin dal primo anno poi al secondo arrivati al corso di sistemi operativi ci hanno insegnato il c bhe è stata veramente dura rinunciare agli oggetti...
:)

shinya
18-05-2007, 16:39
Non mi fraintedere. Apprezzo C dal punto di vista estetico ma non consiglierei a nessun essere umano di usarlo. Il suo essere semplice deriva, a mio avviso, dalla stretta aderenza alla prospettiva del calcolatore. I fatti sono sequenze parzialmente ordinate di istruzioni elementari che manipolano valori in memoria.

E' un punto di vista preciso e determinato. Non si può sbagliare: vuoi disegnare una sfera in tre d? Una sequenza parzialmente ordinata di istruzioni elementari... Vuoi scrivere un file? Una sequenza parzialmente ordinata...

L'unico intoppo sta nel fatto che gli esseri umani non rappresentano la realtà come una sequenza parzialmente blabla.

Io non credo che sia difficile fare programmi in C. Io credo che sia difficile osservare quello che si vuole realizzare dal punto di vista della macchina. Perchè la macchina non è in grado di manipolare delle relazioni mentre un essere umano con un kilo e rotti di cervello e un gigabit di memoria non può far altro che correlare.

Problema che i linguaggi di alto livello NON risolvono. Se ne parlò una volta sul forum. Ok, "io ne parlò una volta sul forum" :D.

Da un lato c'è la programmazione funzionale alla Lisp, che va bene se ti chiami Giovanni Lambda.

Dall'altro la programmazione orientata agli oggetti. Che soffre di un enorme e inevitabile peccato originale. Nasce quando la psicologia cognitiva riteneva certo che l'uomo rappresentasse i concetti come classi, definite come insiemi di proprietà caratteristiche essenziali. Teoria classica, arrivava dritta dritta da Aristotele.

Oggi vai da un cognitivista e gli chiedi: com'è che l'uomo rappresenta i concetti? E lui ti dirà: non sappiamo esattamente come, ma siamo assolutamente certi che NON usi le classi.

Fu la fuzzy logic a soppiantare la teoria classica. Sbagliata anche quella, a quanto pare. C'è andata bene, ci hanno risparmiato la Fuzzy Oriented Programming. Phew.

Comunque sia, io penso che la storia ci spieghi perchè l'orientamento agli oggetti, questa mitologica prospettiva umana alla rappresentazione dei sistemi, sia tanto difficile da digerire. Perchè è sbagliata. Pretendiamo che sia evidente ma, in realtà, essa è evidente tanto quanto può esserla l'architettura dei calcolatori. Con il notevole inghippo che mentre l'architettura dei calcolatori è oggettivamente determinata, l'orientamento agli oggetti è errato in principio e piagato da ulteriori errori per via dell'interpretazione soggettiva che se ne da.

Con buona pace dello stramaledettissimo "Object Oriented Design" di Gamma e soci :D.

Bel post! Mi è piaciuto e mi ha solleticato parecchio :) Io sto cercando di addentrarmi in haskell nei pochi momenti liberi ed in effetti, non facendo Lamba di cognome, è un pò come digerire il porfido. Però poi cominci a sentirti rinascere ad ogni pezzetto che riesci a buttar giù.

La OOP non mi ha mai entusiasmato, però mi mancava la storia del cognitivista... :)

yorkeiser
18-05-2007, 16:46
Al di là delle discussioni sui metodi di modellamento e rappresentazione della realtà, sulle quali si potrebbe andare avanti per un centinaio di secoli, è indubbio che se vieni (come me, che ormai son vecchiotto) dal bassissimo livello (asm), ti viene naturale pensare i programmi in termini di linguaggio c. Quando ho appreso il primo linguaggio ad oggetti (Java), devo dire che all'inizio mi son trovato molto spiazzato e, soprattutto agli inizi, lo usavo come se stessi ancora su un linguaggio di tipo procedurale... è dura perdere le proprie abitudini :) Detto questo, mi capita spesso però di conoscere persone che sono partite da linguaggi ad oggetti e di più alto livello (java, vb) che si trovano ovviamente in nettissima difficoltà non tanto nel comprendere il modello logico (invero più semplice rispetto al mondo ad oggetti), quanto per le "parti" del c che dal mio punto di vista lo rendono superiore, ovvero quell'avvicinarsi e quasi amalgamarsi con le istruzioni di basso livello che verranno compilate... In ogni caso, la mia riflessione è che è sempre dura perdere abitudini radicate, e nell'informatica ciò è probabilmente vero più che in altri campi; questo sia se passi dal basso verso l'alto o viceversa, sia se cambi il modello logico che utilizzi

marco.r
19-05-2007, 00:59
Io non credo che sia difficile fare programmi in C. Io credo che sia difficile osservare quello che si vuole realizzare dal punto di vista della macchina. Perchè la macchina non è in grado di manipolare delle relazioni mentre un essere umano con un kilo e rotti di cervello e un gigabit di memoria non può far altro che correlare.

Il problema e' che programmare in C include il ragionare dal punto di vista della macchina, ed essendo quest'ultima attivita' difficile, lo e' anche la prima.


Problema che i linguaggi di alto livello NON risolvono. Se ne parlò una volta sul forum. Ok, "io ne parlò una volta sul forum" :D.

Direi che se ne puo' discutere, partendo soprattutto dalla definizione di linguaggi di alto livello (Java e C# non vi rientrano, secondo me ) :p
In ogni caso, appurato che programmare e' difficile, e che nessun linguaggio riesce nell'intento di rendere tale attivita' banale, ci sono un sacco di cose che si possono fare per rendere piu' agevole la vita del programmatore, in particolare negli aspetti piu' tediosi , come la gestione della memoria, parallelismo, side-effects... cose in cui C fallisce abbastanza miseramente, e altri linguaggi come Java si salvano appena.

Da un lato c'è la programmazione funzionale alla Lisp, che va bene se ti chiami Giovanni Lambda.

Uhm, ma la programmazione in lisp non e' rappresentativa della programmazione funzionale quanto lo e' quella in VB della programmazione ad oggetti :D. Lisp e' multiparadigma e si puo' tranquillamente usare uno stile funzionale, ad oggetti o procedurale (con tanto di LABEL e GOTO :D ), e in ogni caso si tratta di un linguaggio atipico.
Considero piu' rappresentativi della programmazione funzionale linguaggi della famiglia ML (SML, Ocaml) oppure Haskell e, se vogliamo, Scheme.


Dall'altro la programmazione orientata agli oggetti.
<megacut>

Abbastamza d'accordo su questo, ma ora ho sonno e rimando le osservazioni ad un altro giorno :p

PGI-Bis
19-05-2007, 11:41
Lisp è funzionale perchè supporta la rappresentazione di un programma come una funzione matematica che stabilisce una relazione tra l'input e l'output. Tanti linguaggi lo consentono (C incluso) ma scelgo Lisp per ragioni storiche (http://www-formal.stanford.edu/jmc/recursive.pdf) e di diffusione.

Ci sono sicuramente esempi più tipici di programmazione funzionale ma io sono restio ad citare lingue come Miranda, note a tre persone, usate da due e gradite ad una (che mente).

Erroneamente ho usato il termine alto livello: soffro di personalità digitale multipla, a volte le mie dita si animano e scrivono un po' quello che vogliono.

Avrei dovuto dire "linguaggi più recenti".

Considero "di alto livello" un linguaggio la cui definizione sia indipendente dall'architettura di un calcolatore. Significa che, per me, C è sicuramente di alto livello.