1단계 : 소코반 게임을 진행하기 위한 맵 정보를 객체로 저장 및 출력하기 2단계 : 1단계 스테이지 2의 지도를 읽고 사용자 입력을 받아서 캐릭터를 움직이게 하는 프로그램을 작성하기
- 입력 명령
w: 위쪽
a: 왼쪽
s: 아래쪽
d: 오른쪽
q: 프로그램 종료
입력으로 대문자와 소문자 모두 입력받을 수 있도록 처리한다.
-
요구사항
- 처음 시작하면 스테이지 2의 지도를 출력한다.
- 간단한 프롬프트 (예: SOKOBAN> )를 표시해 준다.
- 하나 이상의 문자를 입력받은 경우 순서대로 처리해서 단계별 상태를 출력한다.
- 이동 중 벽이나 공등 다른 물체에 부딪히면 (경고!) 해당 명령을 수행할 수 없습니다! 라는 메시지를 출력하고 플레이어를 움직이지 않는다.
- 지원하지 않는 명령을 입력했을 경우 (경고) 지원하지 않는 명령입니다! 라는 메시지를 출력하고, 다시 사용자의 입력을 받는다.
-
동작 예시
Stage 2
#######
### O ###
# o #
# Oo P oO #
### o ###
# O #
########
SOKOBAN> ddzw (엔터)
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
D: 오른쪽으로 이동합니다.
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
D: (경고!) 해당 명령을 수행할 수 없습니다!
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
Z: (경고!) 해당 명령을 수행할 수 없습니다!
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
W: 위로 이동합니다.
#######
### O ###
# oP #
# Oo oO #
### o ###
# O #
########
SOKOBAN> q
Bye~
- 너무 크지 않은 함수 단위로 구현하고 중복된 코드를 줄이도록 노력한다.
- 전역변수의 사용을 자제한다.
- 객체, 리스트, 배열 등을 적절히 활용한다.
- 1단계와 같이 README.md 파일을 작성한다.
- 구현 완료 커밋에 v2 태그를 생성하고 GitHub에 push 한다.
- InputView : 사용자의 콘솔 입력을 받는 클래스입니다.
- Direction : 플레이어의 이동방향을 관리하는 enum입니다.
- match 메서드 : 받은 symbol과 일치하는 방향을 반환하는 메서드입니다.
- 단, 준비된 방향이 아니라면 null을 반환합니다.
- match 메서드 : 받은 symbol과 일치하는 방향을 반환하는 메서드입니다.
- GameMap
- move 메서드 : 받은 symbol과 일치하는 방향으로 플레이어를 이동시킬 수 있는 메서드를 호출합니다.
- 이동에 성공했는지 여부를 boolean 타입으로 반환합니다.
- move* 메서드 : 특정 방향으로 플레이어를 이동시킵니다.
- 이동은 gameMap의 요소 값을 서로 변경하는 메서드를 호출함으로써 수행됩니다.
- 이동에 성공했다면 true를 반환합니다.
- 이동하려는 방향에 장애물이 있다면, 이동 없이 false를 반환합니다.
- changePosition 메서드 : 플레이어의 위치와 이동하려는 위치 값을 바탕으로 gameMap 상에서 값을 교환합니다.
- move 메서드 : 받은 symbol과 일치하는 방향으로 플레이어를 이동시킬 수 있는 메서드를 호출합니다.
- Application
- main 메서드 : 게임의 전체 흐름을 관장합니다.
- Stage2에 대해 게임을 수행합니다.
- 콘솔 입력으로 받은 String을 char로 분해하여 순차적으로 로직을 수행합니다.
- symbol 값이 알파벳이 아니라면 경고메시지를 출력한 후 재입력받습니다.
- symbol 값을 대분자로 변환하여 모든 로직을 수행합니다.
- symbol 값이 'Q'라면 프로그램을 종료합니다.
- symbol 값이 준비된 Direction 중 하나라면 이동을 수행하고 이동 결과를 출력합니다.
- main 메서드 : 게임의 전체 흐름을 관장합니다.
- OutputView : 프로그램에 필요한 각종 출력을 수행합니다.
- printGameStart 메서드 : 게임 시작시 Stage 정보와 준비된 gameMap을 출력합니다.
- printResult 메서드 : 어느 방향으로 이동을 시도했는지, 이동에 성공했는지, 이동 결과는 어떠한지 출력합니다.
- 시도된 명령이 준비된 방향이 아닌 경우와, 준비된 방향이 맞지만 장애물 때문에 이동하지 못한 경우의 경고메시지는 다릅니다.
- printGameOver 메서드 : 게임 종료시 필요한 문구를 출력합니다.
- printNotSupportedInput 메서드 : 지원하지 않는 명령이 들어왔을 때 알리기 위한 문구를 출력합니다.
- OutputView, Application에서 각각 위 메시지를 필요로 하므로 중복을 피하기 위해 메서드화 하였습니다.
Stage 2
#######
### O ###
# o #
# Oo P oO #
### o ###
# O #
########
SOKOBAN> ddzw
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
D: 오른쪽으로 이동합니다.
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
D: (경고!) 해당 명령을 수행할 수 없습니다!
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
Z: (경고) 지원하지 않는 명령입니다!
#######
### O ###
# oP #
# Oo oO #
### o ###
# O #
########
W: 위쪽으로 이동합니다.
SOKOBAN> SAa1
#######
### O ###
# o #
# Oo PoO #
### o ###
# O #
########
S: 아래쪽으로 이동합니다.
#######
### O ###
# o #
# Oo P oO #
### o ###
# O #
########
A: 왼쪽으로 이동합니다.
#######
### O ###
# o #
# OoP oO #
### o ###
# O #
########
A: 왼쪽으로 이동합니다.
1: (경고) 지원하지 않는 명령입니다!
SOKOBAN> ZDQA
#######
### O ###
# o #
# OoP oO #
### o ###
# O #
########
Z: (경고) 지원하지 않는 명령입니다!
#######
### O ###
# o #
# Oo P oO #
### o ###
# O #
########
D: 오른쪽으로 이동합니다.
Bye~