diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 09d7ae5..f10dd56 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,8 +1,17 @@ package leets.land; +import leets.land.controller.GameController; +import leets.land.model.GameAlphabetModel; +import leets.land.model.GameNumericModel; +import leets.land.view.GameView; + public class UpdownApplication { public static void main(String[] args) { - System.out.print("hihi :D"); + GameView view = new GameView(); + GameNumericModel numericModel = new GameNumericModel(); + GameAlphabetModel alphabetModel = new GameAlphabetModel(); + GameController controller = new GameController(view, numericModel, alphabetModel); + controller.play(); } } diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java new file mode 100644 index 0000000..90960c9 --- /dev/null +++ b/src/main/java/leets/land/controller/GameController.java @@ -0,0 +1,67 @@ +package leets.land.controller; + +import leets.land.model.GameAlphabetModel; +import leets.land.model.GameNumericModel; +import leets.land.view.GameView; + +public class GameController { + + private final GameView view; + private final GameNumericModel numericModel; + private final GameAlphabetModel alphabetModel; + + public GameController(GameView view, GameNumericModel numericModel, + GameAlphabetModel alphabetModel) { + this.view = view; + this.numericModel = numericModel; + this.alphabetModel = alphabetModel; + } + + public void play() { + int version = view.getVersionInput(); + + if (version == 1) { + numericPlay(); + } else if (version == 2) { + alphabetPlay(); + } else { + System.out.println("[ERROR] 존재하지 않는 버전입니다."); + play(); + } + } + + public void numericPlay() { + + int input = view.getNumericInput(); + while (true) { + + if (numericModel.up(input)) { + input = numericModel.changeLimitForUp(input); + } else if (numericModel.down(input)) { + input = numericModel.changeLimitForDown(input); + } else if (numericModel.isCorrect(input)) { + System.out.println("정답 !"); + break; + } + } + + System.out.println("시도한 횟수 : " + (GameNumericModel.getCount() + 1)); + } + + public void alphabetPlay() { + int input = view.getAlphabetInput(); + while (true) { + + if (alphabetModel.up(input)) { + input = alphabetModel.changeLimitForUp(input); + } else if (alphabetModel.down(input)) { + input = alphabetModel.changeLimitForDown(input); + } else if (alphabetModel.isCorrect(input)) { + System.out.println("정답 !"); + break; + } + } + + System.out.println("시도한 횟수 : " + (GameAlphabetModel.getCount() + 1)); + } +} diff --git a/src/main/java/leets/land/model/GameAlphabetModel.java b/src/main/java/leets/land/model/GameAlphabetModel.java new file mode 100644 index 0000000..267e610 --- /dev/null +++ b/src/main/java/leets/land/model/GameAlphabetModel.java @@ -0,0 +1,70 @@ +package leets.land.model; + +import java.util.Random; +import java.util.Scanner; + +public class GameAlphabetModel { + + private final char answer; + private static int count; + private char min = 'A'; + private char max = 'z'; + + public GameAlphabetModel() { + Random random = new Random(); + this.answer = (char) (random.nextInt(26) + (random.nextBoolean() ? 'A' : 'a')); + } + + public boolean up(int input) { + return input < answer; + } + + public char changeLimitForUp(int input) { + System.out.println("UP"); + count++; + + min = (char) (input + 1); + + return isValidAlphabetRange(); + } + + public boolean down(int input) { + return input > answer; + } + + public char changeLimitForDown(int input) { + System.out.println("DOWN"); + count++; + + if (input == 'a') { + max = 'Z'; + } else { + max = (char) (input - 1); + } + + return isValidAlphabetRange(); + } + + public boolean isCorrect(int input) { + return input == answer; + } + + public static int getCount() { + return count; + } + + private char isValidAlphabetRange() { + Scanner sc = new Scanner(System.in); + + while (true) { + System.out.print("영어를 입력해주세요(" + min + " ~ " + max + ") : "); + char newInput = sc.next().charAt(0); + + if (newInput < min || newInput > max) { + System.out.println("[ERROR] 범위 내의 알파벳을 입력하세요."); + } else { + return newInput; + } + } + } +} diff --git a/src/main/java/leets/land/model/GameNumericModel.java b/src/main/java/leets/land/model/GameNumericModel.java new file mode 100644 index 0000000..d386817 --- /dev/null +++ b/src/main/java/leets/land/model/GameNumericModel.java @@ -0,0 +1,60 @@ +package leets.land.model; + +import java.util.Scanner; + +public class GameNumericModel { + + private final int answer = (int) (Math.random() * 100) + 1; + private static int count; + private int min = 1; + private int max = 100; + + public boolean up(int input) { + return input < answer; + } + + public int changeLimitForUp(int input) { + System.out.println("UP"); + count++; + + min = input + 1; + + return isValidNumericRange(); + } + + public boolean down(int input) { + return input > answer; + } + + public int changeLimitForDown(int input) { + System.out.println("DOWN"); + count++; + + max = input - 1; + + return isValidNumericRange(); + } + + public boolean isCorrect(int input) { + return input == answer; + } + + public static int getCount() { + return count; + } + + private int isValidNumericRange() { + Scanner sc = new Scanner(System.in); + + while (true) { + System.out.print("숫자를 입력해주세요(" + min + " ~ " + max + ") : "); + int newInput = sc.nextInt(); + + if (newInput < min || newInput > max) { + System.out.println("[ERROR] 범위 내의 숫자를 입력하세요."); + } else { + return newInput; + } + } + } +} diff --git a/src/main/java/leets/land/view/GameView.java b/src/main/java/leets/land/view/GameView.java new file mode 100644 index 0000000..489a84f --- /dev/null +++ b/src/main/java/leets/land/view/GameView.java @@ -0,0 +1,24 @@ +package leets.land.view; + +import java.util.Scanner; + +public class GameView { + + public int getVersionInput() { + Scanner sc = new Scanner(System.in); + System.out.print("버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); + return sc.nextInt(); + } + + public int getNumericInput() { + Scanner sc = new Scanner(System.in); + System.out.print("숫자를 입력해주세요(1 ~ 100) : "); + return sc.nextInt(); + } + + public char getAlphabetInput() { + Scanner sc = new Scanner(System.in); + System.out.print("영어를 입력해주세요(A ~ z) : "); + return sc.next().charAt(0); + } +}