我现在已经使用这段代码了一段时间,我通常会在它前面创建一个“ID”的类,将它放在一个头文件中,然后创建一个.cpp文件并放一个名为“IDClassnameLocal”的类”。我在抽象头类中创建纯虚函数,然后在.cpp类中创建普通的虚函数,并让它继承抽象头类。
这是不好的代码设计,我是否有效编码?
示例:
// Player.h // ////////////////////////////////////////////////////////////////
class IDPlayer {
public:
virtual ~IDPlayer(void) {} // Destructor
virtual void PlayerData(void) = 0;
virtual void Controls(void) = 0;
};
extern IDPlayer* idplayer;
// Player.cpp // //////////////////////////////////////////////////////////////
class IDPlayerLocal : public IDPlayer {
public:
IDPlayer(void) {} // Constructor
virtual void PlayerData(void);
virtual void Controls(void);
};
IDPlayerLocal idplayerLocal;
IDPlayer* idplayer = &idplayerLocal;
// Class Function Definitions
void IDPlayerLocal::PlayerData(void) {
Player.X = 400;
Player.Y = 500;
Player.W = 20;
Player.H = 20;
Player.VelocityX = (float)0.31;
Player.VelocityY = (float)0.31;
}
void IDPlayerLocal::Controls(void) {
if(::MainGame) {
if(KEY_DOWN(0x41)) { // A
Player.X = Player.X - Player.VelocityX;
if(Player.X <= 0)
Player.X = 0;
}
if(KEY_DOWN(0x44)) { // D
Player.X = Player.X + Player.VelocityX;
if(Player.X+Player.W >= 650)
Player.X = 650 - Player.W;
}
if(KEY_DOWN(0x57)) { // W
Player.Y = Player.Y - Player.VelocityY;
if(Player.Y <= 0)
Player.Y = 0;
}
if(KEY_DOWN(0x53)) { // S
Player.Y = Player.Y + Player.VelocityY;
if(Player.Y+Player.H >= 570)
Player.Y = 570 - Player.H;
}
if(KEY_DOWN(VK_SPACE)) {
}
}
}
// Core.cpp // ////////////////////////////////////////////////////////////////
// ...
// Intialized Data //
idplayer->PlayerData();
while(TRUE) {
// ...
// Loop Data //
idplayer->Controls();
// ...
}
// ...
答案 0 :(得分:5)
只要你在整个代码中使用相同的样式,除非不可读,否则样式真的很糟糕。我能够毫不费力地完成你的代码所以我会说这是一个很好的风格。在整个项目中保持一致。
答案 1 :(得分:1)
在某些情况下,您所做的事情可能会有用,但肯定不适用于所有课程。你需要有意识地决定这是否适合你的班级。所以采用这种方法作为“代码风格”将是一件坏事。
答案 2 :(得分:0)
IDPlayer* idplayer = &idplayerLocal
您是否有理由不使用引用(IDPlayer& idplayer = idplayerLocal
)(float)0.31
很奇怪。要么明白地做0.31
,要么使用像f(float)或d(double)这样的后缀(我想我不记得我的后缀)。::MainGame
另一个全球但在游戏中我确实拥有全球性,所以很好。但你真的需要使用::
吗?它不错,但似乎很有趣,我不会想到搜索if(::
while(gameRunning)
而不是true
。除非你有复杂的ifs打破循环然后它的好用(while)或while(1)