Triết lý / cấu trúc mã trừu tượng / thiết kế chương trình nào sẽ cho phép một trò chơi được sử dụng với cả đồ họa 2D và 3D (riêng biệt) mà KHÔNG phải mã hóa lại logic trò chơi?
Chúng ta đang nói về việc sử dụng cùng một mã, thay đổi tối thiểu mọi thứ (ví dụ: trao đổi tên tệp cho tài sản 2D bằng tên tệp cho tài sản 3D) và có thể cắm một vài chuyên ngành của lớp cơ sở cho mỗi mẫu chung / mẫu.
Để đặt nó trong một bối cảnh thực tế, có ý nghĩa: hãy tưởng tượng một trò chơi nhiều người chơi trong đó có một ứng dụng khách 3D nổi tiếng, hiệu năng cao cho người chơi với một số game thủ thực sự giỏi và một máy khách 2D khiêm tốn hơn cho người cũ hộp bụi mà ai đó tìm thấy trên gác mái của họ. Nhưng đây vẫn là cùng một trò chơi - các sự kiện tương tự đã được đăng ký (ai đó nhặt được một đồng xu), cùng một giao thức Mạng được sử dụng, các thế giới tỷ lệ thuận, v.v.
Để đặt nó trong ngữ cảnh MVC: Bộ điều khiển giống hệt nhau (nhấn phím "Lên" sẽ đặt tốc độ tăng tốc của người chơi ở mức 3,5 đơn vị / giây), Chế độ xem hoàn toàn khác nhau (2D so với 3D) và Mô hình giống nhau ngoại trừ mọi thứ liên quan trực tiếp đến đồ họa (kiểm tra va chạm cho môi trường được thực hiện cứ sau 5 giây và nó sử dụng cùng một thuật toán. Lưu ý rằng điều này có nghĩa là có tọa độ Z cho tất cả các Đối tượng trò chơi trong phiên bản 2D, nhưng nó chỉ bị bỏ qua hoặc hiển thị cho người dùng theo một cách khác, ví dụ như một bóng được hiển thị xa hơn khi người chơi ở trên không).
Điều làm cho chủ đề này trở nên hấp dẫn là nó sẽ khiến nhà phát triển có một ý tưởng rất rõ ràng về cách dữ liệu của anh ta được cấu trúc và cách điều khiển chảy. Lưu ý rằng điều này không ngụ ý sử dụng bất cứ thứ gì ngoài thư viện đồ họa như SDL, D3DX hoặc OpenGL. Không có công cụ trò chơi!
Vì đây là câu hỏi chủ yếu về mặt lý thuyết, tôi sẽ bỏ các ngôn ngữ lập trình ra khỏi nó, nhưng nếu bạn muốn đưa ra một ví dụ, bạn có thể sử dụng bất kỳ ngôn ngữ nào bạn thích, C ++ nếu bạn muốn sử dụng toàn bộ con lợn hoặc thậm chí là Brainfuck nếu bạn cảm thấy cho đến thử thách (Bất kỳ câu trả lời cụ thể nào cũng sẽ được đánh giá cao, cũng như bất kỳ câu trả lời trừu tượng nào!).