Hangi kod felsefesi / soyutlama / program tasarımının yapısı, oyun mantığını yeniden kodlamak zorunda kalmadan oyunun hem 2D hem de 3D grafiklerle (ayrı olarak) kullanılmasına izin verir?
Aynı kodu alarak, minimum şeyleri değiştirerek konuşuyoruz (örneğin, 3D varlıklar için dosya adlarıyla 2B varlıkların dosya adlarını değiştirin) ve belki de her bir jenerik / şablon için bir temel sınıfın birkaç uzmanlığını ekliyoruz.
Bunu mantıklı bir yere yerleştirmek için: gerçekten çok iyi oyun donanımlarına sahip oyuncular için bir birinci sınıf, performansa aç 3D istemcinin ve eski için daha mütevazi bir 2D istemcinin olduğu bir LAN çok oyunculu oyun hayal edin birinin tavan arasında bulduğu tozlu kutular. Ama yine de aynı oyun - aynı olaylar kaydedildi (birisi para aldı), aynı Ağ protokolü kullanılıyor, dünyalar orantılı, vb.
Bir MVC bağlamına koymak için: Kontrolörler tamamen aynıdır ("Yukarı" tuşuna basmak oyuncuların ivmesini saniyede 3,5 birim ayarlayacaktır), Görünümler tamamen farklıdır (2B'ye karşı 2D) ve Model aynıdır doğrudan grafiklerle ilgili herhangi bir şey hariç (ortam için bir çarpışma kontrolü her 5 saniyede bir yapılır ve aynı algoritmayı kullanır.Bu, 2D sürümdeki tüm Oyun Nesneleri için bir Z koordinatı olduğu anlamına gelir, ancak sadece göz ardı edilir veya başka bir şekilde kullanıcıya gösterilir; örneğin, oynatıcı havada olduğunda daha solda görüntülenen bir gölge ile).
Bunu bu kadar büyüleyici bir konu yapan şey, geliştiricinin verilerinin nasıl yapılandırıldığı ve kontrolün nasıl aktığı hakkında çok net bir fikre sahip olmasını zorlamasıdır. Bunun SDL, D3DX veya OpenGL gibi bir grafik kütüphanesinden başka bir şey kullanmadığı anlamına gelmez. Oyun motoru yok!
Bu çoğunlukla teorik bir soru olduğundan, programlama dillerini bunun dışında bırakacağım, ancak bir örnek vermek isterseniz, istediğiniz dili kullanabilirsiniz, tüm domuz gitmek istiyorsanız C ++, hatta hissediyorsanız Brainfuck (Herhangi bir somut cevap ve ayrıca soyut cevaplar takdir edilecektir!).