From 92b929676df008c33d7d30344b2aea0b708aa86f Mon Sep 17 00:00:00 2001 From: DongHoon Lee Date: Thu, 18 Apr 2024 16:38:24 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat(InputView):=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/model/Game.java | 114 +++++++++++++++++++ src/main/java/leets/land/view/InputView.java | 20 ++++ 2 files changed, 134 insertions(+) create mode 100644 src/main/java/leets/land/model/Game.java create mode 100644 src/main/java/leets/land/view/InputView.java diff --git a/src/main/java/leets/land/model/Game.java b/src/main/java/leets/land/model/Game.java new file mode 100644 index 0000000..1872f90 --- /dev/null +++ b/src/main/java/leets/land/model/Game.java @@ -0,0 +1,114 @@ +package leets.land.model; + +import java.util.Random; + +public class Game { + private int targetNumber; + private char targetLetter; + private int minNumber = 1; + private int maxNumber = 100; + private char minLetter = 'A'; + private char maxLetter = 'Z'; + private int guessCount = 0; + private boolean gameOver = false; + private int gameType; + + public void initializeGame(int gameType) { + this.gameType = gameType; + Random rand = new Random(); + if (gameType == 1) { + targetNumber = rand.nextInt(maxNumber - minNumber + 1) + minNumber; + } else { + minLetter = 'A'; + maxLetter = 'z'; + targetLetter = (char) (rand.nextInt('z' - 'A' + 1) + 'A'); + } + } + + public boolean isValidGuess(String guess) { + if (gameType == 1) { + try { + int guessNum = Integer.parseInt(guess); + return guessNum >= minNumber && guessNum <= maxNumber; + } catch (NumberFormatException e) { + return false; + } + } else { + if (guess.length() != 1) return false; + char guessChar = guess.charAt(0); + return (guessChar >= minLetter && guessChar <= maxLetter) || + (guessChar >= Character.toLowerCase(minLetter) && guessChar <= Character.toLowerCase(maxLetter)); + } + } + + public void processGuess(String guess) { + guessCount++; + if (gameType == 1) { + int guessNum; + try { + guessNum = Integer.parseInt(guess); + } catch (NumberFormatException e) { + System.out.println("[ERROR] 정수 값을 입력하세요."); + return; + } + + if (guessNum < targetNumber) { + minNumber = guessNum + 1; + System.out.println("UP"); + } else if (guessNum > targetNumber) { + maxNumber = guessNum - 1; + System.out.println("DOWN"); + } else { + gameOver = true; + System.out.println("정답!"); + } + } else { + char guessChar = guess.charAt(0); + if (guessChar >= 'A' && guessChar <= 'Z') { + if (guessChar < targetLetter) { + minLetter = (char) (guessChar + 1); + System.out.println("UP"); + } else if (guessChar > targetLetter) { + maxLetter = (char) (guessChar - 1); + System.out.println("DOWN"); + } else { + gameOver = true; + } + } else if (guessChar >= 'a' && guessChar <= 'z') { + if (guessChar < targetLetter) { + minLetter = (char) (guessChar + 1); + System.out.println("UP"); + } else if (guessChar > targetLetter) { + maxLetter = (char) (guessChar - 1); + System.out.println("DOWN"); + } else { + gameOver = true; + } + } else { + System.out.println("[ERROR] 범위 내의 올바른 값을 입력하세요."); + } + + if (maxLetter >= '[' && maxLetter <= '`') { + maxLetter = 'Z'; + } else if (minLetter > 'Z' && minLetter < 'a') { + minLetter = 'a'; + } + } + } + + public boolean isGameOver() { + return this.gameOver; + } + + public int getGuessCount() { + return this.guessCount; + } + + public String getCurrentRange() { + if (gameType == 1) { + return String.format("(%d ~ %d)", minNumber, maxNumber); + } else { + return String.format("(%c ~ %c)", minLetter, maxLetter); + } + } +} diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java new file mode 100644 index 0000000..483b648 --- /dev/null +++ b/src/main/java/leets/land/view/InputView.java @@ -0,0 +1,20 @@ +package leets.land.view; + +import java.util.Scanner; + +public class InputView { + private Scanner scanner; + + public InputView() { + this.scanner = new Scanner(System.in); + } + + public int promptForGameType() { + System.out.print("버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); + return scanner.nextInt(); + } + + public String promptForGuess() { + return scanner.next(); + } +} From f38513717a9c63935ef4033fbfe872def5c314af Mon Sep 17 00:00:00 2001 From: DongHoon Lee Date: Thu, 18 Apr 2024 16:38:48 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat(OutputView):=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/view/OutputView.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/leets/land/view/OutputView.java diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java new file mode 100644 index 0000000..222ddbe --- /dev/null +++ b/src/main/java/leets/land/view/OutputView.java @@ -0,0 +1,25 @@ +package leets.land.view; + +public class OutputView { + public void displayWelcomeMessage() { + System.out.println("업다운 게임을 시작합니다."); + } + + public void displayPrompt(String message) { + System.out.print(message); + } + + public void displayFeedback(String feedback) { + System.out.println(feedback); + } + + public void displayError(String errorMessage) { + System.out.println("[ERROR] " + errorMessage); + } + + + public void displayGameOverMessage(int guessCount) { + System.out.println("정답!\n"); + System.out.println("시도한 횟수 : " + guessCount + "회"); + } +} \ No newline at end of file From 66e3d436243d6223a013c12deba769df50bef4b0 Mon Sep 17 00:00:00 2001 From: DongHoon Lee Date: Thu, 18 Apr 2024 16:39:14 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat(GameController):=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/land/controller/GameController.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/leets/land/controller/GameController.java 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..f7673d4 --- /dev/null +++ b/src/main/java/leets/land/controller/GameController.java @@ -0,0 +1,37 @@ +package leets.land.controller; + +import leets.land.model.Game; +import leets.land.view.InputView; +import leets.land.view.OutputView; + +public class GameController { + private Game game; + private InputView inputView; + private OutputView outputView; + + public GameController() { + this.game = new Game(); + this.inputView = new InputView(); + this.outputView = new OutputView(); + } + + public void startGame() { + outputView.displayWelcomeMessage(); + int gameType = inputView.promptForGameType(); + game.initializeGame(gameType); + + while (!game.isGameOver()) { + String range = game.getCurrentRange(); + outputView.displayPrompt("값을 입력해주세요 " + range + " : "); + String guess = inputView.promptForGuess(); + if (!game.isValidGuess(guess)) { + outputView.displayError("범위 내의 올바른 값을 입력하세요."); + continue; + } + game.processGuess(guess); // 변경된 부분 + if (game.isGameOver()) { + outputView.displayGameOverMessage(game.getGuessCount()); + } + } + } +} \ No newline at end of file From db4248324d21cbcace86a4c3b51a9bac77083b2a Mon Sep 17 00:00:00 2001 From: DongHoon Lee Date: Thu, 18 Apr 2024 16:39:46 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor(UpdownApplication):=20=EC=96=B4?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=BC=80=EC=9D=B4=EC=85=98=EC=97=90=EC=84=9C?= =?UTF-8?q?=20run=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/UpdownApplication.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 09d7ae5..560e3cb 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,8 +1,11 @@ package leets.land; +import leets.land.controller.GameController; + public class UpdownApplication { public static void main(String[] args) { - System.out.print("hihi :D"); + GameController gameController = new GameController(); + gameController.startGame(); } }