Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[자동차 경주] 원준영 미션 제출합니다. #205

Open
wants to merge 39 commits into
base: main
Choose a base branch
from

Conversation

Junyoung-WON
Copy link

자동차 경주

구현 기능

사용자 입력

  • 자동차 이름 입력
    • 5자 이하만 가능
    • 쉼표로 구분
  • 시도할 횟수 입력
  • 잘못된 값 입력 시 IllegalArgumentException 발생 후 종료

게임 진행

  • 자동차마다 0에서 9사이 무작위 정수를 뽑아 전진/정지
    • 무작위 값이 4 이상일 경우 전진
    • 자동차 이름과 함께 출력
  • 시도할 횟수만큼 진행 후 우승자 선정
    • 우승자는 한명 이상일 수 있음
    • 여러 명일 경우 쉼표로 구분하여 출력

개발 명세

사용자

사용자 입력을 담당한다.

  • 자동차의 이름을 입력받아 자동차 이름 리스트를 반환한다.
  • 시도할 횟수를 입력받아 정수를 반환한다.

입력 검사

사용자의 입력이 올바른지 검사한다.

  • 자동차 이름이 5자 이하인지 검사한다.
  • 시도할 횟수가 올바른 정수인지 검사한다.
  • 입력이 올바르지 않을 경우 IllegalArgumentException을 발생시킨다.

자동차

자동차는 이름과 이동 거리를 갖고, 전진/정지의 기능과 이동거리 출력의 기능이 있다.

  • 0 에서 9 사이 무작위 정수를 뽑는다.
  • 뽑은 수가 4 이상일 경우 전진 한다.
  • 차량의 이름과 이동 거리를 출력하는 메소드를 가진다.

게임 관리자

자동차 경주의 진행을 관리한다.

  • 자동차 객체 리스트를 생성 한다.
  • 시도 횟수만큼 게임을 진행한다.
  • 끝나면 우승자를 추려내어 출력한다.

클래스로 구분하여 각 클래스가 행하는 기능들을 명세하였다.
<클래스 구분>
- 사용자: 사용자 입력 담당
- 입력 검사: 사용자 입력이 올바른지 검사
- 자동차: 난수를 뽑아서 전진/정지
- 게임 관리자: 게임 진행 담당
사용자 클래스 User 파일 생성
자동차 클래스 Car 파일 생성
사용자 입력을 검사하는 Validator 클래스 생성
게임 진행을 담당하는 게임 관리 클래스 GameManager 생성
제공된 라이브러리의 Console을 활용하여 사용자 입력 받음.
validator를 활용한 입력 검사 필요.
정규표현식을 활용하여 사용자 입력에 ','와 '_' 이외의 특수문자가 포함되는지 확인
입력된 문자열에 쉼표와 언더바 이외에 다른 특수문자가 있는지 검사
레이싱 게임의 차량은 2대 이상이어야 하므로, 입력 문자열에 쉼표가 있는지
확인한다.
validateString -> containsComma
이름이 Null 또는 빈 문자열인지 확인한다.
차량의 이름은 5자리 이하여야 한다. 5글자가 넘어갈 시,
IllegalArgumentException을 발생시킨다.
입력받은 문자열에 빈 칸(띄어쓰기)가 있는지 확인하는 기능 구현
입력 문자열을 검사하는 함수 이름 변경
containsComma -> validateInputString
입력 문자열 중에 \t 가 포함되었는지도 검사한다.
validator를 사용하여 입력 문자열과 차량 이름에 대한 검증 구현
시도할 횟수를 입력받는 문자열은 정수로만 이루어진 문자열이어야 한다.
정규표현식을 활용하여 검사한다.
사용자로부터 시도할 횟수를 입력받는다.
validator를 활용하여 입력받은 문자열이 올바른 정수인지 확인한다.
정수만 입력하였을 때 정상 동작하며, 다른 문자나 빈칸이 포함되면 예외가
발생한다.
단, 0을 입력한 경우에 대한 예외처리가 필요하다.
시도할 횟수는 0보다 큰 정수이어야 한다.
자동차가 Randoms 클래스의 pickNumberInRange()를 사용하여 0부터 9사이의
숫자를 뽑는다.
해당 숫자가 4 이상이면 전진하고, 아니면 정지한다.
4 이상인 경우 해당 숫자만큼 movingDistance를 증가시킨다.
차량이 가진 이름과 이동한 거리만큼을 '-' 문자로 출력한다.
이동 거리를 정수로 둘 경우 반복문을 통해 문자열을 생성하여 출력하여야
한다. 이동 거리를 정수로  두기보다 문자열을 활용하는 것이 결과 출력 시에
더 효율적일 것이다.
게임 관리자 클래스에서 차량의 이동거리를 나타내지 않고, 자동차 클래스
내부의 메소드를 통해 출력시키도록 구현한다.
사용자 입력을 통해 받은 차량 이름 리스트와 시도 횟수를 생성자로 받는
것으로 구현 계획을 수정한다.
- 생성자는 차량 이름 리스트와 시도 횟수를 받아, 자동차 리스트를 생성한다.
- 자동차 객체를 생성하여 리스트에 추가하는 함수 createCarList를 작성하였다.
시도 횟수만큼 자동차 경주를 진행하고 최종 결과까지 출력한다.
각 자동차가 난수를 뽑아 전진을 시도하고, 매 라운드 결과를 보여주는
함수와 최종 우승자를 찾아 출력하는 함수도 추가 구현 예정이다.
각 라운드마다 수행하는 oneRoundResult()
자동차 리스트의 자동차마다 난수를 뽑아 전진 할지 말지를 결정하여
전진/정지하고,
현재 이동거리를 이름과 함께 표시한다.
본래 전체적인 게임의 진행을 관리하던 역할에서 자동차 경주 진행을
관리하는 역할로 변경하였다.
이에 시작 문구 출력과 사용자의 입력 기능을 삭제하고,
자동차 경주 진행에 관련한 기능만을 명세하였다.
최종 우승자를 찾아내어 출력하는 함수이다.
우승자를 찾아내는 기능을 추가로 구현해야한다.
findMaxDistance() : 차량 중 가장 멀리 이동한 거리를 반환
findWinners() : 가장 멀리 이동한 거리의 차량들을 문자열로 반환
printWinners() : findWinners로부터 최종 우승자를 출력
빈칸(띄어쓰기, 탭)이 포함된 경우, 차량이 하나인 경우, 이름이 비어있는
경우
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant