우리 회사는 렌터카를 운영하고 있다. 현재 보유하고 있는 차량은 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. 고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받는다. 이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성해야 한다. 각 차량별 연비는 다음과 같다.
- Sonata : 10km/리터
- Avante : 15km/리터
- K5 : 13km/리터
- 회사를 생성한다. - RentCompany
- 자동차를 생성한다. - RentCompany.addCar
- 종류 : Sonata, Avante, k5
- 개수 : Sonata 2대, Avante 1대, K5 2대
- 주입해야할 연료량을 계산한다. - Car.getChargeQuantity()
- 차량 별로 주입해야할 보고서를 생성한다. - RentCompany.generateReport()
- 자동차를 생성한다. - RentCompany.addCar
블랙잭 게임을 변형한 프로그램을 구현한다. 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21 또는 21에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다.
카드의 숫자 계산은 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다. 게임을 시작하면 플레이어는 두 장의 카드를 지급 받으며, 두 장의 카드 숫자를 합쳐 21을 초과하지 않으면서 21에 가깝게 만들면 이긴다. 21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. 딜러는 처음에 받은 2장의 합계가 16이하이면 반드시 1장의 카드를 추가로 받아야 하고, 17점 이상이면 추가로 받을 수 없다. 게임을 완료한 후 각 플레이어별로 승패를 출력한다.
-
딜러, 플레이어 (공통) - Participant
- 이름
- 보유 카드
- 승, 패 기록
- 첫번째 2장의 카드를 뽑음
- 이후 1장씩 카드를 뽑음
- 점수를 계산
- 보유하고 있는 카드 정보 반환
-
딜러 - Dealer
- 딜러는 카드 점수가 16 이하이면 카드를 1장 더 받음
-
플레이어 - Player
- 플레이어는 카드를 1장 더 받을지 안받을지 입력을 받아서 카드를 받음
-
카드 - Card
- 종류 : ♦︎다이아, ♥하트, ♠스페이드, ♣클로버
- 숫자 : 1 ~ 9, A (= 1, 11), K (= 10), Q (= 10), J (= 10)
- 에이스 카드일 경우, 점수가 15 미만이면 에이스카드점수는 11점이 되고, 16이상이면 점수가 1점이 됨
- 카드 정보를 반환
-
덱 - Deck
- 카드 52장을 생성하고 관리
- 생성시 미리 덱을 섞어서 반환
- 카드를 여러장 뽑음
- 카드를 한장 뽑음
-
사용자가 가지고 있는 카드 묶음 - ParticipantsCards
- 가지고 있는 카드를 추가
- 카드의 점수를 계산
- 가지고 있는 카드의 정보를 반환
-
게임 - GameController
- 게임 진행
-
입력 - InputView
- 게임 참여자 입력 (쉼표로 구분)
- 카드를 더 받을지 입력 (y/n)
- 빈 입력을 허용하지 않음
-
출력 - PrintView
- 뽑은 카드 결과 출력
- 게임 결과 출력
- 최종 승패 출력