Toán học, vật lý, AI và các khái niệm chung mà một lập trình viên nên biết để phát triển một công cụ trò chơi là gì? [đóng cửa]


9

Là một lập trình viên của các ứng dụng tập trung vào web và DB, tôi có kiến ​​thức về các cấu trúc dữ liệu như danh sách, cây, biểu đồ, v.v. Tôi thực sự sử dụng rất ít các thuật toán cấu trúc dữ liệu này trong mã hóa của mình, ngoại trừ việc sắp xếp mọi thứ trong mảng đơn giản, như tôi đã làm việc gần như hoàn toàn với các khung công tác hướng đến khách hàng nơi tất cả các chức năng cốt lõi được tích hợp sẵn. Tôi biết C, PHP, Java, HTML, PL / SQL và MySQL. Tôi hiện đang học Python.

Tôi muốn bắt đầu với phát triển trò chơi. Tôi đã thấy các câu hỏi khác liên quan đến đề xuất, mẹo và phương pháp tiếp cận phát triển trò chơi cho người mới bắt đầu. Tôi hiểu những điểm này, và rõ ràng với câu trả lời. Vài ngày sau khi đăng bài, tôi đã đọc bài viết Viết trò chơi, không phải động cơ và nhận ra rằng tôi nên thực hiện một trò chơi trước khi tôi tạo một công cụ trò chơi. Tuy nhiên, tôi có câu hỏi.

Mục đích của tôi là

  • Cải thiện kỹ năng lập trình cấp độ cốt lõi của tôi, bao gồm sử dụng các thuật toán cấu trúc dữ liệu, các khái niệm toán học và vật lý.
  • Thực hiện một công cụ trò chơi tốt, để thưởng thức bản thân trong mã hóa cấp độ cốt lõi.
  • Để mở đường vào lĩnh vực nghiên cứu AI.

Toán học, vật lý, AI và các khái niệm chung mà một lập trình viên nên biết để phát triển một công cụ trò chơi là gì?

Câu trả lời:


11

Cấu trúc dữ liệu: Đó chắc chắn là một câu hỏi hợp lệ. Tuy nhiên, trong khi một số Cấu trúc dữ liệu hữu ích cho bất kỳ loại Trò chơi nào (như những trò chơi bạn đã đề cập, Danh sách, Cây ...), thì có một số Cấu trúc khác rất cụ thể. Ví dụ, Octrees có thể rất hữu ích trong Lập trình 3D, nhưng trong môi trường 2D thuần túy, bạn có thể sẽ không cần đến chúng.

Thuật toán : Áp dụng quy tắc tương tự. Ví dụ, trong môi trường 2D thuần túy, Phát hiện va chạm hoạt động rất khác so với trong 3D.

Quan trọng Toán học khu vực: THE Diện tích quan trọng nhất cho một Công cụ Dev phải làm quen với là Linear Algebra và nâng cao hơn Đại số chủ đề (Quaternions). Thực sự khá đơn giản, nếu bạn cảm thấy thoải mái với Đại số tuyến tính (và ý tôi là ngoài phép nhân Ma trận đơn giản), bạn sẽ có một khởi đầu tốt.

Hình học ist tiếp theo, kết nối tốt với Đại số tuyến tính trong Dù sao Engine Dev, và có lẽ không cần phải đề cập đến bất cứ cách nào.

Hơn nữa, không bao giờ đau đớn để có một sự hiểu biết vững chắc về Tính toán cơ bản. Điều này có ích khi xử lý Công cụ Vật lý hoặc các Chủ đề Shading nâng cao hơn.

Các chủ đề quan tâm khác phải là: Kết hợp, Thống kê

Vật lý: Không bắt buộc, NẾU bạn đang có ý định làm những trò chơi đơn giản. Không đau, nhưng bạn sẽ ổn với vật lý học trung học trong trường hợp này.

Nếu bạn đang nghĩ đến việc viết Công cụ vật lý hoặc triển khai Kiến trúc hiện có, thì có, đó là bắt buộc. Nhưng đừng sợ, có rất nhiều Sách Vật lý được viết riêng cho Game-Dev. Chỉ cần ghi nhớ, đọc những TRƯỚC KHI bạn bắt đầu mã hóa một trò chơi bằng vật lý. Nếu trò chơi của bạn cần có vật lý, những Động cơ này sẽ gắn sâu vào kiến ​​trúc cốt lõi của bạn.

AI: Thành thật mà nói, nếu AI là Sở thích chính của bạn, tôi sẽ không bận tâm đến việc viết toàn bộ Động cơ. AI sẽ vui hơn rất nhiều khi bạn có Kiến trúc hiện có để chơi. Viết một Engine sẽ là một điều khó khăn và sẽ khá lâu cho đến khi bạn có thể thực hiện các Thuật toán AI thú vị.

Bạn muốn phát triển loại trò chơi nào? Có lẽ tôi có thể giải thích nhiều hơn về những Điểm này với thông tin này.


Cảm ơn câu trả lời công phu của bạn. Như một câu trả lời cho câu hỏi của bạn .. ngay lúc này tôi không có ý tưởng nào trong đầu, nhưng muốn phát triển một số công cụ trò chơi 3d. Nhưng nghĩ tốt hơn để bắt đầu với một số trò chơi 2d và làm quen với môi trường. Trước tất cả những điều này tôi nên chơi một số trò chơi để biết giao diện trò chơi (vì tôi chưa bao giờ chơi trò chơi video :-)). Vì vậy, nó dễ dàng cho tôi để hiểu các thuật ngữ sách và những thứ khác. Tôi thấy những điều dưới đây rất hữu ích,
droidsites

xin lỗi đã bỏ lỡ liên kết trong nhận xét trước đây của tôi: gamedev.stackexchange.com/questions/8502/NH
droidsites

Trước đây tôi đã từng khuyên bạn nên bắt đầu với trò chơi 2D trước nếu bạn muốn phát triển trò chơi 3D. Tuy nhiên, với sự nổi dậy của Kiến trúc như XNA, tôi tin rằng sẽ vui hơn khi được trực tiếp đi sâu vào 3D. Bạn đã xem qua C # / XNA chưa? Không nên là một vấn đề với nền tảng lập trình của bạn
Michael Kissner

Không, tôi đã không kiểm tra nó. Đúng ... không có vấn đề gì với C #. Nhưng tôi rất thích thú với loại trăn :-)
droidsites

Nếu bạn quan tâm đến Python và bạn thích xây dựng trò chơi hơn là xây dựng công nghệ để xây dựng trò chơi, bạn có thể kiểm tra Panda3D hoặc Công cụ trò chơi Blender.
Sean Middleditch

1

Mặc dù có thể hợp lệ để hỏi cấu trúc dữ liệu nào được sử dụng nhiều nhất trong phát triển trò chơi, nhưng sẽ hợp lý hơn khi hỏi cấu trúc dữ liệu nào được sử dụng cho các vấn đề cụ thể. Tôi có thể dễ dàng nói rằng các bảng băm là siêu phổ biến trong các trò chơi, nhưng điều đó sẽ không cho bạn biết bất cứ điều gì hữu ích về thời gian và địa điểm sử dụng (và không sử dụng!) Một bảng băm trong mã của riêng bạn. :)

Về mặt toán học, bạn cần nắm vững về đại số tuyến tính (vectơ, ma trận, giải hệ phương trình, v.v.), nắm bắt rất rõ về lượng giác và ít nhất là hiểu biết cơ bản về phép tính (đạo hàm đơn giản và tích phân) . Bất kỳ khóa học đại số tuyến tính cấp đại học giới thiệu nào cũng sẽ đưa bạn đi đúng hướng, nếu không dạy bạn về tất cả những gì bạn cần biết để bắt đầu làm việc với các nguyên tắc đồ họa 3D phổ biến. Tôi cũng liên kết một cuốn sách dưới đây mà bạn có thể thấy khá hữu ích.

Đối với vật lý, bạn đang đi xe. Vật lý có thể được chia thành hai loại khác nhau: phát hiện va chạm và phản ứng va chạm. Bạn hoàn toàn phải biết toán học đằng sau phát hiện va chạm, vì toán học đó ít nhiều giống với những gì bạn cần làm đồ họa (đặc biệt là để xây dựng cây và bản đồ bạn cần để che giấu), và bạn sẽ sử dụng công cụ đó cho rất nhiều logic trò chơi của bạn là tốt.

Phản ứng va chạm có thể thay đổi từ mức độ "đơn giản" đến mức độ phức tạp và thậm chí những thứ đơn giản có thể không trực quan lúc đầu. Tôi rất, rất khuyến khích bạn để lại những thứ đó cho một thư viện hiện có như Bullet, Havok, PhysX, v.v. (hoặc Box2D nếu bạn đang làm việc trên trò chơi 2D) cho đến khi và trừ khi bạn cảm thấy thoải mái với toán học và thuật toán hiện có của mình kiến thức và quyết định bạn muốn tìm hiểu cách thức hoạt động của động cơ vật lý. Sau đó tôi sẽ khuyên bạn nên xây dựng một công cụ vật lý 2D rất đơn giản như là nỗ lực đầu tiên của bạn. Các công cụ vật lý 3D là những con thú cực kỳ phức tạp và (được cho là) ​​phần phức tạp và khó nhất trong lập trình trò chơi, đó là lý do tại sao các công cụ vật lý là công nghệ của bên thứ ba được cấp phép phổ biến nhất được sử dụng trong các trò chơi. Bạn không thấy nhiều game phát sinh ' Sử dụng Havok hoặc PhysX trong thế giới chuyên nghiệp, mặc dù có bao nhiêu trò chơi có từ đầu các công cụ đồ họa được trồng tại nhà và mã động cơ lõi. Ngay cả các công ty không làm gì khác ngoài việc xây dựng các công cụ trò chơi thường cấp phép cho một công cụ vật lý, ví dụ Unreal chỉ sử dụng PhysX chứ không bao gồm công cụ vật lý của riêng họ.

Tôi muốn giới thiệu những cuốn sách sau đây để giúp bạn bắt đầu. Đầu tiên là một cuốn sách giới thiệu về toán học cơ bản mà bạn cần biết khi là một lập trình viên trò chơi 3D:

http://www.amazon.com/Mathatures-Programming-Computer-Graphics-Third/dp/1435458869

Thứ hai là một cuốn sách được phát hiện cho các thuật toán phát hiện va chạm (không phải là phản ứng va chạm!) Sẽ giúp cả mã hóa đồ họa và mã hóa vật lý của bạn:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Tĩ/dp/1558607323

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.