Bu çoğunlukla FP hakkında teorik bir sorudur, ama benim açımdan göstermek için metin maceraları (eski okul Zork gibi) alacağım. FP ile durumsal bir simülasyonu nasıl modelleyeceğiniz hakkındaki görüşlerinizi bilmek istiyorum.
Metin maceraları gerçekten OOP gerektiriyor gibi görünüyor. Örneğin, tüm "odalar" bir Roomsınıfın örnekleridir , taşıyabileceğiniz şeyler Itemgibi temel bir sınıfa ve arayüzlere sahip Item<Pickable>olabilirsiniz.
FP'de dünya modellemesi farklı çalışır, özellikle oyun ilerledikçe değişmesi gereken bir dünyada değişmezliği zorlamak istiyorsanız (nesneler taşınır, düşmanlar yenilir, puanlama büyür, oyuncu yerini değiştirir). Her Worldşeye sahip tek bir büyük nesne hayal ediyorum : keşfedebileceğiniz odalar, nasıl bağlantılı oldukları, oyuncunun ne taşıdığı, hangi kolların tetiklendiği.
Ben saf bir yaklaşım temelde bu büyük nesneyi herhangi bir fonksiyona geçmek ve onlar tarafından döndürmek (muhtemelen değiştirilmiş) olacağını düşünüyorum. Örneğin, ben moveToRoomalır Worldve World.player.locationyeni odaya değiştirildi ile döndüren bir işlevi var , World.rooms[new_room].visited = Truevb.
Bu daha "doğru" yol olsa bile, bunun uğruna saflığı güçlendiriyor gibi görünüyor. Programlama diline bağlı olarak, bu potansiyel olarak çok büyük Worldnesneyi ileri geri taşımak pahalı olabilir. Ayrıca, her işlevin herhangi bir Worldnesneye erişimi olması gerekebilir . Örneğin, bir odaya su basmış olabileceği için başka bir odada tetiklenen bir kola bağlı olarak erişilebilir veya olmayabilir, ancak oyuncu can yeleği taşıyorsa, yine de girebilir. Bir canavar saldırgan olabilir veya oyuncunun kuzenini başka bir odada öldürüp öldürmediğine bağlı olabilir. O Bu araçlar roomCanBeEnteredişlev erişmesi gereken World.player.invetoryve World.rooms, describeMonstererişim ihtiyaçları World.monstersve böylece temelde, siz (on gerekirtüm yükü çevirin). Bu, özellikle FP'de iyi bir programlama tarzı dışında olsa bile, küresel bir değişken çağırmak için bana gerçekten benziyor.
Bu sorunu nasıl çözersiniz?