저는 며칠 동안 SDL을 사용 해왔고, 자습서를 따라 Galaga의 복제본을 개발하기로 결정했습니다. 그러나 필자는 코드 작성을 위해 적절한 레이아웃을 찾기가 어려웠다.SDL을 사용하는 게임을위한 코드 구성
예를 들어, I는 다음과 같이 우주선 클래스 정의한 : 스프라이트 등등과 화면상의 위치를 유지하는베이스 클래스이다
class Spaceship : public Sprite
{
public:
Spaceship(SDL_Surface *surface);
Spaceship(const char *filename);
void handleEvent(SDL_Event *event);
};
. 내 생성자는 같은 것이다 : 나는 그것이 내가 "game.h"를 포함 할 필요가 것 때문에 게임 :: screenWidth() 정적 클래스]를 사용하는 것은 불가능합니다 본 적이 무엇부터
Spaceship::Spaceship(SDL_Surface *surface) :
Sprite(surface)
{
m_y = Game::screenHeight() - m_surface->h; //positions the ship at the bottom
}
을하는 기본적으로 주요 게임 클래스이며 기본적으로 무한 루프를 만드는 "spaceship.h"를 포함합니다 (#ifndef 등을 사용하지 않고 성공을 시도했습니다).
- 는 이런 종류의 결과를 얻을 수있다 :
그래서 여기 내 질문에 온다?
- 그렇지 않은 경우 이런 종류의 문제를 방지하려면 코드를 어떻게 구성해야합니까? screen 등등에 관한 정보를 저장하고 game.h와 우주선 둘 다에서 포함시키는 Screen 클래스를 생성해야합니까?
편집 : 내가 첫 번째 문제를 (난 그냥 CPP 파일이 아닌 헤더 파일에 포함 "game.h"을 추가) 극복 할 수있는 방법을 발견했다. 그러나, 나는 아직도이 경우 최고의 디자인 선택이 무엇인지 궁금합니다.
나는 "메인 게임 클래스"를 피함으로써 "메인 게임 클래스"문제를 해결합니다. 이 문제를 해결하는 한 가지 방법은 * main 함수가 필요한 모든 항목을 인스턴스화 한 다음 정적 상태 (전역 변수)에 의존하지 않고 각 클래스가 필요로하는 비트 만 전달하기 위해 Dependency Injection을 사용하는 것입니다. –
"어떻게 프로젝트를 디자인합니까?"라는 질문은 꽤 광범위한 질문입니다.하지만 기본적으로 올바르게하고 있습니다 (학습 프로젝트를 수행 할 때 코드를 디자인 할 때 옳고 그른 방법은 없습니다) – thedaian
@ MerlynMorgan-Graham 고맙습니다. 이 접근 방식도 너무 –