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
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,17 @@
# java-baseball-precourse
# java-baseball-precourse


## 구현 요구사항
1. 컴퓨터가 가지고 있을 랜덤 정수형 숫자 3개 생성 기능
* 숫자의 범위는 1~9이다.
* 중복은 허용하지 않는다.
2. 플레이어 숫자 입력 기능
* 플레이어는 컴퓨터가 가지고 있을 것이라 예상하는 숫자를 입력할 수 있다.
* 유효하지 않은 숫자를 입력할 경우 IllegalArgumentException를 발생시키고 프로그램은 종료된다.
* 정수형이 아닌 입력값, 유효하지 않은 범위, 길이가 3이 아닐 경우
3. 플레이어 숫자 판정
* 같은 수가 컴퓨터의 숫자의 같은 자리에 있을 경우 스트라이크, 숫자는 같지만 다른 자리에 있을 경우 볼, 같은 수가 전혀 없으면 낫싱이라는 결과를 얻을 수 있다.
* #스트라이크와 같이 각각의 스트라이크,볼의 개수를 나타내야한다.
* 플레이어가 모든 숫자를 맞출 때까지 입력과 판정 과정이 반복될 수 있어야한다.
4. 게임 재시작 혹은 종료 기능
* 숫자를 모두 맞추면 게임이 종료되고 사용자는 게임을 다시 할 지 아예 종료할지 선택할 수 있다.
6 changes: 6 additions & 0 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
public class Application {
public static void main(String[] args) {
BaseballGameService baseballGameService = new BaseballGameService();
baseballGameService.start();
}
}
18 changes: 18 additions & 0 deletions src/main/java/BaseballGameService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import java.util.List;

public class BaseballGameService {
public void start() {
boolean restart = true;
while(restart){
ScoreCounting scoreCounting = new ScoreCounting();
List<Integer> randNums = RandomIntGenerate.init();
List<Integer> userInputs;
do {
userInputs = UserInput.getInput();
} while (!scoreCounting.count(randNums, userInputs));

GameManager manager = new GameManager();
restart = manager.restart();
}
}
}
18 changes: 18 additions & 0 deletions src/main/java/GameManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import java.util.Scanner;

public class GameManager {
public boolean restart(){
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
Scanner scanner = new Scanner(System.in);
int restart = scanner.nextInt();
if (restart == 1){
return true;
}
else if (restart == 2){
return false;
}
else{
throw new IllegalArgumentException();
}
}
}
20 changes: 20 additions & 0 deletions src/main/java/RandomIntGenerate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RandomIntGenerate {
public static List<Integer> init() {
List<Integer> nums = new ArrayList<>();
for (int i = 0; i < 3; i++) {
nums.add(generateNumber(nums));
}
return nums;
}
private static int generateNumber(List<Integer> nums){
Random random = new Random();
int randInt;
do {
randInt = random.nextInt(9) + 1;
} while (nums.contains(randInt));
return randInt;
}
}
37 changes: 37 additions & 0 deletions src/main/java/ScoreCounting.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import java.util.List;

public class ScoreCounting {
public boolean count(List<Integer> randInputs, List<Integer> userInputs){
String result = "";
int strike = 0;
int ball = 0;
int miss = 0;
for (int i = 0; i < userInputs.size(); i++){
if (userInputs.get(i).equals(randInputs.get(i))){
ball++;
} else if (randInputs.contains(userInputs.get(i))) {
strike++;
}
else{
miss++;
}
}
if (ball == 3){
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
return true;
}
if (miss == 3){
result = "낫싱";
}
else{
if (ball > 0){
result += (ball+"볼 ");
}
if (strike > 0){
result += (strike+"스크라이트");
}
}
System.out.println(result);
return false;
}
}
28 changes: 28 additions & 0 deletions src/main/java/UserInput.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class UserInput {
public static List<Integer> getInput() throws IllegalArgumentException{

Scanner scanner = new Scanner(System.in);
System.out.println("1~9까지의 숫자를 중복없이 입력해주세요.");
List<Integer> userInputs = new ArrayList<>();
for(int i = 0; i<3; i++) {
System.out.println(i + 1 + "번째 숫자를 입력해주세요 : ");
Integer num = scanner.nextInt();
if (isValid(userInputs,num)){
userInputs.add(num);
}
else{
System.out.println("잘못된 숫자입니다.");
throw new IllegalArgumentException();
}
}
return userInputs;
}

private static boolean isValid(List<Integer> nums,Integer num){
return num > 0 && num < 10 && !nums.contains(num);
}
}
30 changes: 30 additions & 0 deletions src/test/java/ScoreCountingTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

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

public class ScoreCountingTest {

@Test
@DisplayName("점수 집계 테스트")
public void count(){
//given
List<Integer> userInputs = new ArrayList<>();
userInputs.add(1);
userInputs.add(5);
userInputs.add(8);
List<Integer> randInts = new ArrayList<>();
randInts.add(8);
randInts.add(5);
randInts.add(3);
ScoreCounting counting = new ScoreCounting();

//when
boolean result = counting.count(userInputs,randInts);

//then
Assertions.assertFalse(result);
}
}