Pemrograman game: C # atau C ++? [Tutup]

15

Saya telah memutuskan apa yang sebenarnya saya inginkan adalah melakukan pemrograman game. Jadi pertanyaannya adalah, ketika berusia 18 tahun yang ingin belajar pemrograman otodidak, bahasa pemrograman apa yang paling cocok antara C # dan C ++? (Saya harus menyatakan bahwa saya tidak peduli tentang Unix karena saya percaya windows akan tetap menjadi OS yang paling banyak digunakan)

Saya tahu dasar-dasar C ++, tetapi tidak ada tentang C #. Saya tahu bahwa C ++ memiliki lebih banyak panduan tutorial, dll dan hal-hal seperti itu, sementara C # tidak, tetapi jauh lebih mudah untuk belajar dan menggunakan satu orang untuk mengembangkan suatu program, tetapi saya telah membaca bahkan jika program tersebut dikaburkan mudah untuk mendapatkan sumbernya.

Yah, saya agak ingin fokus pada dasar banyak dulu, saya harus mengatakan bahwa saya memiliki preferensi untuk C ++ hanya karena rasanya lebih cocok untuk saya, tetapi saya harus mempertimbangkan bahwa saya bekerja sendiri. Jadi, bahkan jika saya menyukainya, itu mungkin bukan hal terbaik untuk dilakukan.

Saya benar-benar tidak yakin yang mana untuk pergi, saya telah membaca banyak utas di berbagai situs web dan sepertinya C # menjadi lebih populer daripada C ++. Tapi ya, itu katanya, saya juga menentukan saya ingin melakukan pemrograman game. Jadi saya perlu tahu beberapa poin yang lebih baik daripada hanya "C # lebih mudah karena penanganan memori bersih. Sedangkan C + + tidak" karena saya tidak bisa hanya menemukannya.

Matěj Zábský
sumber
16
Anda juga mungkin menemukan gamedev.stackexchange.com bermanfaat.
Adam Lear
1
C # adalah apa yang saya rekomendasikan create.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little
2
Lihat juga di sini: gamedev.net
Patrick Hughes

Jawaban:

21

Saya belajar C ++ dengan memprogram permainan. Itu adalah pengalaman yang sangat menyenangkan. Saya sangat mendorong Anda untuk melakukan hal yang sama!

Namun sekarang saya seorang programmer C #, saya tahu saya akan jauh lebih produktif jika C # tersedia pada saat itu.

C # adalah pilihan tepat untuk mempelajari pengembangan game. Ini memiliki semua yang Anda butuhkan untuk mulai dari kerangka kerja hingga buku dan bahasanya menakjubkan.

Saya telah melihat lusinan buku yang ditulis secara khusus tentang C # Game Programming dan Microsoft berupaya keras untuk memperbaiki kerangka kerjanya termasuk DirectX dan XNA .

UPDATE : Anda mungkin tertarik dengan ini juga. Ini adalah posting blog terbaru dari Miguel de Icaza .

UPDATE 2013-02-22 Microsoft berencana untuk menghentikan dukungan XNA .

pengguna2567
sumber
1
Jadi mungkin saya harus mulai berkeliling SDL atau sesuatu seperti itu dengan C ++ kemudian beralih ke C # di masa depan .. sepertinya C ++ agak digantikan oleh C # kecuali untuk pembuatan mesin .. Mengapa begitu sulit untuk membuat pilihan !
Chronix
2
Memahami bahwa C # sangat baik untuk mengalami pengembangan game, bukan untuk portabilitas pada beberapa platform game atau masalah lainnya. Skenario kasus terbaik adalah ketika Anda tahu cukup banyak game dev menggunakan keduanya dan Anda memilih C ++ atau C # tergantung pada platform target.
Klaim
Selain itu, +1 jelas. Secara pribadi saya masih lebih suka C ++ tapi itu hanya karena sebagian besar proyek saya memerlukan beberapa akses tingkat rendah untuk beberapa alasan spesifik proyek.
Klaim
12

Sebagian besar perusahaan game menggunakan C ++, mungkin dengan skrip python atau bahasa lain yang berjalan di latar belakang. Lebih dari itu karena binding untuk OpenGL dan DirectX ditujukan untuk C ++ (meskipun saya cukup yakin Anda dapat melakukan banyak hal Direct3d dalam C #) tapi ya untuk pemrograman game, C ++ adalah bahasa UTAMA.

Saya akan memberi Anda peringatan yang adil (dan jangan biarkan ini menghalangi Anda) tetapi grafik 3D bisa menjadi sangat rumit. Direct3D yang baru telah membuatnya menjadi sedikit lebih mudah dari biasanya, tetapi ini masih sedikit matematika (yang bisa sangat membingungkan) dan hanya perpustakaan itu sendiri yang dapat membingungkan.

Saya akan mulai dengan sesuatu yang sangat sederhana dulu. untuk hal-hal 2d SDL (Simple Directmedia Layer) jauh lebih mudah digunakan (untuk sesuatu seperti permainan top-down) setelah Anda masuk ke 3D Saya secara pribadi berpikir OpenGL lebih mudah untuk dipelajari (tapi ini semua pendapat). MS memiliki beberapa Tutorial / Sampel bagus dalam dokumentasi DirectX SDK mereka, jadi ada baiknya Anda melihatnya. Tutorial Nehe meskipun agak ketinggalan jaman masih bagus.

tapi ya untuk menjawab pertanyaan Anda, semuanya dilakukan dalam C ++ biasanya.

pengguna6791
sumber
1
SlimDX menyediakan pembungkus DirectX untuk .NET
Danny Varod
1
"untuk pemrograman game, C ++ adalah bahasa UTAMA." Saya tidak setuju dengan pernyataan itu. Pasar game jauh lebih luas dari sekadar game konsol AAA - itu adalah segmen pasar yang jauh lebih kecil daripada yang orang sadari. Saya akan mengatakan lebih banyak game yang ditulis dalam bahasa seperti ActionScript daripada C ++
MattDavey
8

Pertama, Anda ingin menetapkan beberapa prioritas. Apakah Anda hanya ingin membuat game terlebih dahulu kemudian belajar tentang aspek pemrograman yang lebih maju nanti, atau sebaliknya. Kedua pendekatan memiliki pro dan kontra, tetapi keduanya sah menurut saya.

Jika Anda ingin mulai membuat game maka saya akan merekomendasikan belajar C #. Jika Anda sudah mengetahui dasar-dasar C ++ maka Anda seharusnya tidak mengalami kesulitan sama sekali mengambil C #. Membuat C # alat Anda memiliki kelebihan. Ini mudah untuk belajar bahasa (dibandingkan dengan C ++) dan merupakan "bahasa yang dikelola", yang berarti bahwa secara otomatis melakukan pemipaan memori untuk Anda (sesuatu yang banyak pemula C ++, dan bahkan yang tidak begitu pemula, memiliki masalah dengan ). Ini juga memberi Anda akses ke Microsoft XNA Framework yang melakukan lebih banyak pekerjaan membosankan untuk Anda. Itu membuat Anda berkonsentrasi pada hal-hal seperti siklus permainan dan desain, tanpa harus khawatir (terlalu banyak) untuk membuatnya bekerja. Benar, semua insta-plumbing ini memiliki overhead, yang berarti Anda mungkin tidak akan membuat game 3D kelas industri, tetapi Anda baru saja masuk ke pemrograman game, jadi saya ragu Anda akan membuat Halo berikutnya pada beberapa percobaan pertama Anda. :)

Inilah post mortem oleh orang yang mengembangkan game XNA yang sukses (Weapon of Choice). Dia merinci bagaimana menggunakan C # / XNA telah menghemat waktu pengembangannya daripada harus menggunakan C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Yang sedang berkata, Anda harus menginvestasikan waktu setidaknya untuk mengetahui bagaimana hal-hal bekerja di latar belakang. Bagaimana seorang programmer C ++ akan melakukannya. Belajar membuat game di C ++ mungkin membuatnya lebih mudah untuk bergabung dengan tim pengembangan game lain (karena kebanyakan dari mereka bekerja di C ++), jika yang Anda inginkan adalah mendapatkan pijakan di industri game. Tetapi bahkan jika Anda akhirnya tidak pernah menggunakan C ++, mengetahui cara kerja internal hanya dapat membuat Anda menjadi programmer yang lebih baik, apa pun bahasa yang Anda gunakan.

Sistem Down
sumber
Aku sangat setuju. Masalah manajemen memori yang dihadapi Anda dengan c ++ adalah masalah terbesar. Belum ada permainan yang saya kerjakan yang tidak memiliki masalah memori, dan saya telah mendengar hal yang sama yang dikatakan oleh veteran 20 tahun yang telah membuat puluhan game. Bahkan RAII dan smart pointer tidak menyelesaikan masalah, karena Anda mendapatkan masalah dengan pointer yang menunjuk ke data lama dan masalah dengan kepemilikan. Mempelajari cara menemukan dan memperbaikinya akan membuat Anda menjadi programmer yang jauh lebih baik, tetapi itu bisa membuat Anda bingung selama berbulan-bulan saat pertama kali buffer overrun dan game crash di bagian yang tidak terkait.
Dominique McDonnell
Saya ingin menambahkan pertanyaan ini bahwa C # juga memiliki XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) untuk keuntungannya. XNA jauh lebih mudah diambil daripada DirectX yang tidak dikelola.
Vitor Py
1
@DominicMcDonnell: Anda dapat memiliki masalah memori dengan menyimpan referensi ke hal-hal yang disembunyikan di suatu tempat di runtimes terkelola seperti C # juga dan ketika itu hits, Anda akan memiliki waktu yang jauh lebih sulit memburunya karena Anda tidak akan terbiasa memikirkan masa pakai sumber daya.
Jan Hudec
@ JanHudec, saya tidak tahu itu. Saya kira Anda bisa mengatakan bahwa membuat sesuatu berfungsi lebih mudah dan lebih mudah, tetapi yang didapat-yas jauh lebih sulit untuk dilacak dan dalam beberapa hal kebiasaan yang bahasa yang Anda gunakan untuk membangun menghalangi.
Dominique McDonnell
3

Saya sangat mempromosikan C ++ untuk pengembangan game. Ada beberapa kendala tambahan, dengan berbagai pro dan kontra, salah satu alasan terbaik adalah portabilitas.

Dengan C # Anda dapat mengembangkan untuk sedikit lebih banyak hari ini, dan ada beberapa mesin luar biasa yang diprogram di dalamnya pasti. Keduanya adalah bahasa yang baik untuk pemrograman game, jika Anda hanya menargetkan platform Windows / Xbox maka Anda akan memiliki alasan untuk condong ke C #.

Bahasa yang saya pikir paling Anda harus pelajari adalah OpenCL atau CUDA, beberapa bahasa GPGPU. Secara pribadi saya lebih suka OpenCL karena sepertinya akan bertahan lebih lama dan tumbuh lebih jauh, pada dasarnya hanya gaya C. Ada OpenTK yang merupakan pembungkus yang bagus untuk C ++ atau C #.

Saya selalu bertanya-tanya seperti apa pemrograman game Ruby dengan akselerasi perangkat keras ...

Garet Claborn
sumber
3

Pemrograman game mentah akan membuat Anda cukup dingin. Bekerja dengan panggilan grafis tingkat rendah di C # atau C ++ adalah mimpi buruk kecil dan Anda benar-benar tidak ingin membangun kembali roda rendering sprite 2D apalagi model 3D. Karena Anda sendirian dan ingin belajar pemrograman, taruhan terbaik Anda adalah menemukan kerangka kerja yang dapat sedikit mengedepankan Anda.

Karena Anda memiliki keakraban dengan bahasa berbasis C, saran saya adalah untuk memberikan tampilan Unity 3D . Tidak hanya mengalami adopsi serius dalam adopsi dari toko pengembang game komersial, dan memiliki beberapa opsi platform yang menarik (termasuk PC, android, iPhone, dan runtime web), tetapi juga memiliki versi gratis yang sangat mudah digunakan dan banyak tutorial untuk menunjukkan kepada Anda cara beralih dari konsep ke implementasi. Terbaik dari semua (IMO) salah satu bahasa skrip yang didukung adalah C #.

Jacob Proffitt
sumber
2

Saya membuat game untuk kelas dua tahun yang lalu (saya berusia 18 juga saat itu) dan kami membuatnya di C #. Sementara saya amati bahwa program-program C # besar biasanya beroperasi lebih lambat daripada program-program C ++ besar, C # juga membutuhkan kerja yang jauh lebih sedikit di pihak Anda. Manajemen memori dilakukan secara otomatis, dan untuk lingkup gim pertama, ini cukup cepat. (Game kami adalah RTS 2D multipemain penuh seperti Starcraft.)

Saya root untuk C # karena seharusnya lebih mudah untuk mengelola. Namun, jika Anda ingin menjadi pengembang game profesional, ingatlah bahwa itu hanya berfungsi pada platform Microsoft. (Tetap saja, C # dapat menjadi batu loncatan yang baik untuk C ++, dan jika saya harus mempelajari kembali kedua bahasa, saya akan mencoba mempelajari C # terlebih dahulu.)

zneak
sumber
C # juga berjalan pada Mono (lintas platform), namun bagian kerangka kerja (mis. WPF) tidak didukung.
Danny Varod
1
@Danny Varod, saya tidak begitu suka merekomendasikan Mono untuk pengembangan game lintas platform karena sampai sekarang mereka selalu sedikit terlambat tentang Microsoft dalam hal fitur, dan saya tidak berharap itu berubah. Juga, nilai tambah utama dari pengembangan dengan C # untuk platform Microsoft adalah XNA, dan sampai Mono juga menyediakan DirectX, itu tidak akan bekerja pada platform non-MS.
zneak
1
Mono harus menyediakan pembungkus OpenGL yang kompatibel, karena, seperti yang Anda nyatakan DirectX adalah milik Microsoft. Maksud saya adalah hanya C # yang dapat porting sebagian.
Danny Varod
2
Antara Unity, monogame (opensource XNA untuk mono), dan OpenTK ada banyak perpustakaan gim yang bagus untuk mono.
stonemetal
1

Saya akan memilih C ++ - terutama karena itu bisa lintas platform (tergantung pada bagaimana Anda menulis kode Anda, tentu saja) dan juga karena saya pikir itu memberi Anda lebih banyak pengetahuan tentang manajemen memori - karena Anda perlu peduli tentang hal itu. Tetapi karena Anda tidak peduli dengan linux / unix, jika Anda ingin meninggalkan kompleksitas memori untuk saat ini, mengapa tidak fokus dalam C # sekarang dan kemudian pelajari juga C ++?

Mauren
sumber
Terima kasih telah menjawab pertanyaan pertama Anda tentang Pemrogram Stack Exchange.
PengembangDon
C ++ masih merupakan bahasa yang paling portabel hingga saat ini. Khususnya platform seluler beberapa memiliki Java, beberapa memiliki C #, tetapi sebagian besar tidak memiliki keduanya. Tetapi semua harus memiliki C ++; mesin virtual perlu diimplementasikan dalam sesuatu yang mengkompilasi ke kode mesin asli dan bahwa sesuatu saat ini selalu C ++.
Jan Hudec