Ngôn ngữ chức năng nào phù hợp nhất để tạo trò chơi với? [đóng cửa]


19

Tôi đã để mắt đến các ngôn ngữ lập trình chức năng trong một thời gian, nhưng tôi đang do dự để thực sự hiểu chúng. Nhưng tôi nghĩ đã đến lúc tôi ít nhất bắt đầu liếc nhìn hướng đó để chắc chắn rằng tôi đã sẵn sàng cho mọi thứ.

Tôi đã thấy nói về Haskell, F #, Scala, v.v. Nhưng tôi không biết gì về sự khác biệt giữa các ngôn ngữ và cộng đồng của họ, tôi cũng không đặc biệt quan tâm; ngoại trừ trong bối cảnh phát triển trò chơi.

Vậy, từ quan điểm phát triển trò chơi, ngôn ngữ lập trình chức năng nào có nhiều tính năng phù hợp nhất với lập trình trò chơi? Ví dụ, có bất kỳ thư viện / công cụ / khung hoặc công cụ đồ họa phát triển trò chơi chức năng nào cho các ngôn ngữ chức năng không? Có ngôn ngữ nào xử lý các cấu trúc dữ liệu nhất định thường được sử dụng để phát triển trò chơi tốt hơn không?

Điểm mấu chốt: ngôn ngữ lập trình chức năng nào là tốt nhất cho lập trình trò chơi chức năng, và tại sao?

Tôi tin / hy vọng câu hỏi này sẽ tuyên bố một ngôn ngữ tốt nhất rõ ràng do đó tôi đã không đánh dấu CW mặc dù xu hướng chủ quan của nó.


2
"Ý bạn là gì, trò chơi 2D hay trò chơi 3D?" "Huh? Tôi không biết - aieeee "
Cyclops

@ Cyclops uh, cái gì? Tôi không hiểu ...
Ricket

@Ricket, một phần là yêu cầu làm rõ loại trò chơi mà bạn đang nói đến, 2D hoặc 3D (và có thể theo thời gian thực hoặc theo lượt). Một phần đó là một trò đùa Monty-Python che khuất phần đầu tiên. Wups. :) Và tôi nghĩ việc chỉ định loại trò chơi là hữu ích - trừ khi có một ngôn ngữ chức năng duy nhất hoàn hảo cho mọi thứ , thì các ngôn ngữ khác nhau có thể tốt hơn ở những thứ khác nhau.
Cyclops

Tôi không tin 2D hoặc 3D tác động đến lựa chọn ngôn ngữ, ngoại trừ bởi nhiều loại công cụ / thư viện có sẵn cho một ngôn ngữ. Cá nhân tôi quan tâm đến cả 2D và 3D vì vậy tôi đã không nghĩ đến cái này hay cái kia khi viết câu hỏi này. Nhưng nhìn chung, các trò chơi 2D và 3D chia sẻ rất nhiều hệ thống và cấu trúc dữ liệu phổ biến (ví dụ: âm thanh, đầu vào, AI, cấu trúc chương trình, vòng lặp trò chơi) và có nhiều trò chơi 3D có thể được chuyển sang 2D hoặc ngược lại. Và vâng, tôi chưa thấy Monty Python vì vậy đó là lý do tại sao tôi không hiểu gì về nó cả. :)
Ricket

1
Tôi không nghĩ rằng có một câu trả lời chắc chắn về ngôn ngữ tốt nhất.
Wei Hu

Câu trả lời:


12

F # là một phần của gia đình microsofts .net có quyền truy cập vào XNA, đây là một cơ sở tuyệt vời để xây dựng trò chơi. Một chút googling bật lên một số hướng dẫn, video và bài viết. Các tài liệu XNA tuyệt vời cũng sẽ giúp.

Cũng có một số chuyển động trong các trò chơi cho Haskell, xem tại đây . Có lẽ bạn sẽ sử dụng các ràng buộc openGL.

Vì Scala chơi ở vùng đất Java, nó tích hợp với tất cả các công cụ / ràng buộc Java có sẵn, hãy xem SO này bài đăng .

Tôi nghĩ rằng nó tùy thuộc vào sở thích, trong khi tôi chỉ chơi với Haskell, tôi tưởng tượng mỗi ngôn ngữ chức năng đều có những đặc điểm riêng. Có thể đáng để đánh bại một trò chơi thử nghiệm nhỏ trong mỗi trò chơi và xem cái nào cảm thấy tốt hơn cho bạn.

Giống như tôi đã nói tôi chỉ có kinh nghiệm Haskell tối thiểu, vì vậy tôi không thể nhận xét về điều tốt nhất, nhưng những tài nguyên này sẽ giúp bạn bắt đầu hy vọng.


2
Giữa các vấn đề với JVM và sự non nớt của việc triển khai trình biên dịch, tôi thấy hiệu năng của Scala không được chấp nhận khi sử dụng một kiểu chức năng, mặc dù chính ngôn ngữ này hỗ trợ tốt cho nó. Nó kết thúc nhanh như, giả sử, Python hoặc Ruby, không phải F # hay OCaml. (Tốc độ của Scala cạnh tranh cho nhiều kiểu OO / thủ tục hơn.)

Tôi thực sự có một dự án F # đang chạy XNA (đó là một cửa sổ XNA trống rỗng với màu xanh hoa ngô, chỉ có mã là F # chứ không phải C #.
RCIX

8

Tôi sẽ nói Lisp.

Nó đã được sử dụng trong các trò chơi như một ngôn ngữ kịch bản, ít nhất là tại Naughty Dog (hoặc theo tôi nghĩ), và là một ngôn ngữ rất trưởng thành.

Ưu điểm của Lisp là trong quá trình khử lưu huỳnh, đây là một phần chính của cái mà chúng ta gọi là quản lý tài sản. Deserializing lisp là tầm thường, mã và dữ liệu là một. Điều này giúp dễ dàng có định dạng tệp cho tài sản và hành vi. Nó không giống như bạn một trong json / xml / yaml / bin và một tệp F # cho AI. Bạn có thể lưu mọi thứ dưới dạng biểu thức s sẽ đơn giản hóa rất nhiều đường ống tài sản.


TBH tôi muốn đề nghị chống lại điều này. Ngôn ngữ kịch bản không chỉ dành cho nhà phát triển sử dụng; Các modder sẽ muốn sửa đổi trò chơi, và không có gì khiến họ sợ hãi nhanh hơn (() ()))) () ((()). Ngoài ra, ngay cả khi các ngôn ngữ chức năng đi, Lisp là bí truyền.
RCIX

7
Nếu sợ các modder là điều khiến bạn lo lắng, thì việc sử dụng ngôn ngữ chức năng có lẽ không phải là bước đi đúng đắn.
Paul Wicks

3
@RCIX & @Joe - Sức mạnh của Necro HOẠT ĐỘNG. Dù sao, Scheme được sử dụng như một ngôn ngữ giảng dạy. SICP giống như một nửa bằng cấp CS trong một cuốn sách và được sử dụng bởi một loạt các trường học (bao gồm cả MIT cho đến gần đây), và HTDP là một giới thiệu ít khó khăn hơn.
Jesse Millikan

1
@RCIX & Joe thực sự. lisp & chương trình là các ngôn ngữ giới thiệu ở rất nhiều trường đại học.
oberhamsi

1
Lisp không phải là thứ bạn muốn sử dụng. Chó nghịch ngợm có MỘT, lập trình viên Lisp duy nhất và khi anh bỏ cuộc, họ đã chuyển tất cả (các) công cụ của họ sang C ++. Không biết tại sao một công cụ lỗi thời từ một công ty lại bị lôi ra làm ví dụ sáng ngời mọi lúc =)
Patrick Hughes

8

Sau khi có được một số kinh nghiệm thực tế với nó, tôi sẽ bỏ phiếu cho Clojure - đã viết một trò chơi nhỏ trong đó và lên kế hoạch để làm nhiều hơn nữa.

Lý do:

  • Năng suất - Clojure là một ngôn ngữ năng động. Nó có các tính năng tuyệt vời để phát triển kiểu REPL tương tác, ví dụ bạn có thể sử dụng REPL để truy vấn hoặc thay đổi trạng thái bên trong một phiên bản ứng dụng trò chơi đang chạy. Mã trong Clojure cũng thường ngắn gọn súc tích. Tôi đoán tôi có năng suất cao hơn 3-5 lần trong Clojure so với Java hoặc C #.
  • Không tinh khiết - trong khi tôi đánh giá cao vẻ đẹp và sự thanh lịch của các ngôn ngữ chức năng thuần túy như Haskell, lập trình trò chơi là một sự theo đuổi lộn xộn, nơi chủ nghĩa thực dụng chiến thắng. Tôi muốn có thể đặt các tác dụng phụ vào các chức năng của mình khi tôi cần và Clojure cho phép điều này. Đã nói rằng, phong cách Clojure thành ngữ hầu hết là chức năng hầu hết thời gian .
  • Siêu lập trình - Di sản Lisp của Clojure như một ngôn ngữ đồng âm làm cho nó trở nên tuyệt vời cho việc tạo siêu dữ liệu / tạo mã. Thật dễ dàng để "mở rộng ngôn ngữ" để tạo DSL của riêng bạn hoặc loại bỏ bản ghi sinh học. Bạn có thể dễ dàng sử dụng Clojure làm ngôn ngữ kịch bản trò chơi của riêng mình và quá trình biên dịch mã động có nghĩa là các tập lệnh của bạn sẽ chạy nhanh như công cụ trò chơi cốt lõi của bạn.
  • Truy cập vào các thư viện Java . Bạn có thể sử dụng tất cả các thư viện âm thanh / đồ họa / AI / mạng từ Java, đây là một lợi thế rất lớn so với hầu hết các ngôn ngữ chức năng khác (nơi bạn sẽ phải viết chúng từ đầu hoặc phát triển rất nhiều mã giao thoa phức tạp). Đây có thể là một cứu tinh.
  • Đa nền tảng - điều này miễn phí khi chạy trên JVM, nhưng đó là một phần thưởng tuyệt vời.
  • Hiệu suất - đối với một ngôn ngữ chức năng động, Clojure có tốc độ nhanh nhất có thể. Nó luôn được biên soạn JIT, không bao giờ được giải thích. với tối ưu hóa thông minh, bạn có thể phù hợp với tốc độ của mã Java cấp thấp, thuần túy trong Clojure. Ví dụ, bạn có thể sử dụng các mảng nguyên thủy Java hoặc cung cấp các gợi ý kiểu để đảm bảo rằng trình biên dịch tạo ra các lệnh gọi hàm được nhập tĩnh trong mã quan trọng về hiệu năng.
  • Đồng thời - Clojure có một mô hình tuyệt vời để quản lý trạng thái đồng thời, được hỗ trợ bởi hệ thống bộ nhớ giao dịch phần mềm ấn tượng. Đáng xem video này để hiểu thêm về cách thức này hoạt động.

Lần duy nhất tôi không xem xét Clojure là nếu tôi đang viết một game chuyên sâu về đồ họa hiện đại, nơi bạn cần hiệu năng vượt trội (nơi tôi vẫn nghĩ bạn cần C / C ++).

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.