[snake] 1.초기설정

박동철·2021년 6월 18일
0

스네이크게임

목록 보기
1/2
post-thumbnail

개요

기말고사도 끝났고 할일도 없어서 무엇을 할까 고민하다가 c++의 객체지향에 대해서 정확하게 알고 싶어서 c++로 스네이크 게임을 만들기로 했다.

스네이크 게임이란?

방향키로 조작하는 간단한 게임이다. 뱀이 먹이(사진에서는 사과)를 먹으면 그 길이가 점점 커진다. 그렇게 계속 먹이를 먹다가 자신에게 부딪히면 게임이 종료된다.

실행환경

zsh셸에서 동작한다. c++을 g++로 컴파일 해 만든다.

목표

객체지향을 공부하는게 목표이기 때문에 프로젝트를 차례차례 키워나가야 한다.

1단계 - 일반적인 스네이크 게임을 만든다.
2단계 - 네트워크 통신을 통해 친구들의 순위를 알 수 있게 한다.
3단계 - 실시간으로 친구들과 경쟁할 수 있게 만든다.

파일구성

파일을 다음과 같이 나누었다.

-Maingame // 게임 로직과 관련된 것이 담긴다.
-graphic // 콘솔창에 게임을 그리는데 사용한다.
-Info // 데이터들이 담긴다.

생각했던 것 만큼 파일을 많이 분할하지 않았다. 만들다보면 더 파일들이 늘어나지 않을 까 기대해본다.

Info class

Info.h

#ifndef INFO_H
#define INFO_H
class Info {
private : 
	const int Width = 15,Height = 15;
public:
	int ** data;
	Info();
	int getWidth();
	int getHeight();
};
#endif

width와 height은 나중에 사용자가 바꿀 수 있게 상수로 두지 않았다. 기능 추가의 길을 언제나 열어두고 싶었다.

data는 원래 캡슐화를 해야하는데 getter로 처리해도 어짜피 주소값을 가져가서 맘대로 값을 바꿀 것이기 때문에 그냥 퍼블릭으로 빼버렸다. 저 부분을 고민해야 할 듯 하다. c++에서는 포인터때문에 캡슐화가 생각보다 어렵다는 것을 알았다.

graphic class

graphic.h

#ifndef GRAPHIC_H
#define GRAPHIC_H
#include "../info/info.h"
class graphic {
private :
	Info * UserData;
public:
	graphic(Info * a); 
	void draw();
	void title();
	void clear();
};
#endif

UserData 는 데이터를 저장하고, draw는 콘솔 그리기, clear는 콘솔창 지우기, title은 타이틀 그리는 기능을 한다. 지금 생각해보니 graphic클래스에 왜 userdata가 있어야 하는지 모르겠다. 하지만 포인터를 통해 여기저기 옮겨다닐텐데 굳이 없애고 파라미터로 받아야하나 그런 생각도 든다. 포인터의 존재 때문에 캡슐화가 완전히 망가지는 느낌이 들었다.

maingame class

maingame.h

#ifndef MAINGAME_H
#define MAINGAME_H
#include "../info/info.h"
#include "../graphic/graphic.h"
class Maingame {
private:
	graphic * window;
	Info * UserInfo;
public:
	Maingame();
	void init();
	void start();
};
#endif

게임 로직을 관리하는 클래스이다. 아직 많이 작성하지 않아 이 정도 까지만 😓

파일들은 깃허브에 올려두었다. master 브랜치에는 최종본, first 브랜치에 지금 소스코드를 올려둘 예정이다.

깃허브 바로가기

profile
서두르지 말고 한 단계 한 단계 차근차근

0개의 댓글