- Sonata
-
SonataString Type 이름을 가져야한다. -
10km/리터의 연비 가져야한다. - 거리
- 거리를 가져야한다.
- 거리는
0이상 정수이어야 한다.
- 주입해야할 연료량을 구할 수 있다.
-
- Avante
-
AvanteString Type 이름을 가져야한다. -
15km/리터의 연비 가져야한다. - 거리 가져야한다.
- 거리는
0이상 정수이어야한다. -
- 거리는
- 주입해야할 연료량을 구할 수 있다.
-
- K5
-
K5String Type 이름을 가져야한다. -
13km/리터의 연비 가져야한다. - 거리 가져야한다.
- 거리는
0이상 정수이어야한다.
- 거리는
- 주입해야할 연료량을 구할 수 있다.
-
- RentCompany
-
List<Car>을 가져야한다. -
List<Car>에 대한 getter를 가져야한다. -
create(), 팩토리 메서드를 구현한다. -
addCar(), 차를 추가할 수 있다.-
List<Car>에 Sonata를 추가할 수 있다. -
List<Car>에 Avante를 추가할 수 있다. -
List<Car>에 K5를 추가할 수 있다.
-
-
generateReport()는 전체 결과를 출력한다.
-
- 보유 차량
- Sonata
- 대수: 2대
- 연비: 10km/리터
- Avante
- 대수: 1대
- 연비: 15km/리터
- K5
- 대수: 2대
- 연비: 13km/리터
- Sonata
- 고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받을 수 있다.
- 이동거리를 활용해 차량 별로 필요한 연료를 주입할 수 있다.
- 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성할 수 있다.
- 상속과 추상 메서드를 활용한다.
- 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다.
- 인터페이스를 적용해 구현한다.
- User
- Deck을 가지고 있다.
- UserName을 가지고 있다.
- Deck에 카드를 추가할 수 있다.
- 해당 카드의 점수인 score를 반환할 수 있다.
- Dealer
- Deck을 가지고 있다.
- UserName을 가지고 있다. - name은
dealer라는 기본 이름을 가진다. - 현재 score가 16이하 인지를 판단하여 반환할 수 있다.
- 1장의 카드를 추가로 받을 수 있다.
- Player
- Deck을 가지고 있다.
- UserName을 가지고 있다.
- 현재 score가 21을 넘지 않는지를 판단하여 반환할 수 있다.
- Deck - 딜러 또는 플레이어가 가진 Card의 집합
- List를 가지고 있다.
- 현재 List의 총 score를 계산할 수 있다.
- Deck의 현재 score가 21을 넘는지에 대한 boolean 계산을 할 수 있다.
- 현재 가진 Card 중에서 Ace가 있는 경우, 해당 Card에 대한 Score를 1 또는 11로 계산할 수 있다.
- 21을 초과하지 않으면서, 21에 가깝게 계산할 수 있다.
- Card - Game에서 사용할 카드의 객체
- CardType type을 가지고 있다. (e.g 다이아몬드, 클로버, 스페이드, 하트 ...)
- CardNumber String을 가지고 있다. (e.g 2, 3, A, K, Q, J ...)
- 카드 숫자와 카드 타입을 입력할때, 주어진 숫자와 타입으로 카드가 생성된다.
- CardType - Card의 타입
- CardType은
"다이아몬드", "하트", "클로버", "스페이드"이 범위안에 반드시 있어야한다.
- CardType은
- CardNumber - Card의 숫자
- CardNumber는
"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"이 범위안에 반드시 있어야한다.
- CardNumber는
- GameCard - 게임에서 사용될 모든 Card의 집합
- 모든 Card는 중복이 없어야한다.
- 총 52 장이 있어야한다.
- 모든 Card를 셔플할 수 있다.
- GameUser - BlackJack을 수행하는 User의 집합
- List를 가지고 있다.
- User를 추가할 수 있다.
- List를 반환할 수 있다.
- BlackJack - 게임 로직 수행
- GameUser를 가지고 있다.
- GameCard를 가지고 있다.
- 게임 진행시 최초로 GameCard를 셔플할 수 있다.
- User별로 초기 카드를 나눠준다.
- GameCard에서 Card를 두 장 뽑기
- User에게 Card 전달하기
- Dealer는 총 score가 16이하일 경우, 1장의 카드를 추가로 받는다.
- User별로 턴을 진행할 수 있게 한다.
- GameCard에서 Card를 한 장 뽑기
- User에게 Card 전달하기
- Player는 총 score가 21이하일 경우, 1장의 카드를 추가로 받을 수 있다.
- UserStats - User별 승/패에 대한 정보
- GameUser를 인자로 받아 User별, 승/패 정보를 계산한다.
- User별 Deck의 score를 출력하기 위한 String을 반환할 수 있다. convertTotalScore()
- User별 최종 승/패를 출력하기 위한 String을 반환할 수 있다. convertTotalResult()
- User별 Deck의 score가 21을 초과할 경우, 승/패를 계산할 수 있다.
- Dealer의 score가 21을 초과할 경우, Player가 승리한다.
- Dealer의 score가 21을 초과하지 않고, Player의 score가 21을 초과하는 경우, Dealer가 승리한다.
- GameUser를 인자로 받아 User별, 승/패 정보를 계산한다.
- Game - 전체적인 게임을 진행할 Controller
- 이름의 배열을 BlackJack에 전달한다.
- 싱글턴 패턴 적용
- UserName - 게임 참여자의 이름
- InputView
- 게임에 참여할 이름을 입력받는다.
- OutputView
2월 17일 목요일까지
./gradlew clean checkgit pull pair step1git commit -m "commit message
Co-authored-by: hochan222 <hochan049@gmail.com>
Co-authored-by: chanuuuuu <dn0208@gmail.com>