मेरे खेल में दो कक्षाएं हैं जो वास्तव में उपयोगी हैं, लेकिन धीरे-धीरे दर्द बन रही हैं। संदेश और संपत्ति (संपत्ति अनिवार्य रूप से एक घटक है)।
वे दोनों एक आधार वर्ग से प्राप्त करते हैं और एक स्थिर आईडी होते हैं ताकि सिस्टम केवल उन लोगों पर ध्यान दे सके जो वे चाहते हैं। यह बहुत अच्छा काम कर रहा है ... सिवाय ...
जब मैं अपना खेल बढ़ाता हूं तो मैं लगातार नए संदेश प्रकार और संपत्ति प्रकार बना रहा हूं। हर बार मुझे अनिवार्य रूप से एक classID और एक या दो मानक डेटा प्रकार या पॉइंटर प्राप्त करने के लिए 2 फाइलें (hpp और cpp) और बॉयलरप्लेट का एक टन लिखने की आवश्यकता होती है।
यह चारों ओर से खेलना शुरू कर रहा है और नए विचारों को वास्तविक रूप से विकसित कर रहा है। मेरी इच्छा है कि जब मैं एक नया संदेश या संपत्ति प्रकार बनाना चाहता हूं, तो मैं बस कुछ टाइप करने में सक्षम होना चाहता हूं
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
हेडर और सीपीपी फ़ाइल बनाने के बजाय, एक रचनाकार लिखना, जिसमें मूल वर्ग, आदि शामिल हैं।
यह लगभग २० - ४० पंक्तियाँ (जिसमें गार्ड शामिल हैं, और सब कुछ शामिल है) सिर्फ वही करने के लिए जो मेरे दिमाग में १ या २ लाइनें हैं।
क्या इसके आसपास कुछ प्रोग्रामिंग पैटर्न है?
स्क्रिप्टिंग के बारे में क्या (जो मुझे कुछ भी नहीं पता है) ... क्या वर्गों का एक गुच्छा परिभाषित करने का एक तरीका है जो लगभग समान हैं?
यहाँ एक कक्षा जैसा दिखता है:
// Velocity.h
#ifndef VELOCITY_H_
#define VELOCITY_H_
#include "Properties.h"
#include <SFML/System/Vector2.hpp>
namespace LaB
{
namespace P
{
class Velocity: public LaB::Property
{
public:
static const PropertyID id;
Velocity(float vx = 0.0, float vy = 0.0)
: velocity(vx,vy) {}
Velocity(sf::Vector2f v) : velocity(v) {};
sf::Vector2f velocity;
};
} /* namespace P */
} /* namespace LaB */
#endif /* LaB::P_VELOCITY_H_ */
// Velocity.cpp
#include "Properties/Velocity.h"
namespace LaB
{
namespace P
{
const PropertyID Velocity::id = Property::registerID();
} /* namespace P */
} /* namespace LaB */
यह सब सिर्फ एक 2D वेक्टर और एक ID के लिए कह रहा है जो 2D वेक्टर की अपेक्षा करता है। (दी गई, कुछ संपत्तियों में अधिक जटिल तत्व हैं, लेकिन यह एक ही विचार है)