리눅스의 ncurses라이브러리를 통해 간단한 뱀게임을 만들어본 과정을 되짚으며 정리하는 글이다. 추후 메모리 관련해서 smart_pointer을 공부한 후, 적용 해볼 예정이다.맵에는 0으로 표시되는 포탈이 있고, X으로 표시되는 벽이 있다.뱀 길이가 늘어나는 아이템
모든 ncurses의 함수를 사용하려면 당연하지만 를 해줘야한다. main함수 간단하다. SnakeGame클래스를 하나 생성 후 StartGame()함수를 호출하도록 구현하였다. SnakeGame.h 사용되는 클래스로는 Snake, 플레이어 뱀 클래스 Boar
멤버 변수로는 1\. snake의 몸들의 좌표들을 가지고있는 deque2\. 현재머리좌표를 pair<int,int>형으로 가지는 curHead3\. 이전 머리 좌표를 가지고 있는 prevHead4\. direction을 switch로 사용하기 위해서 char형으로
현재 뱀게임에선 벽과 관련된 부분은 벽하나를 wall클래스로 두고, 벽들을 관리하는 Board클래스 이렇게 나뉘어있다.각 벽은 IDraw, ICollidable을 상속받으며 해당 인터페이스의 가상함수를 구현한다.멤버변수로는 좌표를 가지고있다.충돌했을 땐, 플레이어의 D
충돌처리 매니저와 첫번째 게이트의 좌표, 두번째 게이트의 좌표를 관리한다.생성자로는 vector<IDraw\*>& 을 인자로 받아와 해당 벡터에 게이트 객체를 등록해준다. 그 후, 충돌처리매니저를 통해 게이트 좌표를 매핑해준다.그 좌표에 벽이 이미 있다면 해당 벽
단순한 인터페이스이다. IDraw를 상속받을 시, 순수가상함수인 Draw()를 구현해야하고,ICollidable을 상속받을 시, 순수가상함수인 whenCollided()를 구현해야한다.IDraw는 \[SnakeGame객체] 에서 vector로 관리한다.IDraw를 상속
충돌처리 매니저는 싱글턴 패턴을 통해 구현을 해봤다.여러 객체에서 등록이 편하도록 구현을 해봤다.싱글턴 패턴을 찾아보니 구현을 다양하게 할 수 있었는데 ,늦은 초기화를 통한 이 방식이 메모리관점에서 효율적이라고 해서 구현해봤다.\[싱글턴 패턴 정리]충돌체들을 관리하는
Main에서 호출하는 getInput함수이다. 주의할점은 getch함수는 입력값이 있을때까지 blocking이 되는 함수이다.따라서 메인에서 함수를 실행해야 non-blocking으로 작동해서 프로그램이 멈추지않는다.
ItemManager에서 관리하는 각 Item에 대한 구현이다.멤버변수로는 독 여부에 대한 bool형 변수 isPoison,현재 사용 여부에 대한 bool형 변수 isUsing,위치 정보에 대한 posX,posY,수명 주기에 대한 변수 lifeTime을 넣었다.수명주기
멤버 변수로는 싱글턴으로 관리되는 충돌처리매니저의 인스턴스를 가지고,\[충돌처리매니저 구현]Item객체들을 관리하는 vector를 가진다.\[아이템 구현]생성자의 인자로 Idraw인터페이스를 상속받는 객체들을 관리하는 벡터를 받는다.매 아이템 생성마다 새로운 객체를 생