Lập trình trò chơi: C # hay C ++? [đóng cửa]


15

Tôi đã quyết định những gì tôi thực sự muốn là làm lập trình trò chơi. Vì vậy, câu hỏi là, khi 18 tuổi muốn học lập trình tự học, ngôn ngữ lập trình phù hợp nhất giữa C # và C ++ là gì? (Tôi nên nói rằng tôi không quan tâm đến Unix vì tôi tin rằng windows sẽ vẫn là hệ điều hành được sử dụng nhiều nhất)

Tôi biết những điều cơ bản về C ++, nhưng không có gì về C #. Tôi biết rằng C ++ có nhiều hướng dẫn, dll và những thứ tương tự như vậy, trong khi C # thì không, nhưng nó dễ học hơn và sử dụng cho một người để phát triển chương trình, nhưng tôi đã đọc ngay cả khi chương trình bị xáo trộn thật dễ dàng để có được nguồn gốc của nó.

Chà, trước tiên tôi muốn tập trung vào cơ bản rất nhiều, tôi phải nói rằng tôi có sở thích với C ++ chỉ vì nó phù hợp với tôi hơn, nhưng tôi phải xem xét rằng tôi làm việc một mình. Vì vậy, ngay cả khi tôi thích nó, nó có thể không phải là điều tốt nhất để làm.

Tôi thực sự không chắc chắn nên chọn cái nào, tôi đã đọc rất nhiều chủ đề trên các trang web khác nhau và có vẻ như C # đang trở nên phổ biến hơn C ++. Nhưng vâng, điều đó nói rằng, tôi cũng xác định tôi muốn làm lập trình trò chơi. Vì vậy, tôi cần biết một số điểm tốt hơn là chỉ "C # dễ dàng hơn vì xử lý bộ nhớ .net trong khi C ++ thì không" bởi vì tôi không thể tìm thấy nó.


16
Bạn cũng có thể thấy gamedev.stackexchange.com hữu ích.
Adam Lear

1
C # là những gì tôi muốn giới thiệu tạo ra.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little

2
Cũng xem tại đây: gamedev.net
Patrick Hughes

Câu trả lời:


21

Tôi học C ++ bằng cách lập trình một trò chơi. Đó là một trải nghiệm rất thú vị. Tôi rất khuyến khích bạn làm như vậy!

Tuy nhiên bây giờ tôi là một lập trình viên C #, tôi biết rằng tôi sẽ làm việc hiệu quả hơn rất nhiều nếu C # có sẵn tại thời điểm đó.

C # là sự lựa chọn hoàn hảo để học phát triển trò chơi. Nó có mọi thứ bạn cần để bắt đầu từ khung đến sách và ngôn ngữ thật tuyệt vời.

Tôi đã thấy hàng tá cuốn sách được viết riêng về Lập trình trò chơi C # và Microsoft đang nỗ lực rất nhiều để cải thiện các khung của mình bao gồm DirectXXNA .

CẬP NHẬT : bạn cũng có thể quan tâm đến điều này . Đây là một bài đăng blog gần đây từ Miguel de Icaza .

CẬP NHẬT 2013 / 02-22 Microsoft đang lên kế hoạch ngừng hỗ trợ XNA .


1
Vì vậy, có lẽ tôi nên bắt đầu tìm hiểu về SDL hoặc một cái gì đó tương tự với C ++ sau đó chuyển sang C # trong tương lai .. có vẻ như C ++ bị thay thế bởi C # ngoại trừ việc tạo ra động cơ .. Tại sao lại khó lựa chọn như vậy !
Chronix

2
Hiểu rằng C # là tuyệt vời để trải nghiệm phát triển trò chơi, không phải là tính di động trên một số nền tảng chơi game hoặc các mối quan tâm khác. Kịch bản trường hợp tốt nhất là khi bạn biết đủ nhà phát triển trò chơi bằng cả hai và bạn chọn C ++ hoặc C # tùy thuộc vào nền tảng đích.
Klaim

Ngoài ra, +1 rõ ràng. Cá nhân tôi vẫn thích C ++ nhưng điều đó chỉ bởi vì hầu hết dự án của tôi yêu cầu một số quyền truy cập lowlevel vì một số lý do cụ thể của dự án.
Klaim

12

Hầu hết các công ty trò chơi sử dụng C ++, có thể với các kịch bản python hoặc các ngôn ngữ khác đang chạy trong nền. Moreso vì các ràng buộc cho OpenGL và DirectX nhắm vào C ++ (altho Im khá chắc chắn rằng bạn có thể thực hiện nhiều công cụ Direct3d trong C #) nhưng ya cho lập trình trò chơi, C ++ là ngôn ngữ MAIN.

Tôi sẽ đưa ra một cảnh báo công bằng mặc dù (và đừng để điều này ngăn cản bạn) nhưng đồ họa 3D có thể trở nên cực kỳ phức tạp. Direct3D mới đã làm cho nó dễ dàng hơn một chút so với trước đây, nhưng nó vẫn là một phép toán tốt (có thể gây nhầm lẫn) và chỉ các thư viện có thể gây nhầm lẫn.

Trước tiên tôi sẽ bắt đầu với một cái gì đó rất đơn giản. đối với công cụ 2d SDL (Simple Directmedia Layer) dễ sử dụng hơn rất nhiều (đối với một trò chơi như trò chơi từ trên xuống) một khi bạn vào 3D Tôi cá nhân nghĩ rằng OpenGL dễ học hơn (nhưng tất cả chỉ là ý kiến). MS có một số Hướng dẫn / Mẫu đẹp trong tài liệu DirectX SDK của họ, vì vậy, đáng để xem qua. Các hướng dẫn Nehe mặc dù một chút lỗi thời vẫn còn tốt đẹp.

nhưng ya để trả lời câu hỏi của bạn, tất cả đều được thực hiện trong C ++.


1
SlimDX cung cấp trình bao bọc DirectX cho .NET
Danny Varod

1
"đối với lập trình trò chơi, C ++ là ngôn ngữ CHÍNH." Tôi không đồng ý với tuyên bố đó. Thị trường trò chơi rộng hơn rất nhiều so với các game console AAA - đó là một phân khúc thị trường nhỏ hơn nhiều so với mọi người có xu hướng nhận ra. Tôi muốn nói rằng nhiều trò chơi được viết bằng các ngôn ngữ như ActionScript hơn C ++
MattDavey

8

Trước tiên, bạn sẽ muốn đặt một số ưu tiên. Bạn chỉ muốn làm một trò chơi trước sau đó tìm hiểu về các khía cạnh nâng cao hơn của lập trình sau, hoặc ngược lại. Cả hai phương pháp đều có ưu và nhược điểm, nhưng theo tôi đều hợp pháp.

Nếu bạn muốn bắt đầu làm game thì tôi khuyên bạn nên học C #. Nếu bạn đã biết những điều cơ bản về C ++ thì bạn sẽ không gặp khó khăn gì trong việc chọn C #. Làm cho C # công cụ của bạn có lợi thế. Thật dễ để học ngôn ngữ (so với C ++) và là một "ngôn ngữ được quản lý", điều đó có nghĩa là nó tự động làm bộ nhớ cho bạn (điều mà rất nhiều người mới bắt đầu C ++ và thậm chí cả những người mới bắt đầu không gặp rắc rối với ). Nó cũng cung cấp cho bạn quyền truy cập vào Khung XNA của Microsoft, nơi thậm chí còn làm nhiều hệ thống ống nước tẻ nhạt hơn cho bạn. Điều đó khiến bạn tập trung vào những thứ như chu kỳ trò chơi và thiết kế, mà không phải lo lắng (quá nhiều) về việc làm cho nó hoạt động. Thật vậy, tất cả hệ thống ống nước này đều có chi phí hoạt động, điều đó có nghĩa là bạn có thể sẽ không làm các trò chơi 3D cấp công nghiệp, nhưng bạn chỉ tham gia vào lập trình trò chơi, vì vậy tôi nghi ngờ bạn sẽ thực hiện Halo tiếp theo trong vài lần thử đầu tiên. :)

Đây là một bài đăng của anh chàng đã phát triển một trò chơi XNA thành công (Weapon of Choice). Anh ấy nói chi tiết về việc sử dụng C # / XNA đã giúp anh ấy tiết kiệm thời gian phát triển chứ không phải sử dụng C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Điều đó đang được nói, bạn nên đầu tư một chút thời gian vào ít nhất là biết mọi thứ hoạt động như thế nào trong nền. Làm thế nào một lập trình viên C ++ sẽ làm điều đó. Học cách tạo một trò chơi trong C ++ có thể giúp bạn tham gia vào một nhóm phát triển trò chơi khác dễ dàng hơn (vì hầu hết trong số họ làm việc trong C ++), nếu điều bạn muốn là có được chỗ đứng trong ngành công nghiệp trò chơi. Nhưng ngay cả khi bạn không bao giờ sử dụng C ++, việc biết cách thức hoạt động bên trong chỉ có thể giúp bạn trở thành một lập trình viên tốt hơn, bất kể bạn sử dụng ngôn ngữ nào.


Tôi hoàn toàn đồng ý. Các vấn đề quản lý bộ nhớ mà bạn gặp phải với c ++ là vấn đề lớn nhất. Chưa từng có một trò chơi nào tôi từng làm việc mà không gặp vấn đề về trí nhớ và tôi đã nghe điều tương tự được nói bởi các cựu chiến binh 20 năm đã tạo ra hàng tá trò chơi. Ngay cả RAII và con trỏ thông minh cũng không giải quyết được vấn đề, khi bạn gặp vấn đề với con trỏ trỏ đến dữ liệu cũ và các vấn đề với quyền sở hữu. Học cách tìm và sửa chúng sẽ giúp bạn trở thành một lập trình viên giỏi hơn rất nhiều, nhưng nó có thể khiến bạn bị vấp ngã trong nhiều tháng khi lần đầu tiên bạn bị tràn bộ đệm và trò chơi bị sập trong một phần không liên quan.
Dominique McDonnell

Tôi muốn thêm vào câu hỏi này rằng C # cũng có XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) để lợi thế của nó. XNA là nhiều dễ dàng hơn để nhặt hơn so với không được quản lý DirectX.
Vitor Py

1
@DominicMcDonnell: Bạn có thể gặp vấn đề về bộ nhớ bằng cách giữ các tham chiếu đến những thứ bị ẩn ở đâu đó trong thời gian chạy được quản lý như C # và khi nó xảy ra, bạn sẽ khó khăn hơn trong việc tìm kiếm nó vì bạn sẽ không quen với việc nghĩ về thời gian sống của tài nguyên.
Jan Hudec

@JanHudec, tôi không biết điều đó. Tôi cho rằng bạn có thể nói rằng làm cho mọi thứ hoạt động đơn giản và dễ dàng hơn, nhưng những điều khó khăn hơn rất nhiều để theo dõi và theo một số cách mà các thói quen mà ngôn ngữ cho phép bạn xây dựng có được.
Dominique McDonnell

3

Tôi đánh giá cao C ++ để phát triển game. Có một vài trở ngại thêm, với những ưu và nhược điểm khác nhau, một trong những lý do tốt nhất là tính di động.

Với C #, bạn có thể phát triển thêm một chút trong những ngày này, và có một số công cụ tuyệt vời đáng kinh ngạc được lập trình sẵn trong đó. Cả hai đều là ngôn ngữ tốt để lập trình trò chơi, nếu bạn chỉ nhắm mục tiêu nền tảng Windows / Xbox thì bạn sẽ đặc biệt có lý do để nghiêng về C #.

Ngôn ngữ tôi nghĩ nhiều nhất bạn nên học sẽ là OpenCL hoặc CUDA, một số ngôn ngữ GPGPU. Cá nhân tôi thích OpenCL vì nó dường như tồn tại lâu hơn và phát triển hơn nữa, về cơ bản nó chỉ là phong cách C. Có OpenTK , một trình bao bọc đẹp cho C ++ hoặc C #.

Tôi đã luôn tự hỏi lập trình trò chơi Ruby sẽ như thế nào với khả năng tăng tốc phần cứng ...


3

Lập trình trò chơi thô sẽ để lại cho bạn khá lạnh. Làm việc với các cuộc gọi đồ họa cấp thấp trong C # hoặc C ++ là một cơn ác mộng nhỏ và bạn thực sự không muốn xây dựng lại bánh xe kết xuất các họa tiết 2D chứ đừng nói đến các mô hình 3D. Vì bạn chỉ có một mình và muốn học lập trình, nên cách tốt nhất của bạn là tìm một khuôn khổ có thể đưa bạn tiến lên một chút.

Vì bạn có chút quen thuộc với ngôn ngữ dựa trên C, đề xuất của tôi sẽ là cung cấp cho Unity 3D một cái nhìn. Nó không chỉ trải qua một số nỗ lực nghiêm trọng trong việc áp dụng từ các cửa hàng phát triển trò chơi thương mại và có một số tùy chọn nền tảng thú vị (bao gồm cả thời gian chạy trên PC, android, iPhone và web), mà còn có phiên bản miễn phí rất dễ sử dụng và nhiều hướng dẫn để chỉ cho bạn cách chuyển từ khái niệm sang thực hiện. Tốt nhất trong tất cả (IMO) một trong những ngôn ngữ kịch bản được hỗ trợ là C #.


2

Tôi đã làm một trò chơi cho một lớp học hai năm trước (lúc đó tôi cũng 18 tuổi) và chúng tôi đã làm nó trong C #. Mặc dù tôi quan sát rằng các chương trình C # lớn thường hoạt động chậm hơn các chương trình C ++ lớn, C # cũng đòi hỏi ít công sức hơn cho bạn. Quản lý bộ nhớ được thực hiện tự động và đối với phạm vi của trò chơi đầu tiên, nó đủ nhanh. (Trò chơi của chúng tôi là một RTS 2D nhiều người chơi giống như Starcraft.)

Tôi đã root cho C # vì nó sẽ dễ quản lý hơn. Tuy nhiên, nếu bạn muốn trở thành một nhà phát triển trò chơi chuyên nghiệp, chỉ cần nhớ rằng nó chỉ hoạt động trên các nền tảng của Microsoft. (Tuy nhiên, C # có thể là bước đệm tốt cho C ++ và nếu tôi phải học lại hai ngôn ngữ, tôi sẽ thử học C # trước.)


C # cũng chạy trên Mono (đa nền tảng), tuy nhiên các phần của khung (ví dụ WPF) không được hỗ trợ.
Daniel Varod

1
@Danny Varod, tôi thực sự không muốn giới thiệu Mono cho phát triển trò chơi đa nền tảng vì cho đến nay họ vẫn luôn chậm trễ một chút so với Microsoft về các tính năng và tôi không hy vọng nó sẽ thay đổi. Ngoài ra, một điểm cộng lớn của việc phát triển với C # cho các nền tảng của Microsoft là XNA và cho đến khi Mono cũng cung cấp DirectX, nó sẽ không hoạt động trên các nền tảng không phải MS.
zneak

1
Mono sẽ phải cung cấp trình bao bọc OpenGL tương thích, vì, như bạn đã nói DirectX là của Microsoft. Quan điểm của tôi chỉ là C # có thể được chuyển một phần.
Daniel Varod

2
Giữa Unity, monogame (mã nguồn mở XNA cho mono) và OpenTK có rất nhiều thư viện trò chơi hay cho mono.
ném đá

1

Tôi sẽ bỏ phiếu C ++ - chủ yếu vì nó có thể là đa nền tảng (tất nhiên phụ thuộc vào cách bạn viết mã của mình) và cũng vì tôi nghĩ nó mang lại cho bạn nhiều kiến ​​thức hơn về quản lý bộ nhớ - bởi vì bạn cần quan tâm đến nó. Nhưng vì bạn không quan tâm đến linux / unix, nếu bạn muốn loại bỏ sự phức tạp của bộ nhớ trong lúc này, tại sao không tập trung vào C # ngay bây giờ và sau đó cũng học C ++?


Cảm ơn bạn đã trả lời câu hỏi đầu tiên của bạn trên Lập trình viên trao đổi Stack.
Nhà phát

C ++ vẫn là ngôn ngữ di động nhất cho đến ngày nay. Đặc biệt là các nền tảng di động, một số có Java, một số có C #, nhưng hầu hết không có cả hai. Nhưng tất cả đều phải có C ++; các máy ảo cần được triển khai trong một cái gì đó biên dịch thành mã máy gốc và một cái gì đó hiện luôn là C ++.
Jan Hudec
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.