본문 바로가기
<TOY PROJECT>/CPP_CONSOLE

1. [CPP]특수문자 타일 맵 생성기

by CodeGrimie 2021. 1. 13.

github.com/gyunam-park/CPP_TOY_PROJECT/tree/main/CPP_ARRAY/TILE_MAP_GENERATOR

 

gyunam-park/CPP_TOY_PROJECT

This is where I am collecting toy projects to review what I learned while studying CPP. - gyunam-park/CPP_TOY_PROJECT

github.com

▼ 실행 화면

고정 크기 배열(Array)을 이용한 특수문자 타일 맵 생성기

오늘은 배열과 문자열을 배워서 이걸 응용하여 아주 간단한 특수문자 타일 맵 생성기를 만들어 보았다.

너무 간단한 프로그램이라 이론이랄 것도 없지만 요약하자면 아래와 같다.

 

프로그램 동작 순서

1. 타일을 저장할 배열을 생성한다.

2. 타일을 생성하기 위한 문자열을 받는다.

3. 문자열 내에서 순환문을 돌아 해당하는 숫자를 배열에 대입한다.

4. 타일 번역기가 배열을 돌아 해당하는 숫자에 맞는 특수문자를 출력한다.

 

특별한 거라고 뽑으라면 CPP 11부터 생긴 std::array를 사용했다.

내장 배열을 사용하지 않은 건 CPP 11부터는 std:array가 권장사항이라고 해서 써봤다.

게임 개발에서도 많이 쓰는지는 모르겠는데 체감되는 차이점은 선언할 때 조금 긴 거 말고는 아직?

함수에 전달할 때 포인터 형 변환을 하지 않는다고 하는데 아직 그럴 만큼의 프로그램을 개발하지 않아서 그런 걸 수도 있다.

최근 CPP 표준 컴파일러 기준 최적화가 진행되어 기존의 내장 배열에 비해서 약간 더 빠르다고 한다.

 

코드 전체를 짠 3시간 중 1시간이 버그 하나 잡는데 썼는데 너무 어이없는 실수였다.

 

▼ 배열로 문자열을 선언할 때에는 + '\0'을 해줘야 한다.

static char inputStr[MAP_SIZE + 1];

문자열을 선언할 때 MAP_SIZE(25)에 딱 맞춰서 선언하는 바람에 실제로 입력할 때 25개를 입력하면 정상적으로 출력되지 않는 문제가 있었다.

 

저렇게 고정 크기 배열로 문자열을 선언할 때에는 반드시 끝에 '\0'이 들어갈 공간을 하나 더 해주도록 하자.

뒤늦게나마 아차 싶어서 수정했는데 무작정 코딩을 들어가기보다는 교수님 말대로 미리 주석으로 간단하게나마 설계를 하고 들어가는 버릇을 들여야겠다.

재정의, 변수명 작명법, const, static 배운건 다 박아 넣음

최대한 필기했던 것들을 다 참고하면서 했음에도 놓친 부분들이 많다.

 

▼ 기억나는 대로 배운 건 다 때려 박았다.

// DEFINES
#define int8	int8_t
#define int16	int16_t
#define int32	int32_t
#define int64	int64_t

// CONSTS
const static int MAP_WIDTH = 5;
const static int MAP_HEIGHT = 5;
const static int MAP_SIZE = MAP_WIDTH * MAP_HEIGHT;

const std::array<wchar_t, 9> textureData = {
	L'□',L'■',L'▒',L'▤',L'▥', L'▨', L'▧', L'▦', L'▩'
};

// STATICS
static std::array<int8, MAP_SIZE> mapData = {
	0,0,0,0,0,
	0,0,0,0,0,
	0,0,0,0,0,
	0,0,0,0,0,
	0,0,0,0,0,
};

static char inputStr[MAP_SIZE + 1];

typedef enum class _APP_STATE
{
	SET_CODE = 0,
	RESULT,
	EXIT
}APP_STATE;

특히 변수명 작명은 최대한 좋은 코드들을 많이 보려고 하는데 쉽지 않다.

CPP로 짜인 좋은 게임 코드들을 찾아보려고는 GitHub를 뒤적여 보는 중이다.

함수를 짜는 것도 그냥 코드를 봍붙한다는 느낌이 아니라 좀 더 멀리서 함수의 기능에 따라 설계할 능력이 필요한 것 같다.

손 코딩 연습 꼭 필요하다.

한참 코드 짜다가 종이에 코드를 옮겨 적는 경우가 있었다.

그런데 std:array의 문법이 가물가물한게 아닌가... 방금까지 키보드로 쳤는데!

 

자동 완성을 최대한 안 쓰고 키보드로 입력을 해도 손으로 쓰는 것보다는 훨씬 빨리 기억 속에서 사라진다.

마치 한번 작성하고 나면 뇌가 메모리 해제 하는 느낌으로.

 

나중에 CPP를 대충 훑고 자료구조와 알고리즘을 공부할 때엔 전체 코드는 아니더라도 의사 코드(Pseudo Code) 정도로는 손 코딩을 연습해야겠다.

'<TOY PROJECT> > CPP_CONSOLE' 카테고리의 다른 글

2. 간단한 탑뷰 게임  (0) 2021.01.27
0. [CPP]피라미드 생성 어플리케이션  (0) 2021.01.11

댓글