Skip to content

hotheadfactory/java-racingcar-precourse

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

자동차 경주 게임

기능 요구 사항

  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
  • 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
  • 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
  • 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
  • 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.

프로그래밍 요구사항

객체

  • 다음 Car 객체를 활용해 구현해야 한다.

  • Car 기본 생성자를 추가할 수 없다.

  • name, position 변수의 접근 제어자인 private을 변경할 수 없다.

  • 가능하면 setPosition(int position) 메소드를 추가하지 않고 구현한다

    public class Car {
    	private final String name;
    	private int position = 0;
    
        public Car(String name) {
    		this.name = name;
    	}
    	// 추가 기능 구현
    }
  • 3항 연산자를 쓰지 않는다.

  • indent(인덴트,들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.

    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
  • 자바 코드 컨벤션을 지키면서 프로그래밍한다.

  • 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.

    • 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다
  • else 예약어를 쓰지 않는다.

    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.

구현된 기능 목록과 실행 순서

  • 메소드 이름은 '클래스명.메소드명'으로 쓰여 있습니다.
기능 메소드 이름 입력 출력
게임을 시작한다. Game.startGame() 없음 없음
각 자동차의 이름을 하나의 String으로 입력받는다. User.getCarNames() 사용자 입력 (쉼표로 구분된 이름들) 이름이 담긴 배열
입력받은 String을 쉼표를 기준으로 나눈다. (예외처리↓) User.getCarArray() 쉼표로 구분된 이름들 이름이 담긴 배열
전달받은 배열의 요소들을 이름으로 하는 Car 객체를 만들어 cars 리스트에 넣는다. Game.enrollPlayers() 이름이 담긴 배열 Car 객체들
실행할 턴 횟수를 사용자에게 물어본다. (예외처리↓) User.getTurnNumber() 사용자 입력 (숫자) 턴 횟수
게임을 시작한다. Game.startRace() 턴 횟수 없음
각각의 Car 객체를 한 번씩 호출해 턴을 진행한다. Game.playOneTurn() 없음 없음
자신의 턴을 진행한다. 0부터 9까지의 랜덤 숫자 하나를 뽑아 4 이상이면 앞으로 간다. Car.playTurn() 없음 없음
position에 1을 더해 앞으로 간다. Car.proceed() 없음 없음
자동차의 이름을 리턴한다. Car.getName() 없음 Name
자동차의 위치를 리턴한다. Car.getPosition() 없음 position
각 자동차의 현재 위치를 화면에 출력한다. Game.printPosition() Car 객체 현재 위치를 시각적으로 보여줌
위치를 나타내는 바 갯수를 계산해 화면에 출력한다. Game.getBar() Car 객체 위치 바
우승자 목록을 화면에 출력한다. Game.printWinner() 우승자(들)의 리스트 우승자 목록 출력
우승자가 누구인지 찾는다. 최고 득점을 한 플레이어가 우승자이며 두 명 이상의 우승자가 있을 수 있다. Game.getWinner() 없음 우승자(들)의 리스트
자동차들의 점수를 조사해 최고 점수를 찾는다. Game.getMaxScore() 없음 최고 점수

예외 처리

예외 상황 처리하는 메소드 / 로직
입력받은 이름들 중 일부의 길이가 5자가 넘거나, 맨 앞이나 뒤에 쉼표를 넣거나, 쉼표를 연달아 입력한 경우. User.verifyCarName()
입력받은 턴 횟수가 음수인 경우 User.getPositiveInt()
턴 횟수에 정수가 아닌 실수나 문자열 등을 입력한 경우 try ~ catch(InputMismatchException()

About

자동차 경주 게임 미션을 위한 저장소

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%