当前的节目布局。左操作数包括右操作数。
source.cpp
app.hpp // Also includes SFML libraries with sf namespace
game.hpp
ball.hpp
brick.hpp
plate.hpp
ball类(ball.cpp)的实现引发了很多错误“ sf没有命名类型”。
source.cpp
#include "app.hpp"
int main () {
App app(640, 480, "Arkanoid");
while (app.getWindow()->isOpen()) app.run();
return 0; }
app.hpp
#ifndef ArkanoidApp
#define ArkanoidApp
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "game.hpp"
// code
#endif
game.hpp
#ifndef ArkanoidGame
#define ArkanoidGame
#include "ball.hpp"
#include "brick.hpp"
#include "paddle.hpp"
// code
#endif
ball.hpp
#ifndef ArkanoidBall
#define ArkanoidBall
class Ball
{
public:
Ball(void);
void draw(void);
public: // Setters & getters
private: // Variables
sf::CircleShape circle; // sf is not a class type
sf::Vector2i position; // sf is not a class type
sf::Vector2f direction; // sf is not a class type
private: // Constants
int RADIUS = 8;
int VELOCITY = 6;
};
#endif
答案 0 :(得分:0)
如果您的app.hpp
包含sf,当然ball.cpp
不会知道它并抛出错误,您还需要在ball.cpp
内包含sf。
要避免多个定义,请在头文件中使用#pragma once
。
除此之外,目前还不清楚你要做什么以及为什么要这样做,如果你达到了文件应该包含在一起的地步,这不是一个非常好的设计,应该避免,最好的设计就是一棵树。
修改强>
现在你可以在每个需要它的标题中包含库(app,ball ...)。
但你可以尝试更复杂的东西,如MVC。由于它是一个图形库,您可以创建一个View
并在那里编写所有视图管理,比如打开绘制模型的窗口等。
你在MVC中做的是模型(游戏,球)和视图之间的完全分离,因为你可以用不同的方式显示模型,一个在2D中,另一个在3D中,每个可以使用不同的库和视图但是模特还是一样的。
有很多设计,没有正确的设计,只要它易于理解和维护/添加功能,它就是一个很好的设计。