C언어/문제풀다 하나씩

장애물이 있는 맵에서 위아래옆으로 움직이기 간단버전

mcdn 2020. 5. 1. 14:55
반응형

#include <iostream>
using namespace std;
char map[4][4];
int monsind[3][2];
int direct[4][2] = {
	0,1,//right
	-1,0,//down
	0,-1,//left
	1,0,//up
};
void findmonsind() {
	for (int i = 0; i < 4;i++) {
		for (int j = 0;j < 3;j++) {
			if (map[i][j] == 'A') {
				monsind[0][0] = i;
				monsind[0][1] = j;
			}
			else if (map[i][j] == 'C') {
				monsind[1][0] = i;
				monsind[1][1] = j;
			}
			else if (map[i][j] == 'D') {
				monsind[2][0] = i;
				monsind[2][1] = j;
			}
		}
	}
}

void movto(int dir) { // right 0
	int dy, dx;
	int* y, * x;

	for (int k = 0; k < 3;k++) {
		y = &monsind[k][0];
		x = &monsind[k][1];
		dy = direct[dir][0] + *y;
		dx = direct[dir][1] + *x;
		
		if (dy < 0 || dy >3) break;
		if (dx < 0 || dx >2) break;
		char a = map[dy][dx];
		
		if ( a>= 'A' && a <= 'Z') break;
		if (map[dy][dx] == '#')break;
		//cout << dy << " " << dx << " " << endl << endl;
		map[dy][dx] = map[*y][*x];
		map[*y][*x] = '_';
		monsind[k][0] = dy;
		monsind[k][1] = dx;
		

	}
	

}
int main() {
	for (int i = 0; i < 4;i++) {
		cin >> map[i];
	}
	
	// # 은 장애물 A D C는 몬스터 
	findmonsind();
	
	// ADC 위치 확인
	//right (,+1);
	for (int x = 0; x <4;x++) {
		movto(x);
	}
	movto(0);
	for (int i = 0; i < 4;i++) {
		for (int j = 0; j < 3;j++) {
			cout << map[i][j];
		}cout << endl;
	}

}

입력 예제

_A_

#_D

C_#

#__

출력 결과

__A

#_D

_C#

#__

반응형