diff --git a/README.md b/README.md index 8fe711203..645eccf4a 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ 3. Git 브랜치를 master 또는 main으로 변경한 후 피드백을 반영하기 위한 새로운 브랜치를 생성한 후 처음부터 다시 미션 구현을 도전한다. ``` + git branch -a // 모든 로컬 브랜치 확인 git checkout master // 기본 브랜치가 master인 경우 git checkout main // 기본 브랜치가 main인 경우 @@ -24,3 +25,18 @@ git checkout main // 기본 브랜치가 main인 경우 git checkout -b 브랜치이름 ex) git checkout -b apply-feedback ``` +4.구현할 기능 목록 +1~9까지의 서로 다른 3자리 맞추는거 + +~~게임 시작 +1. 게임이 시작되면 컴퓨터가 1~9까지의 수 중 중복없는 3자리 수를 랜덤으로 생성 +2. "숫자를 입력해 주세요 : " 라는 문구와 함께 사용자로부터 입력 받기 +3. 사용자가 유효하지 않은 수를 입력했을시 예외처리 +4. 사용자가 입력한 수와 컴퓨터의 수를 비교하여 스트라이크, 볼 계산 +5. 2~4번을 반복문으로 돌리고, 만약 정답이라면 게임종료 문구를 출력, 아니라면 계속 진행 +6. 게임 종료 후 게임을 다시 시작하냐는 문구 출력, 사용자 입력 받음 +7. 사용자 입력에 따라 다시 시작 / 게임 종료 / +8. 사용자가 유효하지 않은 숫자 입력 시 예외처리 + +------------------------ + diff --git a/src/main/java/baseballgame/Application.java b/src/main/java/baseballgame/Application.java new file mode 100644 index 000000000..8eff0e137 --- /dev/null +++ b/src/main/java/baseballgame/Application.java @@ -0,0 +1,38 @@ +package baseballgame; + +import java.util.List; +public class Application { + public void res_equals(String result, List com_num){ + Compare compare = new Compare(); + playgame game = new playgame(); + while(!result.equals("3strike")) { + result = compare.Compare_num(com_num, game.player_num()); + System.out.println(result); + } + } + public static void main(String[] args) throws IllegalArgumentException{ + try{ + ComputerNum computer = new ComputerNum(); + playgame game = new playgame(); + Compare compare = new Compare(); + Regame regame = new Regame(); + Application app = new Application(); + + boolean again = true; + + while(again) { + List com_num = computer.ComputerNumber(); + List player_num = game.player_num(); + + String result = ""; + app.res_equals(result,com_num); + + again = regame.restart(); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return; + } + + } +} diff --git a/src/main/java/baseballgame/Compare.java b/src/main/java/baseballgame/Compare.java new file mode 100644 index 000000000..bc49541ac --- /dev/null +++ b/src/main/java/baseballgame/Compare.java @@ -0,0 +1,38 @@ +package baseballgame; + +import java.util.List; + +public class Compare { + public int count(List computer, List player) { + int count = 0; + + for(int i = 0; i < player.size(); i++) { + if(computer.contains(player.get(i))) { + count++; + } + } + return count; + } + + public int Strikecount(List computer, List player) { + int strike = 0; + + for(int i = 0; i < player.size(); i++) { + if(computer.get(i) == player.get(i)) { + strike++; + } + } + return strike; + } + + public String Compare_num(List computer, List player) { + int count = count(computer, player); + int strike = Strikecount(computer, player); + int ball = count - strike; + + if(count == 0) return "nothing"; + else if(strike == 0) return ball + "ball"; + else if(ball == 0) return strike + "strike"; + else return ball + "ball " + strike + "strike"; + } +} diff --git a/src/main/java/baseballgame/ComputerNum.java b/src/main/java/baseballgame/ComputerNum.java new file mode 100644 index 000000000..236755108 --- /dev/null +++ b/src/main/java/baseballgame/ComputerNum.java @@ -0,0 +1,21 @@ +package baseballgame; + + +import java.util.Random; +import java.util.ArrayList; +import java.util.List; + +public class ComputerNum { + Random random = new Random(); + public List ComputerNumber(){ + + List com_num = new ArrayList<>(); // Create list contains answer + while (com_num.size() < 3) { + int randNum = random.nextInt(10); + if (!com_num.contains(randNum)) { + com_num.add(randNum); + } + } + return com_num; + } +} diff --git a/src/main/java/baseballgame/Regame.java b/src/main/java/baseballgame/Regame.java new file mode 100644 index 000000000..3c69bf0f5 --- /dev/null +++ b/src/main/java/baseballgame/Regame.java @@ -0,0 +1,21 @@ +package baseballgame; + +import java.util.Scanner; + +public class Regame { + public boolean restart(){ + System.out.println("you corrected 3 number! end game"); + System.out.println("enter 1 to restart game, enter 2 to exit game"); + + Scanner scanner = new Scanner(System.in); + char answer = scanner.next().charAt(0); + + if(answer == '1') { + return true; + } else if (answer == '2') { + return false; + }else{ + throw new IllegalArgumentException("enter 1 or 2"); + } + } +} diff --git a/src/main/java/baseballgame/playgame.java b/src/main/java/baseballgame/playgame.java new file mode 100644 index 000000000..672171c7c --- /dev/null +++ b/src/main/java/baseballgame/playgame.java @@ -0,0 +1,31 @@ +package baseballgame; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class playgame { + Scanner scanner = new Scanner(System.in); + public List player_num() { + + System.out.println("Enter Number : "); + List player_num = new ArrayList<>(); + String input = String.valueOf(scanner.nextInt()); + + for(int i=0; i com_num; + + //when + ComputerNum computer = new ComputerNum(); + com_num = computer.ComputerNumber(); + + //then + assertNotEquals(com_num.get(0),com_num.get(1)); + assertNotEquals(com_num.get(1),com_num.get(2)); + assertNotEquals(com_num.get(0),com_num.get(2)); + } + + @Test + @DisplayName("3Strike Test") + public void strike3Test(){ + List test1 = Arrays.asList(1,2,3); + List test2 = Arrays.asList(1,2,3); + + Compare compare = new Compare(); + + assertEquals("3strike", compare.Compare_num(test1,test2)); + } + + @Test + @DisplayName("3ball Test") + public void ball3Test(){ + List test1 = Arrays.asList(1,2,3); + List test2 = Arrays.asList(2,3,1); + + Compare compare = new Compare(); + + assertEquals("3ball", compare.Compare_num(test1,test2)); + } + + @Test + @DisplayName("nothing Test") + public void nothingTest(){ + List test1 = Arrays.asList(1,2,3); + List test2 = Arrays.asList(4,5,6); + + Compare compare = new Compare(); + + assertEquals("nothing", compare.Compare_num(test1,test2)); + } + + @Test + @DisplayName("N Strike 0 Ball Test") + public void NStrike0BallTest(){ + List test1 = Arrays.asList(1,2,3); + List test2 = Arrays.asList(1,5,6); + + Compare compare = new Compare(); + + assertEquals("1strike", compare.Compare_num(test1,test2)); + } + + @Test + @DisplayName("0 Strike N Ball Test") + public void NBall0StrikeTest(){ + List test1 = Arrays.asList(1,2,3); + List test2 = Arrays.asList(5,1,6); + + Compare compare = new Compare(); + + assertEquals("1ball", compare.Compare_num(test1,test2)); + } + + @Test + @DisplayName("N Strike N Ball Test") + public void NStrikeNBallTest(){ + List test1 = Arrays.asList(1,2,3); + List test2 = Arrays.asList(1,6,2); + + Compare compare = new Compare(); + + assertEquals("1ball 1strike", compare.Compare_num(test1,test2)); + } + + @Test + @DisplayName("player input exception test") + public void testLength_exception_whenInputLengthIsGreaterThanThree() { + playgame playgame = new playgame(); + + try { + playgame.Length_exception("1234"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("Not a three digit number", e.getMessage()); + } + } + + @Test + public void testLength_exception_whenInputLengthIsThree() { + playgame playgame = new playgame(); + try { + playgame.Length_exception("123"); + } catch (IllegalArgumentException e) { + fail("Unexpected IllegalArgumentException"); + } + } + + @Test + public void testLength_exception_whenInputLengthIsLessThanThree() { + playgame playgame = new playgame(); + try { + playgame.Length_exception("12"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("Not a three digit number", e.getMessage()); + } + } + + @Test + public void testRestart_Input1() { + String input = "1"; + System.setIn(new ByteArrayInputStream(input.getBytes())); + + Regame regame = new Regame(); + boolean result = regame.restart(); + + assertTrue(result); + } + + @Test + public void testRestart_whenInputIs2() { + String input = "2"; + System.setIn(new ByteArrayInputStream(input.getBytes())); + + Regame regame = new Regame(); + boolean result = regame.restart(); + + assertFalse(result); + } + + @Test + public void testRestart_whenInputIsInvalid() { + String input = "3"; // Invalid input + System.setIn(new ByteArrayInputStream(input.getBytes())); + + Regame regame = new Regame(); + + try { + regame.restart(); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("enter 1 or 2", e.getMessage()); + } + } + + + +} \ No newline at end of file diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 43e47d90b..c154a55e7 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -9,5 +9,6 @@ public class StringTest { void replace() { String actual = "abc".replace("b", "d"); assertThat(actual).isEqualTo("adc"); + } }