एक उदाहरण के रूप में, यहां बताया गया है कि मेरी वर्तमान रॉगुलाइक परियोजना कैसे संरचित है (जावा में)। यह एक 2D ग्राफिक्स इंजन का उपयोग कर रहा है, इसलिए मेरे लिए पहले से ही बहुत सारे प्रतिपादन कोड का ध्यान रखा गया था। आलोचना का स्वागत किया है।
class Game
यह वर्ग राज्य मशीन स्थापित करता है जो खेल की वर्तमान स्थिति का प्रबंधन करता है। (एक मेनू में बनाम एक नया गेम शुरू करने बनाम एक सहेजा गया गेम खेलना)
interface State
प्रत्येक राज्य वर्ग में दो लूप होते हैं: तर्क को अपडेट करने के लिए एक लूप और रेंडरिंग के लिए एक लूप। उनमें Game
क्लास को कॉल करने और एक अलग राज्य में बदलाव का अनुरोध करने के लिए कोड भी हैं ।
class ResourceManager
एक सिंगलटन जो उस Game
वर्ग द्वारा आरम्भ किया जाता है जो सभी आवश्यक संसाधनों को लोड करता है और उन तक पहुँच की अनुमति देता है। मुझे यह डिज़ाइन पसंद नहीं है क्योंकि यह विभिन्न स्तरों पर संसाधनों को लोड / अनलोड करना कठिन बनाता है, उदाहरण के लिए। अगर मैं शुरू कर रहा था तो मैं इसे अलग तरह से डिजाइन करूंगा।
class Map
मानचित्र में टाइलों की एक सरणी और मानचित्र पर सभी प्राणियों और वस्तुओं की एक सूची होती है। यह काफी बुनियादी वर्ग है।
class Creature
जीवों को अपने बारे में जानकारी होती है, जिसमें मूवमेंट कैलकुलेशन (उन्हें यह जानने की आवश्यकता होती है कि वे किस मैप में हैं, और बाधाओं के बारे में पता लगाने के लिए इसे क्वेरी करने में सक्षम हैं)। यह तय करना कि क्या ऐसा करना है, या किसी प्रकार के प्रबंधक वर्ग ने सभी प्राणियों के लिए इसका ध्यान रखा है, कुछ ऐसा है जिसके साथ मैं संघर्ष करता हूं।
interface AITask
जीवों के पास एआईटीकेएस की एक सूची हो सकती है, जो हर बार प्राणी के लॉजिक लूप चलने पर निष्पादित होती हैं। AITask का अपना लॉजिक लूप है जो प्राणी को आदेश जारी करता है, और एक समाप्ति स्थिति जो यह निर्धारित करती है कि कार्य सफलतापूर्वक पूरा हुआ या नहीं।
interface UIElement
मैंने इस इंजन के लिए अपना खुद का यूआई लागू किया। प्रत्येक UIElement में एक रेंडरिंग लूप और एक लॉजिक लूप होता है। उनके पास कीबोर्ड / माउस इनपुट प्रोसेसिंग के लिए एक लूप भी है। सभी तत्वों में कई बच्चे तत्व हो सकते हैं, जो उनके माता-पिता के बाद प्रदान किए जाते हैं, और कीबोर्ड / माउस इनपुट को संभालते हैं। यह आपको उदाहरण के लिए, सबमेनस के साथ मेनू देता है।