Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
##구현 할 기능 정리
0.Application
(1) view에서 시작 문구를 호출
(2) 입력값을 받아 controller로 전달
(3) view에서 끝난 문구를 호출
1.model
(1) 사용자의 입력값을 저장하는 모델
(2) 1~9의 랜덤수 중 임의의 수 3개를 선택하여 저장하는 모델
2.controller
(1) view의 상태를 application에 전달
(2) 사용자의 입력값을 모델에 저장
(3) 사용자가 올바른 입력값을 넣으면 service로 입력값을 전달하고
(4) 게임이 끝난 경우 재시작/종료를 구분하는 기능
3.service
(1) 같은 수가 같은 자리에 있는지, 다른 자리에 있는지, 같은 수가 없는지 확인하는 기능
(2) 올바른 입력값을 넣었는지 확인하는 기능
4.view
(1) 입력한 숫자에 따른 결과 화면 띄우기
(2) 잘못된 값을 넣은 경우 -> IllegalArgumentException 띄우기
(3) 모든 숫자를 맞춰 종료하는 화면, 재시작과 게임종료를 알림
(4) 게임 시작 문구 출력 "숫자 야구 게임을 시작합니다"
262 changes: 262 additions & 0 deletions hs_err_pid23272.log

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package baseball;

import baseball.controller.UserViewController;
import camp.nextstep.edu.missionutils.Console;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
UserViewController userViewController = new UserViewController();
userViewController.start();
String str = Console.readLine();
userViewController.userInput(str);
}
}
70 changes: 70 additions & 0 deletions src/main/java/baseball/controller/UserViewController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package baseball.controller;

import baseball.model.RandomPickData;
import baseball.model.UserInputData;
import baseball.service.InputValidService;
import baseball.service.Service;
import baseball.view.UserViewResponse;
import camp.nextstep.edu.missionutils.Console;

import java.util.List;

import static baseball.view.UserViewResponse.*;

public class UserViewController {
UserInputData userInputData;
InputValidService inputValidService = new InputValidService();
Service service = new Service();
static RandomPickData randomPickData;

//(1) view의 상태를 application에 전달
public void start(){
START_GAME_MESSAGE();
}

//(2) 사용자의 입력값을 모델에 저장
public void userInput(String str){
randomPickData = new RandomPickData();
userInputData = new UserInputData();
userInputData.setStr(str);

//입력값의 유효성 판단
while(inputValidService.isStrikeAll()){
String input = getInput();
if(inputValidService.isInputValid(input)){
String res = service.judgement(input, getRandomPicks());
JUDGEMENT_MESSAGE(res);
}else{
EXCEPTION_MESSAGE(); break;
}
if(inputValidService.isStrikeAll()){
continueOrEndGame();
break;
}
userInputData.setStr(Console.readLine());
}
}

private void continueOrEndGame(){
END_GAME_MESSAGE();
String ctn = Console.readLine();
if(inputValidService.isInputValid(ctn)){
if(inputValidService.continueOrEndGame(ctn)){
String newInput = Console.readLine();
userInput(newInput);
}else{
System.out.println();
}
}else{
EXCEPTION_MESSAGE();
}
}

public String getInput(){
return userInputData.getStr();
}

public List<String> getRandomPicks(){
return randomPickData.getRandomList();
}
}
32 changes: 32 additions & 0 deletions src/main/java/baseball/model/RandomPickData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package baseball.model;

import camp.nextstep.edu.missionutils.Randoms;

import java.util.ArrayList;
import java.util.List;

public class RandomPickData {
private List<String> randomList = new ArrayList<>();

public RandomPickData(){
randomPick();
}

private void randomPick(){
String random = "";
for(int i=0; i<3; i++){
while(true){
random = String.valueOf(Randoms.pickNumberInRange(1,9));
if(!randomList.contains(random)){
break;
}
}
this.randomList.add(random);
}

}

public List<String> getRandomList(){
return randomList;
}
}
13 changes: 13 additions & 0 deletions src/main/java/baseball/model/UserInputData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package baseball.model;

public class UserInputData {
private String str;
public UserInputData(){}

public void setStr(String str){
this.str = str;
}
public String getStr(){
return this.str;
}
}
43 changes: 43 additions & 0 deletions src/main/java/baseball/service/InputValidService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package baseball.service;

public class InputValidService {
boolean endGame = false;
//올바른 입력값이 들어왔는지 확인
public boolean isInputValid(String str){
//게임이 안끝났을 경우
if(!endGame){
for(int i=0; i<str.length(); i++){
char target = str.charAt(i);
if(target < 48 || target > 57){
return false;
}
}
return true;
}

if(str.charAt(0) == 49 || str.charAt(0) == 50){
return true;
}
return false;
}

public void updateStatus(){
this.endGame = !endGame;
}

public boolean continueOrEndGame(String ctn){
int answer = Integer.parseInt(ctn);
switch(answer){
case 1:
updateStatus();
return true;
case 2:
return false;
}
return false;
}

public boolean isStrikeAll(){
return endGame;
}
}
49 changes: 49 additions & 0 deletions src/main/java/baseball/service/Service.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package baseball.service;

import java.util.List;

public class Service {
InputValidService inputValidService = new
InputValidService();

public String judgement(String str, List<String> ls){
int strike = 0;
int ball = 0;
for(int i=0; i<3; i++){
String target = str.substring(i,i+1);
for(String collect : ls){
if(target.equals(collect)){
if(ls.indexOf(collect) == i){
strike +=1;
}
else{
ball +=1;
}
}
}
}
String res = result(strike, ball);
if(strike == 3){
strikeAll();
}
return res;
}

private String result(int strike, int ball){
String res = "낫싱";
if(strike > 0){
res = String.valueOf(strike)+"스트라이크 ";
}
else if(ball > 0){
res += String.valueOf(ball)+"볼 ";
return res;
}
return res;
}

private void strikeAll(){
inputValidService.updateStatus();
}


}
27 changes: 27 additions & 0 deletions src/main/java/baseball/view/UserViewResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package baseball.view;

public class UserViewResponse {

//(1) 입력한 숫자에 따른 결과 화면 띄우기
static final public void JUDGEMENT_MESSAGE(String res){
System.out.println(res);
}

//(2) 잘못된 값을 넣은 경우 -> IllegalArgumentException 띄우기
static final public void EXCEPTION_MESSAGE(){
IllegalArgumentException illegalArgumentException = new IllegalArgumentException();
throw illegalArgumentException;
}

//(3) 모든 숫자를 맞춰 종료하는 화면, 재시작과 게임종료를 알림
static final public void END_GAME_MESSAGE(){
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
}

//(4) 게임 시작 문구 출력 "숫자 야구 게임을 시작합니다"
static final public void START_GAME_MESSAGE(){
System.out.print("숫자 야구 게임을 시작합니다.");
}

}
22 changes: 22 additions & 0 deletions src/test/java/baseball/controller/UserViewControllerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package baseball.controller;

import baseball.model.RandomPickData;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

class UserViewControllerTest {
RandomPickData randomPickData;
@Test
void userInputTest(){
//given
String str = "123";
randomPickData = new RandomPickData();
List<String> ls = randomPickData.getRandomList();
//when
//then
}

}
30 changes: 30 additions & 0 deletions src/test/java/baseball/model/RandomPickDataTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package baseball.model;

import camp.nextstep.edu.missionutils.Randoms;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;

class RandomPickDataTest {
@Test
void test1(){
List<String> randomList = new ArrayList<>();
String res = "";
for(int i=0; i<3; i++){
while(true){
int random = Randoms.pickNumberInRange(1,9);
if(!randomList.contains(random)){
res = String.valueOf(random);
break;
}
}
randomList.add(res);
}
assertThat(randomList).isNotNull();
}

}
Loading