C/코딩 문제

[쉽게 풀어쓴 C언어 Express]Ch.10 배열 array_Programming16

두부와 백설기 2022. 6. 20. 23:32

어떤 조건으로 해야 하는지 생각하고 고르는게 오래 걸렸다.


#include<stdio.h>
#include<stdlib.h>

int main(void) {

	char key;
	int  y = 1, x = 0;
	char map[20][15] = {
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'#','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','M','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','M','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','M','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','.'},
{'.','.','.','.','.','.','.','.','.','.','.','.','.','.','G'}
	};

	while (1) {
		for (int i = 0; i < 20; i++) {
			printf(" ");

			for (int j = 0; j < 15; j++)
				printf("%c", map[i][j]);

			printf("\n");
		}

		if (map[19][14] == '#') {
			printf("축하합니다! 금을 찾았어요!");
			_getch();
			break;
		}

		key = _getch();

		switch (key)
		{
		case 'w':
			--y;
			if (map[y][x] == 'M') { ++y; break; }
			// 벽(M)으로 이동하면 원래 좌표로

			if (y < 20 && y >= 0) {
				map[y + 1][x] = '.';
				map[y][x] = '#';
			}
			else
				y = 0;	// 맵 외부(배열 범위 밖)로 이동하면 다시 원래 좌표로

			break;
		case 's':
			++y;
			if (map[y][x] == 'M') { --y; break; }

			if (y < 20 && y >= 0) {
				map[y - 1][x] = '.';
				map[y][x] = '#';
			}
			else
				y = 19;

			break;
		case 'a':
			--x;
			if (map[y][x] == 'M') { ++x; break; }

			if (x < 15 && x >= 0) {
				map[y][x + 1] = '.';
				map[y][x] = '#';
			}
			else
				x = 0;

			break;
		case 'd':
			++x;
			if (map[y][x] == 'M') { --x; break; }

			if (x < 15 && x >= 0) {
				map[y][x - 1] = '.';
				map[y][x] = '#';
			}
			else
				x = 14;

			break;
		}

		system("cls");
	}
	return 0;
}

2022-05-25