Có một kỹ thuật chung để xử lý trạng thái (nói chung) trong ngôn ngữ lập trình chức năng không? Có nhiều giải pháp trong mọi ngôn ngữ lập trình (chức năng) để xử lý trạng thái toàn cầu, nhưng tôi muốn tránh điều này càng nhiều càng tốt.
Tất cả các trạng thái trong một cách chức năng thuần túy là các tham số chức năng. Vì vậy, tôi cần đặt toàn bộ trạng thái trò chơi (một hashmap khổng lồ với thế giới, người chơi, vị trí, điểm số, tài sản, kẻ thù, ...)) làm tham số cho tất cả các chức năng muốn thao túng thế giới trên một đầu vào hoặc kích hoạt nhất định . Bản thân chức năng chọn thông tin có liên quan từ blob của gamestate, làm một cái gì đó với nó, thao túng gamestate và trả lại gamestate. Nhưng điều này có vẻ như một giải pháp mans nghèo cho vấn đề. Nếu tôi đặt toàn bộ gamestate vào tất cả các chức năng, sẽ không có lợi cho tôi trái ngược với các biến toàn cục hoặc cách tiếp cận bắt buộc.
Tôi chỉ có thể đưa thông tin liên quan vào các hàm và trả về các hành động sẽ được thực hiện cho đầu vào đã cho. Và một chức năng duy nhất áp dụng tất cả các hành động cho gamestate. Nhưng hầu hết các chức năng cần rất nhiều thông tin "có liên quan". move()
cần vị trí đối tượng, vận tốc, bản đồ cho sự va chạm, vị trí của tất cả kẻ thù, sức khỏe hiện tại, ... Vì vậy, cách tiếp cận này dường như cũng không hiệu quả.
Vì vậy, câu hỏi của tôi là làm thế nào để tôi xử lý số lượng lớn trạng thái trong một ngôn ngữ lập trình chức năng - đặc biệt là để phát triển trò chơi?
EDIT: Có một số khung trò chơi để xây dựng trò chơi trong Clojure. Có cách tiếp cận để giải quyết vấn đề này một phần là xâu chuỗi tất cả các vật thể trong trò chơi dưới dạng "thực thể" và đặt nó vào một cái túi lớn. Một chức năng chính Gigant đang nắm giữ màn hình và các đối tượng và xử lý các sự kiện ( :on-key-down
, :on-init
, ...) cho các tổ chức này và chạy vòng lặp hiển thị chính. Nhưng đây không phải là giải pháp sạch mà tôi đang tìm kiếm.
move()
, có lẽ bạn nên chuyển qua đối tượng 'hiện tại' (hoặc một định danh cho nó), cộng với thế giới mà nó đang di chuyển, và chỉ lấy được vị trí và vận tốc hiện tại ... đầu ra là toàn bộ thế giới vật lý, hoặc ít nhất là một danh sách các đối tượng thay đổi.