Có công cụ trò chơi nào sử dụng ngôn ngữ lập trình chức năng không? [đóng cửa]


10

Có công cụ trò chơi nào sử dụng ngôn ngữ lập trình chức năng tương tự như Scheme, Common Lisp, Clojure hoặc JavaScript không?

Tôi đã thử Unity3D nhưng "JavaScript" của họ không thực sự là JavaScript, được gõ mạnh và không hoạt động.


2
Tôi đang sử dụng ThreeJS, nhưng, trong khi nó đầy sự tuyệt vời, nó thiếu một cộng đồng tích cực và tài liệu là một vấn đề nghiêm trọng.
MaiaVictor

5
Tại sao bạn muốn lập trình bằng ngôn ngữ lập trình chức năng? Vấn đề bạn đang gặp phải là gì? Xin hãy cụ thể hơn. Vì thế, câu hỏi này quá chung chung để đưa ra một câu trả lời đúng và nó có xu hướng tạo ra một danh sách các câu trả lời (tất cả đều "chính xác" như thế này: - Clojure kết hợp với bất kỳ công cụ trò chơi Java nào? - Làm thế nào về việc áp dụng một phong cách lập trình chức năng trong một ngôn ngữ không phải là chức năng mỗi se? (Đọc lập trình chức năng trong C ++ của Carmack.) - v.v.
Eric

2
Javascript của Unity3D có chức năng như Javascript thông thường , bạn chỉ cần sử dụng các loại C # 4.0, đại loại như:var add : Func<int, int, int> = ...
fableeal 27/12/12

2
Xem Câu hỏi thường gặp về câu hỏi "Sử dụng công nghệ nào". Câu hỏi này, như các câu trả lời cho thấy, chỉ là tạo ra một danh sách. Nó không mang tính xây dựng vì không có câu trả lời đúng duy nhất (ngoài "Có, có"). Đây không phải là nơi để biên dịch danh sách.
MichaelHouse

2
Đây là một loại vấn đề "công cụ phù hợp cho công việc phù hợp". Lập trình chức năng tập trung mạnh vào việc giảm thiểu và loại bỏ bất cứ khi nào có thể, trạng thái có thể thay đổi. Điều đó có thể hoạt động tốt đối với một số loại ứng dụng nhất định, nhưng nó hoàn toàn trái ngược với cách mà bất kỳ trò chơi nào hoạt động.
Mason Wheeler

Câu trả lời:




2

Tôi không có câu trả lời cho câu hỏi như đã viết, nhưng tôi tin rằng bạn có thể đang cố gắng hỏi "tại sao không có nhiều công cụ trò chơi chức năng hơn" thay vì tìm kiếm một công cụ cụ thể để sử dụng. Nếu đó là chính xác, bạn nên viết lại câu hỏi. Nếu không ... mặc kệ tôi. :)

Một cách tiếp cận chức năng thuần túy không phù hợp cho các trò chơi. Trò chơi (và đồ họa, và vật lý, và AI) và về cơ bản tất cả về những thay đổi trạng thái. Cách tiếp cận chức năng chính xác cho những vấn đề này sẽ là tính toán toàn bộ trạng thái mới một lần trên mỗi vòng lặp, sẽ có hình phạt hiệu năng rất nghiêm trọng so với mã hóa trực tiếp hơn cách thức hoạt động của phần cứng thực tế.

Vì lý do đó mà bạn không thấy bất kỳ công cụ trò chơi kiểu chức năng nào được sản xuất. Nó chỉ đơn giản là mô hình lập trình sai cho phần lớn các vấn đề mà một công cụ trò chơi có nghĩa là để giải quyết. Đó là mô hình lập trình sai cho phần lớn các vấn đề cần được giải quyết trong kịch bản logic và mã logic trò chơi cấp cao hơn. Mặc dù gần như chắc chắn có thể tạo ra một công cụ trò chơi chức năng, nó sẽ chậm, khó sử dụng và cồng kềnh, và sẽ không phục vụ mục đích thực sự nào ngoài việc là một bản demo / đồ chơi gọn gàng để thể hiện.

Điều đó không có nghĩa là lập trình chức năng không có chỗ trong các trò chơi. Tôi sử dụng một kiểu mã hóa rất chức năng (khi thích hợp) trong C #, Unity JavaScript và thậm chí là C ++ 11. Một số vấn đề rất cụ thể là tốt nhất hoặc ít nhất là dễ dàng giải quyết nhất với kiểu chức năng và hầu hết các ngôn ngữ phổ biến hiện nay đều hỗ trợ hình thức lập trình đó, mặc dù theo cách rườm rà hơn so với ngôn ngữ chức năng "thực". Thông thường những vấn đề được giải quyết bằng các phương pháp tiếp cận chức năng không nằm ở mã công cụ cốt lõi, cũng không phải ở mã chạy trong chính trò chơi. Mã hóa chức năng có thể khá có lợi cho các công cụ và xử lý dữ liệu ngoại tuyến (ví dụ như mô hình nướng và các tài sản khác). Người ta cũng cho rằng lập trình GPU có chức năng mơ hồ trong cách viết thuật toán,

Tất nhiên, vẫn có thể tốt nhất để tránh các phương pháp tiếp cận chức năng bên ngoài các trường hợp rất cụ thể vì bạn muốn các công cụ ngoại tuyến này nhanh nhất có thể. Các ngôn ngữ chức năng vượt trội ở chế độ song song, tốt cho một số vấn đề, nhưng sự trừu tượng hóa từ phần cứng có xu hướng dẫn đến hiệu suất đơn luồng rất kém hiệu quả. (Các ngôn ngữ như LISP hoạt động tốt ở đây vì chúng không phải là chức năng thuần túy và trên thực tế, LISP thông thường là đa mô hình.) Điều tồi tệ nhất tuyệt đối cho một công cụ trò chơi hoặc bộ công cụ liên quan là trở thành nút cổ chai cho việc lặp lại nội dung. Một công cụ lạ mắt với nhiều tính năng khiến các nghệ sĩ hoặc nhà thiết kế cấp độ phải mất hàng giờ để làm những gì có thể làm trong 5 phút (hoặc lý tưởng nhất là gần như ngay lập tức) sẽ dẫn đến các trò chơi chất lượng thấp hoặc bị hủy do leo thang ngân sách.


1
Xem: Thư viện trò chơi sạch (Sạch) và Nikki và Rô bốt (Haskell).
Andres F.

1
Câu trả lời này chủ yếu là sai và dường như được dựa trên sự hiểu biết rất kém về các ngôn ngữ chức năng thực tế.
CA McCann

1
Bạn có bất kỳ điểm truy cập thực tế?
Sean Middleditch

4
... Bạn có bao nhiêu kinh nghiệm vận chuyển các trò chơi chất lượng trong ngành bằng các ngôn ngữ chức năng? Nếu bạn có kinh nghiệm, hãy chia sẻ nó. Đưa ra tuyên bố với lời giải thích và biện minh, không kháng cáo về chuyên môn hoặc thẩm quyền, hoặc cáo buộc cá nhân. Khả năng của loại tranh cãi phẫn nộ và cãi nhau cá nhân này chính xác là lý do tại sao câu hỏi này được đóng lại.
Sean Middleditch

4
Bạn đang đặt từ ngữ vào miệng tôi. Tôi không nói rõ mức độ kinh nghiệm của mình vì ý kiến ​​của bạn về chuyên môn của tôi hoàn toàn không liên quan đến chủ đề này. Đừng cho rằng bạn không có thời gian để nêu sự thật trong khi có thời gian để tấn công các cấp độ kỹ năng cá nhân. Bạn có thể có sửa chữa thực sự, nhưng bạn cần phải nêu chúng. "Gã đó sai," không phải là câu trả lời phản hồi có giá trị cho bất cứ ai. Tôi chỉ có thể tuyên bố rằng bạn sai, và sau đó chúng ta có một chu kỳ cãi nhau vô tận và vô nghĩa. Hãy nói tại sao một câu trả lời là sai.
Sean Middleditch

0

Công ty Naugthy Dog đã sử dụng Danh sách trên Công cụ trò chơi của mình và nó được gọi là Hội định hướng trò chơi Lisp.

Một số thông tin có thể được tìm thấy ở đây: http://en.wikipedia.org/wiki/Game_Orients_Ass lanh_Lisp

Một số mẫu mã: http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html

Nó không có sẵn cho sử dụng công cộng.


Nếu bạn nhìn vào mô tả của Wikipedia, có thể nhanh chóng thấy rằng GOAL hầu như không phải là một ngôn ngữ chức năng, dù là tổ tiên của LISP.
Mason Wheeler
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.