지식이는 게임을 만드는 것을 좋아합니다. 하지만 매번 다른 크기의 지도와 장애물을 배치하는데 불편함을 겪고 있습니다. 이런 불편함을 해결하기 위해 지도의 크기와 장애물의 위치, 캐릭터의 위치만 입력하면 게임 지형을 완성해 주는 프로그램을 만들고 싶습니다. 지식이를 위해 게임 지형을 만드는 프로그램을 작성해 주세요.
- 가로(n), 세로(m)의 크기가 주어집니다.
- 지형의 테두리는 벽으로 이루어져 있습니다.
- 캐릭터가 있는 좌표가 배열 형태로 주어집니다.
- 장애물이 있는 좌표가 2차원 배열 형태로 주어집니다.
지도는 n * m 크기의 배열이며 배열 안의 값은
- 움직일 수 있는 공간(0)
- 캐릭터(1)
- 벽(2)
3개로 구분되어 있습니다.
/**
* 지도의 크기, 장애물의 위치, 캐릭터의 위치를 입력받아
* 게임 지형을 완성해 출력해주는 함수
*
* @description
* - 움직일 수 있는 공간(0)
* - 캐릭터(1)
* - 벽(2)
*
* @param {number} ROW 행의 개수
* @param {number} COL 열의 개수
* @param {number[]} CHARACTER_POS 캐릭터 위치
* @param {number[][]} OBSTACLE_POS_ARR 장애물들의 위치가 담긴 배열
*/
function printMap(ROW, COL, CHARACTER_POS, OBSTACLE_POS_ARR) {
let map = Array.from({ length: ROW + 2 }, () => new Array(COL + 2).fill(2));
for (let i = 1; i <= ROW; i++) {
for (let j = 1; j <= COL; j++) {
map[i][j] = 0;
}
}
// 캐릭터 위치
const [CHARACTER_POS_ROW, CHARACTER_POS_COL] = CHARACTER_POS;
map[CHARACTER_POS_ROW + 1][CHARACTER_POS_COL + 1] = 1;
// 장애물
for (const OBSTACLE_POS of OBSTACLE_POS_ARR) {
const [OBSTACLE_POS_ROW, OBSTACLE_POS_COL] = OBSTACLE_POS;
map[OBSTACLE_POS_ROW + 1][OBSTACLE_POS_COL + 1] = 2;
}
map.forEach((row) => {
console.log(row);
});
}
const COL = 4; // 가로(열)
const ROW = 5; // 세로(행)
const CHARACTER_POS = [0, 0];
const OBSTACLE_POS_ARR = [
[0, 1],
[1, 1],
[2, 3],
[1, 3],
];
printMap(ROW, COL, CHARACTER_POS, OBSTACLE_POS_ARR);
'PS > 제코베 JS 100제' 카테고리의 다른 글
제코베 JS 100제 / 90 / 같은 의약 성분을 찾아라! (1) | 2022.10.04 |
---|---|
제코베 JS 100제 / 89 / 지식이의 게임 개발 2 (1) | 2022.10.04 |
제코베 JS 100제 / 87 / 천하제일 먹기 대회 (1) | 2022.09.30 |
제코베 JS 100제 / 86 / 회전 초밥 (0) | 2022.09.29 |