Skip to content

Commit ba93e5a

Browse files
committed
docs(readme): 프로젝트 소개 및 설계에 대한 내용 작성
1 parent 98b86d4 commit ba93e5a

File tree

1 file changed

+123
-1
lines changed

1 file changed

+123
-1
lines changed

README.md

+123-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,97 @@
1-
## 구현 기능 목록
1+
## 🏎️ 자동차 경주 게임
2+
3+
> 우아한테크코스 4기 2주차 프리코스 과제입니다 :)
4+
5+
여러대의 자동차가 함께 경주 하여 승자를 가리는 간단한 게임입니다. 각 자동차는 고유한 이름을 가지고 있으며, 자동차는 각 전진 시도마다 랜덤하게 전진 여부가 결정됩니다. 공동 우승자가 존재할 수 있으며, 경주 중 모든 자동차가 주행하지 않는다면 모두가 공동우승 처리 됩니다.
6+
7+
자동차 이름과 총 시도 횟수는 사용자로부터 입력받습니다. 사용자는 각 입력은 아래의 조건에 맞게 입력해야합니다.
8+
9+
### 🏁 입력값 조건
10+
11+
**자동차 이름**
12+
13+
- 자동차 이름은 한줄에 2개 이상의 이름을 적으며, 그 구분은 `,` 문자로 한다.
14+
- 예) `dev,hudi,dong,hyun`
15+
- 자동차 이름은 5글자를 초과할 수 없다.
16+
- 자동차 이름은 비어있을 수 없다. (0글자일 수 없다.)
17+
- 자동차 이름은 공백(`" " `)을 포함할 수 없다.
18+
- 자동차 이름은 중복될 수 없다.
19+
20+
**시도 횟수**
21+
22+
- 시도 횟수는 1이상의 정수여야 한다.
23+
24+
### 🚩 전진 조건
25+
26+
각 자동차는 전진 시도마다 0부터 9 사이의 임의의 정수를 생성하고, 생성된 정수가 4 이상일 경우 1칸 전진한다.
27+
28+
## 🖥️ 실행 결과
29+
30+
```
31+
경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)
32+
hudi,java,c++,woowa
33+
시도할 회수는 몇회인가요?
34+
10
35+
36+
실행결과
37+
hudi :
38+
java :
39+
c++ : -
40+
woowa : -
41+
42+
hudi :
43+
java :
44+
c++ : -
45+
woowa : -
46+
47+
hudi : -
48+
java : -
49+
c++ : --
50+
woowa : -
51+
52+
hudi : --
53+
java : --
54+
c++ : ---
55+
woowa : --
56+
57+
hudi : ---
58+
java : ---
59+
c++ : ----
60+
woowa : ---
61+
62+
hudi : ---
63+
java : ---
64+
c++ : -----
65+
woowa : ----
66+
67+
hudi : ----
68+
java : ----
69+
c++ : -----
70+
woowa : ----
71+
72+
hudi : ----
73+
java : -----
74+
c++ : ------
75+
woowa : -----
76+
77+
hudi : -----
78+
java : -----
79+
c++ : ------
80+
woowa : -----
81+
82+
hudi : ------
83+
java : -----
84+
c++ : -------
85+
woowa : ------
86+
87+
최종 우승자 : c++
88+
```
89+
90+
91+
92+
## ⚙️ 구현 기능 목록
93+
94+
### 경주 전
295

396
- [x] 경주할 자동차 이름들을 입력하는 기능
497
- [x] 입력 이름 중 5자를 초과하는 이름이 입력된 경우 예외처리
@@ -12,12 +105,41 @@
12105
- [x] 숫자가 아닌 문자를 입력받을 경우 예외처리 (공백 포함)
13106
- [x] 양의 정수가 아닌 숫자 (0과 음수) 를 입력 받을 경우 예외처리
14107
- [x] 예외가 발생한 경우 에러를 출력하고, 입력을 다시 받는 기능
108+
109+
### 경주 중
110+
15111
- [x] 개별 자동차 1회 전진 기능
16112
- [x] 0 ~ 9 사이의 무작위 값을 구하고, 4 이상일 경우에만 전진한다.
17113
- [x] 개별 자동차의 진행도를 출력하는 기능
18114
- [x] 모든 자동차를 사용자가 입력한 횟수만큼 전진하는 기능
19115
- [x] 모든 자동차의 진행도를 출력하는 기능
116+
117+
### 경주 완료
118+
20119
- [x] 경주가 마무리되면, 우승자를 출력하는 기능
21120
- [x] 단독 우승자는 단일 이름만 출력되어야 함
22121
- [x] 공동 우승자는 `,` 로 구분되어 함께 출력되어야 함
23122

123+
124+
125+
## 🏛️ 프로젝트 구조
126+
127+
> 큰 틀로 **MVC** 패턴을 사용하였으며, **VO** 객체의 **불변성**을 유지하기 위해 혹은 **생성자의 구현을 숨기기** 위해 일부 **정적 팩토리 메소드 패턴**을 사용하였습니다. 레이어간 데이터를 전달하기 위한 **DTO 클래스**를 정의하여 사용하였습니다.
128+
129+
- `controller`
130+
- `Game` : Domain 객체와 View 를 제어하여, 게임의 전반적인 흐름 제어를 담당합니다.
131+
- `domain`
132+
- `Car` : 자동차
133+
- `CarDto` : 자동차에 대한 정보를 View 레이어로 전달하기 위해 사용되는 DTO (Data Transfer Object)
134+
- `Cars` : 경주하는 여러대의 Car 를 담고있는 일급 컬렉션
135+
- `MoveCount` : 사용자로부터 입력받은 시도 횟수를 담고 있는 객체
136+
- `Name` : 사용자로부터 입력받은 자동차의 이름을 담고 있는 VO
137+
- `Names` : 입력받은 모든 Name 을 담고있는 일급 컬렉션
138+
- `Position` : 자동차의 위치 정보를 담고있는 VO
139+
- `Winners` : Cars 중 가장 멀리 전진한 Car 를 담고있는 일급 컬렉션
140+
- `WinnersDto` : 승자 정보를 View 레이어로 저달하기 위해 사용되는 DTO
141+
- `view`
142+
- `InputView` : 사용자로부터 데이터를 입력받을 때 사용되는 클래스
143+
- `OutputView` : 사용자에게 정보를 표시하기 위해 사용되는 클래스
144+
- `racingcar`
145+
- `Application` : 프로그램의 Entry

0 commit comments

Comments
 (0)