IDraw, ICollidable인터페이스

jh Seo·2023년 7월 22일
0

IDraw.h

#ifndef _IDraw_H
#define _IDraw_H

class IDraw
{
public:
    virtual void Draw()=0;
};

#endif

ICollidable.h

#ifndef _ICollidable_H
#define _ICollidable_H
#include "Snake.h"

class ICollidable{
public:
    virtual void whenCollided(Snake* player)=0;
};

#endif

단순한 인터페이스이다.

IDraw를 상속받을 시, 순수가상함수인 Draw()를 구현해야하고,
ICollidable을 상속받을 시, 순수가상함수인 whenCollided()를 구현해야한다.

IDraw는 [SnakeGame객체] 에서 vector로 관리한다.
IDraw를 상속받는 다른 객체들을 선언해줄 때,
snakegame객체에서 인자로 해당 벡터를 참조형으로 넘겨주며 ,
상속받는 객체의 생성자에서 자신을 vector에 넣어준다.

Display함수를 호출할때 해당 벡터의 모든 원소의 Draw함수를 호출한다.

ICollidable의 whenCollided함수는 CollisionManager에서 호출한다.
[CollisionManager클래스]
플레이어 snake객체의 머리좌표에 다른 충돌체가 있는지 map에서 탐색한 후,
해당 좌표에 다른 충돌체가 있다면 충돌체의 whenCollided를 호출하는 형식이다.

생각

최대한 그리기 호출과, 충돌처리호출을 간편하게 구현하기 위해 애쓴 구조이다.
이렇게 interface로 만들고 해당 인터페이스의 작용이 필요한 객체들이 상속받게 한다.
이 인터페이스를 상속받는 객체들을 관리하는 클래스를 따로 만들고
해당 클래스에서 한번에 처리하도록 구현해봤다.

profile
코딩 창고!

0개의 댓글