Có hai lớp trong trò chơi của tôi thực sự hữu ích, nhưng dần dần trở thành một nỗi đau. Tin nhắn và tài sản (tài sản về cơ bản là một thành phần).
Cả hai đều xuất phát từ một lớp cơ sở và chứa một id tĩnh để các hệ thống chỉ có thể chú ý đến những cái mà chúng muốn. Nó hoạt động rất tốt ... ngoại trừ ...
Tôi liên tục tạo các loại tin nhắn và loại tài sản mới khi tôi mở rộng trò chơi của mình. Mỗi lần tôi cần phải viết 2 tệp (hpp và cpp) và một tấn mẫu soạn sẵn để có được một classID và một hoặc hai loại dữ liệu tiêu chuẩn hoặc một con trỏ.
Nó bắt đầu biến việc chơi xung quanh và thử nghiệm những ý tưởng mới thành một việc vặt thực sự. Tôi ước khi tôi muốn tạo một tin nhắn hoặc loại thuộc tính mới, tôi muốn có thể chỉ cần gõ một cái gì đó như
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
thay vì tạo một tệp tiêu đề và cpp, hãy viết một hàm tạo, bao gồm cả lớp cha, v.v.
Đó là khoảng 20 - 40 dòng (bao gồm cả lính canh và tất cả mọi thứ) chỉ để làm những gì hợp lý là 1 hoặc 2 dòng trong tâm trí của tôi.
Có một số mô hình lập trình để có được xung quanh này?
Thế còn với kịch bản (mà tôi không biết gì) ... có cách nào để xác định một nhóm các lớp gần giống nhau không?
Đây là chính xác một lớp trông như thế nào:
// 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 */
Tất cả điều đó chỉ dành cho một Vector 2D và một ID nói rằng sẽ mong đợi một vector 2D. (Cấp, một số thuộc tính có các yếu tố phức tạp hơn, nhưng đó là cùng một ý tưởng)