티스토리 뷰

c++을 이용한 사천성 콘솔게임을 만드려보려 합니다.

게임 제목인 "SACHUNSUNG"을 출력하자니 노가다성이 강하고 나중에 비슷한 상황에서 사용하기 위하여 해당 코드를 작성하게 되었습니다.

 

우선 알파벳 크기를 5x5로 설정하였습니다. 대문자 26개 각각의 출력해야하는 부분을 bool배열(true: 문자출력, false: 공백출력)에 미리 채워주었습니다.

 

이어서 문자열 각각의 문자를 5x5 bool배열로 분리하는 함수는 아래와 같습니다.

void split(string& s, bool output[][BUFFER_SIZE])
{
	int len = s.length();
	for (int y = 0; y < ALPHA_SIZE; ++y) {
		for (int idx = 0; idx < len; ++idx) {
			int alphaOffset = s[idx] - 'A';              // [A...Z] -> [0...25]
			for (int x = 0; x < ALPHA_SIZE; ++x) {
				int xOffset = idx * ALPHA_SIZE + x;      // xOffset -> [ALPHA_SIZE*idx ... ALPHA_SIZE*idx + ALPHA_SIZE)

				output[y][xOffset] = alphaBoard[alphaOffset][y][x];
			}
		}
	}
}

 

(분리결과, 문자열의 길이, 문자 간격, 표시할 문자) 를 함수에 입력하면 출력해주는 코드는 아래와 같습니다.

void print(bool output[][BUFFER_SIZE], int len, int spaceSize, char mark)
{
	for (int y = 0; y < ALPHA_SIZE; ++y) {
		for (int idx = 0; idx < len; ++idx) {
			for (int x = 0; x < ALPHA_SIZE; ++x) {
				int xOffset = idx * ALPHA_SIZE + x;      // xOffset -> [ALPHA_SIZE*idx ... ALPHA_SIZE*idx + ALPHA_SIZE)

				cout << (output[y][xOffset] ? mark : ' ');
			}

			for (int iter = 0; iter < spaceSize; ++iter) {
				cout << ' ';
			}
		}
		cout << '\n';
	}
}

 

테스트 해보기 위해 대문자를 전부 출력해보았습니다.

 

 

제 닉네임도 출력보았습니다.

잘 작동하는것을 확인하였습니다. 코드가 궁금하거나 활용하고 싶으신 분들은 아래의 전체 코드를 참고해주세요!

 

[전체코드]

더보기
#include<iostream>
#include<string>

using namespace std;

const int ALPHA_CNT = 26;
const int ALPHA_SIZE = 5;
const int BUFFER_SIZE = 1 << 10;

bool alphaBoard[ALPHA_CNT][ALPHA_SIZE][ALPHA_SIZE] = {
	// A
	{
		{false, false, true, false, false},
		{false, true, false, true, false},
		{true, true, true, true, true},
		{true, false, false, false, true},
		{true, false, false, false, true}
	},
	// B
	{
		{true, true, true, true, false},
		{true, false, false, false, true},
		{true, true, true, true, false},
		{true, false, false, false, true},
		{true, true, true, true, false}
	},
	// C
	{
		{false, true, true, true, true},
		{true, false, false, false, false},
		{true, false, false, false, false},
		{true, false, false, false, false},
		{false, true, true, true, true}
	},
	// D
	{
		{true, true, true, true, false},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, true, true, true, false}
	},
	// E
	{
		{true, true, true, true, true},
		{true, false, false, false, false},
		{true, true, true, true, false},
		{true, false, false, false, false},
		{true, true, true, true, true}
	},
	// F
	{
		{true, true, true, true, true},
		{true, false, false, false, false},
		{true, true, true, true, false},
		{true, false, false, false, false},
		{true, false, false, false, false}
	},
	// G
	{
		{false, true, true, true, false},
		{true, false, false, false, false},
		{true, false, true, true, true},
		{true, false, false, true, false},
		{false, true, true, true, false}
	},
	// H
	{
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, true, true, true, true},
		{true, false, false, false, true},
		{true, false, false, false, true}
	},
	// I
	{
		{true, true, true, true, true},
		{false, false, true, false, false},
		{false, false, true, false, false},
		{false, false, true, false, false},
		{true, true, true, true, true}
	},
	// J
	{
		{true, true, true, true, true},
		{false, false, true, false, false},
		{false, false, true, false, false},
		{true, false, true, false, false},
		{false, true, false, false, false}
	},
	// K
	{
		{true, false, false, false, true},
		{true, false, false, true, false},
		{true, true, true, false, false},
		{true, false, false, true, false},
		{true, false, false, false, true}
	},
	// L
	{
		{true, false, false, false, false},
		{true, false, false, false, false},
		{true, false, false, false, false},
		{true, false, false, false, false},
		{true, true, true, true, true}
	},
	// M
	{
		{true, false, false, false, true},
		{true, true, false, true, true},
		{true, false, true, false, true},
		{true, false, true, false, true},
		{true, false, false, false, true}
	},
	// N
	{
		{true, false, false, false, true},
		{true, true, false, false, true},
		{true, false, true, false, true},
		{true, false, false, true, true},
		{true, false, false, false, true}
	},
	// O
	{
		{false, true, true, true, false},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{false, true, true, true, false}
	},
	// P
	{
		{true, true, true, true, false},
		{true, false, false, false, true},
		{true, true, true, true, false},
		{true, false, false, false, false},
		{true, false, false, false, false}
	},
	// Q
	{
		{false, true, true, false, false},
		{true, false, false, true, false},
		{true, false, true, true, false},
		{true, false, false, true, false},
		{false, true, true, false, true}
	},
	// R
	{
		{true, true, true, true, false},
		{true, false, false, false, true},
		{true, true, true, true, false},
		{true, false, false, true, false},
		{true, false, false, false, true}
	},
	// S
	{
		{false, true, true, true, false},
		{true, false, false, false, false},
		{false, true, true, true, false},
		{false, false, false, false, true},
		{false, true, true, true, false}
	},
	// T
	{
		{true, true, true, true, true},
		{false, false, true, false, false},
		{false, false, true, false, false},
		{false, false, true, false, false},
		{false, false, true, false, false}
	},
	// U
	{
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{false, true, true, true, false}
	},
	// V
	{
		{true, false, false, false, true},
		{true, false, false, false, true},
		{true, false, false, false, true},
		{false, true, false, true, false},
		{false, false, true, false, false}
	},
	// W
	{
		{true, false, true, false, true},
		{true, false, true, false, true},
		{true, false, true, false, true},
		{false, true, false, true, false},
		{false, true, false, true, false}
	},
	// X
	{
		{true, false, false, false, true},
		{false, true, false, true, false},
		{false, false, true, false, false},
		{false, true, false, true, false},
		{true, false, false, false, true}
	},
	// Y
	{
		{true, false, false, false, true},
		{false, true, false, true, false},
		{false, false, true, false, false},
		{false, false, true, false, false},
		{false, false, true, false, false}
	},
	// Z
	{
		{true, true, true, true, true},
		{false, false, false, true, false},
		{false, false, true, false, false},
		{false, true, false, false, false},
		{true, true, true, true, true}
	}
};
bool alphaOutput[ALPHA_SIZE][BUFFER_SIZE];

void split(string& s, bool output[][BUFFER_SIZE])
{
	int len = s.length();
	for (int y = 0; y < ALPHA_SIZE; ++y) {
		for (int idx = 0; idx < len; ++idx) {
			int alphaOffset = s[idx] - 'A';              // [A...Z] -> [0...25]
			for (int x = 0; x < ALPHA_SIZE; ++x) {
				int xOffset = idx * ALPHA_SIZE + x;      // xOffset -> [ALPHA_SIZE*idx ... ALPHA_SIZE*idx + ALPHA_SIZE)

				output[y][xOffset] = alphaBoard[alphaOffset][y][x];
			}
		}
	}
}

void print(bool output[][BUFFER_SIZE], int len, int spaceSize, char mark)
{
	for (int y = 0; y < ALPHA_SIZE; ++y) {
		for (int idx = 0; idx < len; ++idx) {
			for (int x = 0; x < ALPHA_SIZE; ++x) {
				int xOffset = idx * ALPHA_SIZE + x;      // xOffset -> [ALPHA_SIZE*idx ... ALPHA_SIZE*idx + ALPHA_SIZE)

				cout << (output[y][xOffset] ? mark : ' ');
			}

			for (int iter = 0; iter < spaceSize; ++iter) {
				cout << ' ';
			}
		}
		cout << '\n';
	}
}

int main()
{
	string input = "SHYPLANTS";
	split(input, alphaOutput);
	print(alphaOutput, input.length(), 2, '@');

	return 0;
}

 

'개발 > 게임개발' 카테고리의 다른 글

브레젠험 알고리즘  (0) 2023.07.24
c++ 게임만들기 연습문제 3.4  (0) 2023.03.05
c++ 게임만들기 연습문제 3.3  (1) 2023.03.04
c++ 게임만들기 연습문제 3.2  (0) 2023.03.02
c++ 게임만들기 연습문제 3.1  (0) 2023.03.02
댓글