Một trò chơi mã nguồn mở tốt để học hỏi là gì? [đóng cửa]


15

Tôi muốn tải xuống mã nguồn của một trò chơi Nguồn mở, vì vậy tôi có thể làm quen với kiến ​​trúc trò chơi. Có ai biết trò chơi có mã nguồn dễ đọc và dễ hiểu không?

Chỉnh sửa: Sau một số suy nghĩ, tôi muốn tạo ra một trò chơi có thể chơi trên máy tính để bàn hoặc điện thoại Android với đồ họa 2D.


7
Hầu hết các trò chơi là nguồn mở là các dự án lớn, cũ mà không phải lúc nào cũng dễ hiểu, các dự án thương mại được mở nguồn vì nhiều lý do hoặc các trò chơi chưa hoàn thành không thực sự ở trạng thái có thể chơi được. Thêm vào đó, kiến ​​trúc một chút về loại trò chơi và ngôn ngữ được sử dụng. Bạn muốn học loại trò chơi nào, và bạn biết ngôn ngữ nào? (hướng dẫn trung thực có thể là một lựa chọn tốt hơn ở đây)
thedaian

@thedaian Tôi biết java, C ++, C, javascript và python
jumpnett


Tôi đồng ý với thedaian, ít nhất điều đó làm việc tốt hơn cho tôi. Có rất nhiều bài viết rất hay và sách và hướng dẫn ngoài kia. Bạn sẽ phải mất thời gian để chọn đúng nhưng điều này giúp bạn tiết kiệm thời gian sau đó vì bạn sẽ biết lý do tại sao họ viết mã như họ và có thể nhận ra chất lượng của các nguồn (thường có mùi). Nếu bạn muốn tính di động, tôi sẽ sử dụng C / C ++, nhưng đối với những nền tảng đó bạn có thể làm tốt với Java.
Pablo Ariel

1
Wiki cộng đồng?
Jari Komppa

Câu trả lời:


2

Tôi không chắc chắn về loại trò chơi bạn đang yêu cầu nhưng có một trò chơi mã nguồn mở có tên là Diễn đàn DIY viết bằng c ++. Tôi nghĩ rằng bạn có thể sử dụng nó như là một mẫu tốt.

Một số tính năng làm cho trò chơi này trở nên độc đáo:

  • Đây là một trò chơi chiến lược.
  • Nó có hỗ trợ nhiều người chơi qua internet và mạng cục bộ.
  • Nó hỗ trợ dịch sang các ngôn ngữ khác thông qua tệp cấu hình (được tạo từ các tệp văn bản thô)
  • Nó được biên dịch trên hầu hết mọi nền tảng mà tôi biết.
  • Dự án của nó vẫn còn sống!
  • Nó có hỗ trợ AI tích hợp.
  • Dữ liệu đồ họa và âm nhạc là hoàn toàn tùy biến thông qua các bản vá.
  • Nó hỗ trợ các ngôn ngữ kịch bản để phát triển AI tùy chỉnh. vì vậy bạn cũng có thể đọc các AI khác được viết cho trò chơi này.
  • Đó là dự án tương đối lớn trong khi nó dễ đọc và hiểu mã của nó.
  • Nó dựa trên SDL, và từ đó họ đã phát triển mọi thứ từ đầu.

--Biên tập--

Mới hôm nay tôi đã bắt đầu đọc mã của họ từ đầu. Để hiểu những gì họ đã viết, bạn phải là một lập trình viên C và C ++ đàng hoàng (mặc dù mã của họ được nhận xét tốt)! Ý tôi là bạn phải thành thạo cả hai ngôn ngữ vì họ đang sử dụng các cấu trúc từ cả hai! Vì vậy, nếu bạn không đủ tự tin về các kỹ năng lập trình của mình, thậm chí đừng đến gần mã đó! đó là mã bẩn nhất mà tôi từng thấy! (và bản thân tôi là một lập trình viên bẩn thỉu nhưng họ là một thứ khác!)

Tôi nghĩ bây giờ tôi có thể đề nghị bạn kiểm tra mã supertux . đó là một trò chơi platformer (giống như siêu mario) và cho đến nay mã của họ có vẻ rất sạch (tôi đã kiểm tra cột mốc 1.3). họ có một số nhận xét trong mã đó nhưng chỉ dành cho những nơi mà bạn có thể bị nhầm lẫn.


Mặc dù OpenTTD là một trò chơi tuyệt vời, tôi không nghĩ đó là một dự án học tập tốt. Hầu hết trong số đó được thiết kế ngược từ lắp ráp, và vẫn còn các phần mã phản ánh điều đó. Thêm vào đó, nó chỉ đơn giản là một dự án lớn và có lẽ là quá nhiều cho một dự án "tìm hiểu kiến ​​trúc trò chơi".
thedaian

@thedaian bạn có thể nói như vậy nhưng cứ thỉnh thoảng tôi cần làm một cái gì đó mới, tôi chỉ cần đọc những gì được viết trong mã của họ. Cho đến nay tôi nghĩ đó là trò chơi mã nguồn mở dễ đọc nhất ngoài kia đáng đọc!
Ali1S 232

Ngoài ra, tôi không chắc lần cuối bạn kiểm tra mã của họ là khi nào nhưng họ đã
xóa

2

Tôi nghĩ có lẽ một cách tiếp cận tốt là chọn một trò chơi mà bạn thích và xem bất kỳ trò chơi nguồn mở nào như thế. Các nguồn mở nhái trò chơi danh sách có thể có thể giúp với bước cuối cùng, rất nhiều.


1

Có những điểm chính như Quake 3 hoặc nếu bạn muốn một cái gì đó đơn giản hơn một chút (và ở dạng 2D), hãy nhìn vào trò chơi độc lập Gish . Cả hai đều sử dụng OpenGL và cũng đa nền tảng.

Gish là một chút về phía lộn xộn, mặc dù.


1

Tôi khuyên bạn trước tiên nên thu hẹp sự tập trung của bạn về loại kiến ​​trúc trò chơi mà bạn quan tâm để tìm hiểu về-- đường ống 3d, vật lý, AI, v.v.

Với một yêu cầu chung cho một ví dụ tốt về lập trình trò chơi, tôi nghĩ rằng kẻ xâm lược không gian gl rất khó bị đánh bại vì nó có mã sạch và giao diện và chơi trò chơi gl trong khi vẫn giữ mọi thứ khá đơn giản.

chúc mừng


Là kẻ xâm lược không gian chỉ cửa sổ gl? Tôi hiện không có cài đặt windows trên pc. Không phải là tôi không có quyền truy cập vào nó, chỉ là nó không thuận tiện.
jumpnett

1

Mặc dù việc đọc mã có thể hữu ích, nhưng nếu bạn là người mới bắt đầu trong miền, bạn sẽ không học được gì. Đặc biệt nếu bạn nhìn vào mã của các dự án lớn như Q3A hoặc OpenTTD. Chúng được tạo ra bởi cả một nhóm, với mỗi người có cách thực hành mã hóa khác nhau, ý tưởng khác nhau về cách tạo ra mọi thứ. Bạn sẽ chỉ có được bức tranh lớn chứ không phải những chi tiết nhỏ khiến mọi thứ gắn bó với nhau.

Phát triển, thất bại, thử lại cho đến khi bạn tìm thấy thứ gì đó có vẻ tốt, thất bại lần nữa, rửa sạch và lặp lại cho đến khi bạn có thứ gì đó tốt. Các nhà phát triển khác nhau có nghĩa là những ý tưởng khác nhau về cách thực hiện công cụ. Chỉ vì nó đã được mã hóa bởi Carmack / Bất kỳ nhà phát triển nổi tiếng nào đã tạo ra một trò chơi hay không có nghĩa đó là điều tốt nhất kể từ khi cắt lát bánh mì, và việc thực hiện khác có thể rõ ràng và nhanh hơn.


1

Tôi nghĩ một trong những điều quan trọng nhất bạn có thể làm là chọn một trò chơi mà bạn thích chơi. Điều này sẽ giúp giữ cho bạn quan tâm đến nó và sẽ làm cho bạn quen thuộc hơn với cách mã tự chuyển thành quan điểm của người chơi.

Khi bạn đã chọn trò chơi đó, bất kể nó lớn như thế nào, bạn không cần phải cố gắng tìm hiểu mọi dòng mã hoạt động như thế nào. Chọn một mảnh của nó và nhìn vào đó. Ví dụ: cố gắng tìm hiểu cách lưu trữ dữ liệu người chơi hoặc cách vẽ một mục menu, v.v.

Điều tiếp theo bạn có thể làm, đi cùng với bit trước của tôi, là cố gắng thay đổi điều gì đó. Không phải là một cái gì đó lớn (lúc đầu), chỉ là một cái gì đó đơn giản và đáng chú ý trong trò chơi. Thậm chí một cái gì đó đơn giản như văn bản trên một nút trên menu hoặc thêm một mục menu hoặc thay đổi tính toán thiệt hại. Có lẽ bạn nghĩ rằng họ nên làm một cái gì đó khác đi, cố gắng tự thay đổi nó.

Khi tôi lần đầu tiên quan tâm đến việc phát triển trò chơi, tôi thực sự thích game nhập vai trực tuyến 2D. Vì vậy, tôi đã tìm thấy nguồn cho một trực tuyến và tôi bắt đầu xây dựng nó. Thêm các tính năng của riêng tôi và điều chỉnh mọi thứ, sửa lỗi, v.v. Đó là trong VB6 vài năm trước và bây giờ tôi đang sử dụng C # và XNA và viết trò chơi của riêng tôi từ đầu. Bởi vì tôi rất thích các trò chơi, nó thúc đẩy tôi muốn làm việc với nó, để làm cho nó tốt hơn. Thật trùng hợp, đây cũng là cách tôi học được rất nhiều kỹ thuật lập trình, gỡ lỗi và giải quyết vấn đề mà tôi sử dụng ngày nay trong công việc hàng ngày không liên quan đến trò chơi.

Nó cũng rất hữu ích nếu trò chơi có một cộng đồng các modder mà bạn có thể đặt câu hỏi và nhận trợ giúp cũng như các ví dụ từ đó. Nhưng một lần nữa, ngay cả khi điều đó không tồn tại, bạn đã ở đây và chúng tôi sẵn sàng giúp đỡ.




0

Các cuộn trò chơi Development Kit 2 cho phép bạn thực sự tạo 2D trò chơi và chơi chúng sử dụng một giao diện mà không cần viết mã. Nhưng nó cũng cho phép bạn xem và chỉnh sửa mã được nhúng trong dự án đại diện cho khung / công cụ đằng sau trò chơi. Hầu hết các mã được hiển thị thông qua GUI, mặc dù một phần nhỏ của mã được tạo mã dựa trên nơi bạn đặt các họa tiết và những gì bản đồ bạn tạo. Tuy nhiên, ngay cả mã này cũng hiển thị nếu bạn tạo dự án và sau đó mở các tệp kết quả trong Visual C # Express. Toàn bộ chương trình (IDE) cũng là nguồn mở. Nó được xây dựng trên thư viện OpenTK (được sử dụng để giao tiếp với OpenGL từ C #), đây cũng là nguồn mở.


Tôi sẽ xem xét nó, nhưng tôi là một lập trình viên, vì vậy viết mã không phải là vấn đề lớn.
jumpnett
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.