如何布置程序
How to layout a program?
我正在制作一个Arkanoid克隆。这是我想出的程序布局:
source.cpp // few lines
App class // has constants APP_WIDTH and APP_HEIGHT
Ball class // has constant RADIUS
Brick class
Paddle class
现在我想在比赛开始时把球放在窗口的中心。通常我会这样完成:
Ball::Ball (App &app)
{
circle.setPos(app->WINDOW_WIDTH/2-RADIUS/2,app->WINDOW_HEIGHT/2-RADIUS/2)
}
但是球班对这个应用程序一无所知!
我需要使APP_WIDTH
和APP_HEIGHT
成为全局变量吗?
或者我需要把当前的应用程序布局颠倒过来,这样Ball类就有了#include "app.hpp"
语句?
编辑:或者我需要在应用程序类中声明ball、brick和paddle类吗?但我在哪里定义它们呢?在同一个应用程序类中?然后球头变得太大了!
也许互联网上有一些关于程序布局主题的好教程?我没有找到任何。。。
问题2:如果"球没有理由知道应用程序类的任何信息",为什么类需要受保护的变量
由于问题似乎是"Ball无法访问应用程序类的私人成员。",所以您可能想制作一个getter。
getter是一个返回私有字段值的公共方法。
如果你这样做,你可以访问像这样的成员的值
circle.setPos(app->GetWidth()....
您的getter可能与以下相似
public int GetWidth(){返回此。APP_WIDTH;}
游戏对象没有理由知道它们所属的App
。当它需要来自App
的任何信息时,它应该直接从App
接收这些信息。这可以通过setter方法(当应用程序稍后可以更改属性时,如球的位置)或构造函数(建议用于不会更改的东西,如块的位置)来实现。
Ball应该有一个SetPosition(x,y),应用程序通过上面的计算调用它。在内部,这个SetPosition会像上面一样设置圆圈,所以ball对应用程序一无所知。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 如何布置程序
- C++中内存泄漏本身存在多长时间,以及等效的Java程序有何不同
- 我的常量和非常量链表迭代程序有何不同