如何布置程序

How to layout a program?

本文关键字:程序 何布置      更新时间:2023-10-16

我正在制作一个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_WIDTHAPP_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对应用程序一无所知。