Programmazione del gioco: C # o C ++? [chiuso]


15

Ho deciso che cosa voglio davvero è fare la programmazione del gioco. Quindi la domanda è, come un 18enne che vuole imparare la programmazione autodidatta, qual è il linguaggio di programmazione più adatto tra C # e C ++? (Dovrei affermare che non mi interessa Unix perché credo che Windows sarà ancora il sistema operativo più utilizzato)

Conosco le basi di C ++, ma nessuna su C #. So che C ++ ha più guide tutorial, dll e cose del genere, mentre C # no, ma è molto più facile da imparare e da usare per una singola persona per sviluppare un programma, ma ho letto anche se il programma è offuscato è facile ottenerne la fonte.

Beh, prima voglio concentrarmi molto sulla base, devo dire che ho una preferenza per il C ++ solo perché mi sembra più adatto a me, ma devo considerare che lavoro da solo. Quindi, anche se mi piace, potrebbe non essere la cosa migliore da fare.

Non sono davvero sicuro di quale scegliere, ho letto molti thread su vari siti Web e sembra che C # stia diventando più popolare di C ++. Ma sì, detto questo, ho anche specificato che voglio fare la programmazione del gioco. Quindi ho bisogno di conoscere alcuni punti migliori del semplice "C # è più facile a causa della gestione della memoria .net mentre C ++ non lo è" perché non riuscivo a trovarlo.


16
Potresti anche trovare utile gamedev.stackexchange.com .
Adam Lear


2
Vedi anche qui: gamedev.net
Patrick Hughes,

Risposte:


21

Imparo il C ++ programmando un gioco. È stata un'esperienza molto piacevole. Ti incoraggio vivamente a fare lo stesso!

Comunque ora sono un programmatore di C #, so che sarei stato molto più produttivo se C # fosse disponibile al momento.

C # è la scelta perfetta per l'apprendimento dello sviluppo del gioco. Ha tutto il necessario per iniziare dai quadri ai libri e la lingua è sorprendente.

Ho visto dozzine di libri scritti specificamente su C # Game Programming e Microsoft sta facendo molti sforzi per migliorare i suoi framework, inclusi DirectX e XNA .

AGGIORNAMENTO : potresti essere interessato anche a questo . È un recente post sul blog di Miguel de Icaza .

AGGIORNAMENTO 2013-02-22 Microsoft prevede di interrompere il supporto XNA .


1
Quindi forse dovrei iniziare a aggirare SDL o qualcosa del genere con C ++ e poi passare a C # in futuro .. sembra proprio che C ++ venga sostituito da C # tranne per la creazione del motore .. Perché è così difficile fare una scelta !
Chronix

2
Comprendi che C # è eccellente per sperimentare lo sviluppo del gioco, non per la portabilità su alcune piattaforme di gioco o altre preoccupazioni. Lo scenario migliore è quando conosci abbastanza sviluppatori di giochi che usano entrambi e scegli C ++ o C # a seconda della piattaforma di destinazione.
Klaim

A parte questo, +1 ovviamente. Personalmente preferisco ancora il C ++, ma solo perché la maggior parte del mio progetto richiede un accesso di basso livello per alcuni motivi specifici del progetto.
Klaim

12

La maggior parte delle società di giochi usano il C ++, magari con script Python o altre lingue in esecuzione in background. Moreso perché i collegamenti per OpenGL e DirectX sono rivolti a C ++ (anche se sono abbastanza sicuro che puoi fare altrettanto cose su Direct3d in C #) ma ya per la programmazione di giochi, C ++ è il linguaggio PRINCIPALE.

Ti darò un giusto avvertimento (e non lasciare che questo ti scoraggi), ma la grafica 3D può diventare estremamente complicata. Il nuovo Direct3D lo ha reso un po 'più semplice di quanto non fosse in passato, ma è ancora un bel po' di matematica (che può diventare piuttosto confusa) e solo le librerie stesse possono creare confusione.

Comincerei con qualcosa di molto semplice prima. per cose 2d SDL (Simple Directmedia Layer) è molto più facile da usare (per qualcosa come un gioco top-down) una volta che si entra in 3D, PERSONALMENTE penso che OpenGL sia più facile da imparare (ma questa è tutta opinione). MS ha alcuni tutorial / esempi nella documentazione di DirectX SDK, quindi vale la pena dare un'occhiata. I tutorial di Nehe, anche se un po 'obsoleti, sono ancora belli.

ma per rispondere alla tua domanda, in genere sono tutti eseguiti in C ++.


1
SlimDX fornisce un wrapper DirectX per .NET
Danny Varod

1
"per la programmazione di giochi, C ++ è il linguaggio PRINCIPALE." Non sarei d'accordo con questa affermazione. Il mercato dei giochi è molto più ampio rispetto ai giochi per console AAA: è un segmento di mercato molto più piccolo di quanto le persone tendano a realizzare. Direi che molti più giochi sono scritti in linguaggi come ActionScript che in C ++
MattDavey l'

8

Per prima cosa vorrai impostare alcune priorità. Vuoi solo creare un gioco prima di tutto, quindi conoscere gli aspetti più avanzati della programmazione in seguito, o viceversa. Entrambi gli approcci hanno i loro pro e contro, ma sono entrambi legittimi secondo me.

Se vuoi iniziare a creare giochi, ti consiglio di imparare C #. Se conosci già le basi di C ++, non dovresti avere problemi a raccogliere C #. Fare di C # il tuo strumento ha dei vantaggi. È un linguaggio facile da imparare (rispetto al C ++) ed è un "linguaggio gestito", il che significa che esegue automaticamente la memoria idraulica per te (qualcosa che molti principianti del C ++, e anche i non principianti, hanno problemi con ). Ti dà anche accesso a Microsoft XNA Framework che fa ancora di più del noioso impianto idraulico per te. Ciò ti lascia a concentrarti su cose come il ciclo di gioco e il design, senza doversi preoccupare (troppo) di farlo funzionare. È vero, tutto questo impianto idraulico ha il suo sovraccarico, il che significa che probabilmente non realizzerai giochi 3D di livello industriale, ma stai solo entrando nella programmazione del gioco, quindi dubito che farai il prossimo Halo nei tuoi primi tentativi. :)

Ecco un post mortem del ragazzo che ha sviluppato un gioco XNA di successo (Weapon of Choice). Descrive in dettaglio come l'utilizzo di C # / XNA gli abbia consentito di risparmiare tempo di sviluppo anziché dover usare C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Detto questo, dovresti investire del tempo almeno nel sapere come funzionano le cose in background. Come lo farebbe un programmatore C ++. Imparare a creare un gioco in C ++ potrebbe rendere più facile entrare a far parte di un altro team di sviluppo del gioco (poiché la maggior parte di essi lavora in C ++), se ciò che si desidera è prendere piede nel settore dei giochi. Ma anche se alla fine non usi mai il C ++, sapere come funzionano gli interni può solo renderti un programmatore migliore, indipendentemente dalla lingua che usi.


Sono completamente d'accordo. I problemi di gestione della memoria che affronti con c ++ sono il problema maggiore. Non c'è stato un gioco su cui ho lavorato che non abbia avuto problemi di memoria e ho sentito la stessa cosa detta dai veterani di 20 anni che hanno realizzato dozzine di giochi. Anche RAII e i puntatori intelligenti non risolvono il problema, poiché si verificano problemi con puntatori che puntano a vecchi dati e problemi di proprietà. Imparare a trovarli e risolverli ti renderà un programmatore molto migliore, ma potrebbe avere problemi per mesi la prima volta che si verifica un sovraccarico del buffer e il crash del gioco in una parte non correlata.
Dominique McDonnell,

Vorrei aggiungere a questa domanda che C # ha anche XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) a suo vantaggio. XNA è molto più facile da rilevare rispetto a DirectX non gestito.
Vitor Py,

1
@DominicMcDonnell: puoi avere problemi di memoria mantenendo riferimenti a cose nascoste da qualche parte in runtime gestiti come C # e quando colpisce, avrai molto più tempo a cercarlo perché non sarai abituato a pensare alle vite delle risorse.
Jan Hudec,

@JanHudec, non lo sapevo. Suppongo che potresti dire che far funzionare le cose è più semplice e facile, ma i got-yas sono molto più difficili da rintracciare e in qualche modo le abitudini che la lingua ti consente di costruire si intromettono.
Dominique McDonnell,

3

Promuovo vivamente il C ++ per lo sviluppo di giochi. Ci sono alcuni ostacoli extra, con vari pro e contro, uno dei migliori motivi è la portabilità.

Con C # puoi sviluppare ancora un po 'di più in questi giorni, e ci sono alcuni motori incredibilmente fantastici là fuori programmati di sicuro. Entrambi questi sono buoni linguaggi per la programmazione di giochi, se stai prendendo di mira solo piattaforme Windows / Xbox, avrai particolarmente motivo di inclinarti verso C #.

La lingua che penso di più che dovresti imparare sarebbe OpenCL o CUDA, un po 'di linguaggio GPGPU. Personalmente preferisco OpenCL poiché sembra probabile che sopravviva e cresca ulteriormente, è fondamentalmente solo in stile C. C'è OpenTK che è un buon wrapper per C ++ o C #.

Mi sono sempre chiesto come sarebbe la programmazione del gioco Ruby con l'accelerazione hardware ...


3

La programmazione di gioco grezza ti lascerà piuttosto freddo. Lavorare con chiamate grafiche di basso livello in C # o C ++ è un incubo minore e non si vuole davvero ricostruire la ruota del rendering degli sprite 2D e tanto meno dei modelli 3D. Dato che sei da solo e vuoi imparare la programmazione, la cosa migliore da fare è trovare un framework che possa farti avanzare un po '.

Dato che hai una certa familiarità con il linguaggio basato su C, il mio suggerimento sarebbe di dare un'occhiata a Unity 3D . Non solo sta vivendo un serio assorbimento nell'adozione dai negozi di sviluppatori di giochi commerciali, e ha alcune opzioni di piattaforma interessanti (tra cui PC, Android, iPhone e runtime Web), ma ha anche una versione gratuita che è molto facile da usare e molti tutorial per mostrarti come passare dall'ideazione all'implementazione. Soprattutto (IMO) uno dei linguaggi di scripting supportati è C #.


2

Ho fatto un gioco per una classe due anni fa (all'epoca avevo anche 18 anni) e ce l'abbiamo fatta in C #. Mentre osservo che i grandi programmi C # di solito funzionano più lentamente dei grandi programmi C ++, C # richiede anche molto meno lavoro da parte tua. La gestione della memoria viene eseguita automaticamente e, nell'ambito di un primo gioco, è abbastanza veloce. (Il nostro gioco è un vero multiplayer 2D multiplayer in stile Starcraft simile a Starcraft.)

Farei il root per C # in quanto dovrebbe essere più facile da gestire. Tuttavia, se vuoi diventare uno sviluppatore di giochi professionale, ricorda che funziona solo su piattaforme Microsoft. (Tuttavia, C # può essere un buon trampolino di lancio verso C ++, e se dovessi riapprendere le due lingue, proverei prima a imparare C #.)


C # funziona anche su Mono (multipiattaforma), tuttavia parti del framework (ad es. WPF) non sono supportate.
Danny Varod,

1
@Danny Varod, non mi piace raccomandare Mono per lo sviluppo di giochi multipiattaforma perché fino ad ora sono sempre stati un po 'in ritardo su Microsoft in termini di funzionalità e non mi aspetto che cambi. Inoltre, uno dei maggiori vantaggi dello sviluppo con C # per piattaforme Microsoft è XNA, e fino a quando Mono non fornirà anche DirectX, non funzionerà su piattaforme non MS.
zneak,

1
Mono dovrà fornire un wrapper OpenGL compatibile, poiché, come hai affermato, DirectX è di Microsoft. Il mio punto era solo che C # può essere parzialmente trasferito.
Danny Varod

2
Tra Unity, monogame (opensource XNA per mono) e OpenTK ci sono molte buone librerie di giochi per mono.
stonemetal

1

Voterei C ++ - in primo luogo perché può essere cross-platform (a seconda di come si scrive il codice, ovviamente) e anche perché penso che ti dà più conoscenza sulla gestione della memoria - perché è necessario per la cura su di esso. Ma dal momento che non ti importa di Linux / Unix, se vuoi lasciare fuori la complessità della memoria per il momento, perché non concentrarti su C # in questo momento e quindi imparare anche C ++?


Grazie per aver risposto alla tua prima domanda su Stack Exchange Programmers.
Sviluppatore

C ++ è ancora il linguaggio più portatile fino ad oggi. Soprattutto le piattaforme mobili alcune hanno Java, alcune hanno C #, ma la maggior parte non ha entrambe. Ma tutti devono avere C ++; le macchine virtuali devono essere implementate in qualcosa che si compila in codice macchina nativo e che qualcosa è attualmente sempre C ++.
Jan Hudec,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.