Ví dụ, công cụ trò chơi mã nguồn mở được thiết kế tốt nhất là gì? [đóng cửa]


15

Có thể trùng lặp:
Tôi có thể tìm thấy các ví dụ tốt (được tổ chức tốt) của mã trò chơi ở đâu?

Tôi đã mã hóa một số trò chơi C ++ và bây giờ tôi đang xây dựng công cụ và trình chỉnh sửa trò chơi của riêng mình.

Tôi có một số nghi ngờ về thiết kế và tôi muốn tìm những ví dụ tuyệt vời để làm theo.

Thiết kế tốt nhất theo ý kiến ​​của bạn là gì?

Phải hướng đối tượng. Ngôn ngữ lập trình không quan trọng, nhưng tôi thích theo thứ tự này: C ++, C #, Java hoặc tương tự khác.

EDITED: Để làm rõ hơn, tôi không quan tâm đến mã dành riêng cho trò chơi. Tôi muốn công cụ trò chơi mục đích chung.

EDITED: Bài viết này giải thích công cụ trò chơi là gì: công cụ trò chơi tại wikipedia và đây là danh sách các công cụ trò chơi đã biết: danh sách các công cụ trò chơi tại wikipedia


3
Bạn có thực sự hiểu câu hỏi của tôi? Tôi muốn công cụ trò chơi (không chỉ trò chơi ). Và tôi yêu cầu Phải hướng đối tượng . Trong luồng mà bạn đã nói, câu trả lời chỉ dành cho trò chơi (Doom3, Prototype, v.v.) Và cũng có bộ công cụ đồ họa (OpenSceneGraph) nhưng không có gì cụ thể về "công cụ trò chơi" trên luồng đó ... Bạn có thể đóng hoặc xóa câu hỏi của tôi nếu bạn không thích nó, nhưng tôi không hiểu phiếu bầu xuống ... :( Câu hỏi của tôi không giống nhau
Dani

2
Để làm rõ hơn nữa, tôi không quan tâm đến mã dành riêng cho trò chơi. Tôi muốn công cụ trò chơi mục đích chung.
Dani

3
Có một sự khác biệt: Không phải tất cả các trò chơi chạy trên một công cụ đa năng. Doom3 có một công cụ cụ thể FPS, Prototype thì khác, v.v ... Có thể chúng có những điểm chung (quản lý tài nguyên, kịch bản ...) nhưng điều này không liên quan đến câu hỏi của tôi. Câu hỏi của tôi bắt đầu bằng cụm từ "Tôi đã mã hóa một số trò chơi C ++". Tôi nhắc lại: Nhu cầu của tôi là tìm một mã nguồn công cụ trò chơi có mục đích chung tốt. Không phải là một nguồn trò chơi để tìm kiếm mã tái sử dụng.
Dani

1
Doom 3 có một "công cụ cụ thể FPS" nhưng cũng có tất cả các bộ phận mà công cụ chung cần - như bạn nói, quản lý tài nguyên và kịch bản, kết xuất 3D, vật lý, v.v. Đó là một công cụ chung và nhiều hơn nữa , không ít hơn.

2
@Joe Wreschnig Tôi có khuynh hướng đồng ý với @Dani về chủ đề này. Mặc dù tất cả các trò chơi được cung cấp bởi một số dạng động cơ, các mẫu kiến ​​trúc được sử dụng cho động cơ "một lần" và động cơ được thiết kế để hoạt động trên nhiều tựa game khá khác nhau, ngay cả khi cả hai đều có kịch bản, quản lý tài nguyên, kết xuất 3D, vv các thành phần. Ngoài ra, xem mã cho một trò chơi được xây dựng trên một công cụ được phát triển bởi cùng một studio có lẽ không phải là lựa chọn khôn ngoan nhất, vì nó sẽ không cho bạn một dấu hiệu xác thực về việc công cụ này linh hoạt và dễ sử dụng như thế nào trong môi trường bên thứ 3.
Ari Patrick

Câu trả lời:


6

Tôi nghĩ cách tốt nhất để xây dựng một công cụ trò chơi là bắt đầu với những gì bạn đã biết khá rõ và thêm những tính năng tẻ nhạt hoặc lặp đi lặp lại.

Ví dụ, tôi làm rất nhiều với Python / pygame (là trình bao bọc SDL) Tôi thích hệ thống này một chút, nhưng có ba điều khiến tôi bận tâm:

  • Xây dựng vòng lặp hoạt hình rất tẻ nhạt và tất cả đều giống nhau.
  • Các đối tượng sprite cơ bản là rất hạn chế. Tôi muốn một sprite được cải thiện với hướng và tốc độ, khả năng xử lý các điều kiện cạnh màn hình khác nhau, nhiều hình ảnh và nhiều sơ đồ va chạm.
  • Pygame không có tính năng UI. Tôi muốn nhãn đơn giản, nút và trình chọn số tôi
    có thể dễ dàng thêm vào trò chơi của mình.

Nó tương đối dễ dàng để tạo một trình bao bọc hướng đối tượng xung quanh các tính năng này. Hãy xem chương 10 và tài liệu về Game Engine có sẵn tại đây: http://aharrisbooks.net/pythonGame/

(Điều này được viết như một phần của cuốn sách, nhưng bạn được chào đón vào công cụ trò chơi ngay cả khi bạn không muốn cuốn sách.)

Chương 10 giải thích động lực và kỹ thuật để xây dựng một công cụ trò chơi 2D cơ bản. Bạn có thể tận hưởng nó khi bạn xây dựng của riêng bạn. Ngôn ngữ thực tế không quan trọng lắm (tất nhiên ngoại trừ bạn sẽ cần ngôn ngữ OOP để hỗ trợ OOP.) Nếu bạn đã sử dụng SDL với C ++, bạn có thể bắt đầu bằng cách điều chỉnh công cụ của tôi với C ++ / SDL.


8

Thiết kế công cụ Quake (ID tech) đáng kính đã vượt qua thử thách của thời gian và có lẽ là thiết kế công cụ trò chơi thành công nhất mọi thời đại. Tất cả mọi thứ ngoài trình kết xuất hầu như không thay đổi kể từ cuối những năm 90 và vẫn được sử dụng trong các trò chơi hiện đại như ETQW.

Mã nguồn đầy đủ cho bốn lần lặp của công cụ này (Quake 1 đến 3, cộng với Wolf ET) có sẵn theo GPL. Có lẽ có hơn một trăm công cụ trò chơi dựa trên Quake được cộng đồng phát triển tích cực đang giữ cho chúng phù hợp trong thời đại hiện đại. Đặc biệt đáng xem là XreaL cho trình kết xuất tuyệt vời của nó và ioQuake3 để bảo trì Quake 3 một cách trung thực cho phần cứng hiện đại. Ngoài ra, đối với các phiên bản ID "chính thức" gần đây của công cụ, logic trò chơi (không phải toàn bộ công cụ) cũng có sẵn.

Ngay cả khi bạn không sử dụng công cụ trò chơi này, nó vẫn đáng để nghiên cứu về kiến ​​trúc phân tách máy khách-máy chủ chu đáo và phân biệt logic trò chơi với các chi tiết cấp thấp.


1
Mặc dù vậy, tôi sẽ không gọi chính xác đối tượng công nghệ id tiền Doom3.
Tetrad

3
Không, không hướng đối tượng, nhưng như tôi đã nói, nó đáng để nghiên cứu. Ý tôi là, chỉ vì nó mang tính thủ tục không có nghĩa là nó sẽ gây ung thư mắt nếu bạn nhìn vào nó! ;)
Tối đa

6

Thư viện kết xuất Ogre3D khá gần với mã công cụ và từ tất cả các tài khoản tôi đã nghe được thiết kế rất tốt và rất OO.

http://www.ogre3d.org/


+1 Động cơ tuyệt vời. Cảm ơn Tetrad! Tôi đã biết nó, nhưng tôi chưa bao giờ sử dụng và cũng không thấy mã nguồn. Bạn có biết liệu nó có tích hợp AI hay không (ví dụ: Tìm đường, v.v.)
Dani

3
Tôi nghĩ rằng tất cả chỉ liên quan đến kết xuất.
Tetrad

2
Ogre chỉ là một thư viện kết xuất đồ họa. Công cụ kết xuất đồ họa hướng đối tượng.
Jonathan Sternberg

0

Khi nói về công cụ trò chơi, tôi đoán bạn đang nghĩ về bất cứ thứ gì không phải là công cụ kết xuất, công cụ âm thanh, công cụ vật lý, công cụ đầu vào, v.v.

Vì vậy, bạn có thể nghĩ về kiến ​​trúc trò chơi, AI hoặc mô hình / hệ thống thiết kế, v.v., được sử dụng để cấu trúc một phần mềm thành quản lý dữ liệu và các thành phần khác để tạo ra một số loại cảnh / điều đó / ảo giác, do đó tạo ra một bộ quy tắc có thể quản lý được tinh chỉnh để tạo ra một "trò chơi video" thực tế.

Đây là lớp trên cùng thực sự của một trò chơi video và tôi thậm chí đã cố gắng tìm hiểu một chút về nó, nó rộng lớn, phức tạp và đòi hỏi nhiều kiến ​​thức về tất cả các môn học khác. Hãy tưởng tượng bạn muốn tái tạo một thực tế thay thế từ không có gì, theo dõi và tính toán từng sự kiện và tạo lại dữ liệu chính xác từ những sự kiện đó, bất cứ lúc nào: đối với mỗi loại trò chơi đều có một loại công cụ trò chơi con và tôi không ' Tôi nghĩ rằng thực sự có thể tạo ra một động cơ chung đủ nhanh về mặt toán học. Ngay cả đối với một trò chơi mà bạn điều khiển một nhân vật duy nhất, vẫn có rất nhiều thứ có thể thay đổi và vẫn có thể yêu cầu trò chơi thay đổi toàn bộ kiến ​​trúc.

Ngành công nghiệp trò chơi không được phục vụ tốt bởi nguồn mở như các lĩnh vực khoa học máy tính khác, chỉ vì giải trí có các loại giấy phép khác nhau, liên quan đến giấy phép nghệ thuật: sản phẩm trò chơi chỉ được trả bởi khách hàng và AFAIK, chỉ có Một số công cụ có vẻ đủ tốt để làm việc cho bạn: Hord3d, NeoAxis, Blendelf, Panda3D. Nhưng tôi không thể đảm bảo với bạn rằng chúng sẽ dễ sử dụng như các công cụ như Unity, Torque, C4 và các công cụ khác; Hãy nhớ rằng một công cụ trò chơi là, với trình kết xuất đồ họa, tôi nghĩ loại phần mềm khó nhất mà bạn sẽ tìm thấy trong quá trình tạo trò chơi.


0

Đối với tôi sử dụng Python với Pygame là một giải pháp tốt. Có thể Python hơi chậm nhưng đối với các máy tính ngày nay và nếu bạn chỉ cố gắng tối ưu hóa trò chơi của mình thì điều này không thành vấn đề. Pygame có một tài liệu rất tốt tại trang web của pygame ban đầu. Nhưng trước tiên hãy bắt đầu một hướng dẫn để tìm hiểu một số điều cơ bản. Để tối ưu hóa tốc độ (chuyển đổi hình ảnh, ...) bạn sẽ cần các ví dụ khác dễ dàng tìm thấy.

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.