diff --git a/README.md b/README.md index e69de29..4d2bc4e 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,14 @@ +# 기능 목록 +
    게임 시작 +
      컴퓨터 볼 생성 + +
    +
      유저, 컴퓨터 볼 비교 + +
    +
      조건에 맞으면 종료 + +
    +
+ + diff --git a/build.gradle b/build.gradle index c7156de..fd7068c 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,7 @@ plugins { group 'org.example' version '1.0-SNAPSHOT' +sourceCompatibility = '8' repositories { mavenCentral() diff --git a/src/main/java/com/baseball/BaseBallMainApplication.java b/src/main/java/com/baseball/BaseBallMainApplication.java new file mode 100644 index 0000000..0c2bf27 --- /dev/null +++ b/src/main/java/com/baseball/BaseBallMainApplication.java @@ -0,0 +1,10 @@ +package com.baseball; + +import com.baseball.domain.BaseBallPlayService; + +public class BaseBallMainApplication { + public static void main(String[] args) { + BaseBallPlayService baseBallPlayService = new BaseBallPlayService(); + baseBallPlayService.playGame(); + } +} diff --git a/src/main/java/com/baseball/domain/Ball.java b/src/main/java/com/baseball/domain/Ball.java new file mode 100644 index 0000000..7e81809 --- /dev/null +++ b/src/main/java/com/baseball/domain/Ball.java @@ -0,0 +1,37 @@ +package com.baseball.domain; + +public class Ball { + String computerBall; + String userBall; + String findBallBuffer; + int strikeCount = 0; + int ballCount = 0; + + StringBuffer pitchZone = new StringBuffer(); + StringBuilder stringBuilder = new StringBuilder(); + + public String createComputeBall() { + do { + int createNumber = (int) (Math.random() * 9) + 1; + if (createNumber > 0) { + stringBuilder.append(createNumber); + this.computerBallInspection(createNumber); + } + } while (stringBuilder.length() != 3); + computerBall = stringBuilder.toString(); + stringBuilder.delete(0, stringBuilder.length()); + findBallBuffer = computerBall; + return computerBall; + } + + public void computerBallInspection(int number) { + if (stringBuilder.length() >= 2) { + int index = stringBuilder.substring(0, stringBuilder.length()-1).indexOf(String.valueOf(number)); + if (index > -1) { + stringBuilder.delete(stringBuilder.length()-1, stringBuilder.length()); + createComputeBall(); + } + } + } + +} diff --git a/src/main/java/com/baseball/domain/BaseBallPlayService.java b/src/main/java/com/baseball/domain/BaseBallPlayService.java new file mode 100644 index 0000000..0923e2d --- /dev/null +++ b/src/main/java/com/baseball/domain/BaseBallPlayService.java @@ -0,0 +1,84 @@ +package com.baseball.domain; + +import com.baseball.view.InputView; +import com.baseball.view.OutputView; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class BaseBallPlayService implements BaseballPlayImpl { + private static final OutputView outputView = new OutputView(); + private static final Ball ball = new Ball(); + private static String computerBall = ball.createComputeBall(); + + @Override + public void playGame() { + outputView.messagePrint("START", ""); + ball.userBall = InputView.inputBalls(); + this.userBallNumberVerification(ball.userBall); + this.messageDelete(); + this.baseBallMatching(ball.userBall); + if (ball.strikeCount < 3) outputView.messagePrint("GAME_RESULT", ball.pitchZone.toString()); + else outputView.messagePrint("GAME_RESULT", "3 스트라이크"); + this.gameRestartOrGameEnd(); + } + + public void userBallNumberVerification(String userBall) { + try { + Pattern pattern = Pattern.compile("(^[0-9]{3})"); + Matcher matchingResult = pattern.matcher(String.valueOf(userBall)); + if (!matchingResult.find()) throw new IllegalArgumentException(); + } catch (IllegalArgumentException e) { + outputView.messagePrint("VERIFICATION", ""); + InputView.getClose(); + e.printStackTrace(); + throw e; + } + } + + public void baseBallMatching(String userBall) { + System.out.println(computerBall); + if (!userBall.trim().isEmpty()) { + if (String.valueOf(userBall.charAt(0)).equals(String.valueOf(computerBall.charAt(0)))) { + ball.strikeCount++; + } + if (ball.findBallBuffer.indexOf(String.valueOf(userBall.charAt(0))) > 0) { + ball.ballCount++; + } + userBall = userBall.substring(1); + computerBall = computerBall.substring(1); + baseBallMatching(userBall); + } else { + if (ball.strikeCount > 0) ball.pitchZone.append(ball.strikeCount).append(" 스트라이크 "); + if (ball.ballCount > 0) ball.pitchZone.append(ball.ballCount).append(" 볼"); + } + } + + public void gameRestartOrGameEnd() { + int coin = 0; + if (ball.strikeCount < 3) { + computerBall = String.valueOf(ball.computerBall); + playGame(); + } else { + outputView.messagePrint("GAME_COMPLETE", ball.pitchZone.toString()); + coin = InputView.inputCoin(); + } + this.messageDelete(); + if (coin == 1) this.gameReset(); + else InputView.getClose(); + } + + public void gameReset() { + computerBall = ball.createComputeBall(); + ball.strikeCount = 0; + ball.ballCount = 0; + this.playGame(); + } + + public void messageDelete() { + ball.strikeCount = 0; + ball.ballCount = 0; + ball.pitchZone.delete(0, ball.pitchZone.length()); + } + +} diff --git a/src/main/java/com/baseball/domain/BaseballPlayImpl.java b/src/main/java/com/baseball/domain/BaseballPlayImpl.java new file mode 100644 index 0000000..804e623 --- /dev/null +++ b/src/main/java/com/baseball/domain/BaseballPlayImpl.java @@ -0,0 +1,7 @@ +package com.baseball.domain; + +import java.io.IOException; + +public interface BaseballPlayImpl { + void playGame() throws IOException; +} diff --git a/src/main/java/com/baseball/mssage/Message.java b/src/main/java/com/baseball/mssage/Message.java new file mode 100644 index 0000000..636a0db --- /dev/null +++ b/src/main/java/com/baseball/mssage/Message.java @@ -0,0 +1,18 @@ +package com.baseball.mssage; + +public enum Message { + START_MESSAGE("숫자를 입력해주세요 : "), + VERIFICATION_MESSAGE("볼 입력이 잘못되었습니다."), + GAME_RESULT_MESSAGE("낫 싱"), + GAME_COMPLETE_MESSAGE("3개의 숫자를 모두 맞히셨습니다! 게임 종료 \n게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + + private final String message; + + Message(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } +} diff --git a/src/main/java/com/baseball/view/InputView.java b/src/main/java/com/baseball/view/InputView.java new file mode 100644 index 0000000..94f8c08 --- /dev/null +++ b/src/main/java/com/baseball/view/InputView.java @@ -0,0 +1,22 @@ +package com.baseball.view; + +import java.util.Scanner; + +public class InputView { + private static Scanner scanner; + public static String inputBalls() { + scanner = new Scanner(System.in); + return scanner.nextLine(); + } + + public static int inputCoin() { + scanner = new Scanner(System.in); + return scanner.nextInt(); + } + + public static void getClose() { + scanner.close(); + } + + +} diff --git a/src/main/java/com/baseball/view/OutputView.java b/src/main/java/com/baseball/view/OutputView.java new file mode 100644 index 0000000..2a9848f --- /dev/null +++ b/src/main/java/com/baseball/view/OutputView.java @@ -0,0 +1,24 @@ +package com.baseball.view; + +import com.baseball.mssage.Message; + +public class OutputView { + + public void messagePrint(String message, String resultMessage) { + switch (message) { + case "START": + System.out.println(Message.START_MESSAGE.getMessage()); + break; + case "VERIFICATION": + System.out.println(Message.VERIFICATION_MESSAGE.getMessage()); + break; + case "GAME_RESULT": + if (!resultMessage.isEmpty()) System.out.println(resultMessage); + else System.out.println(Message.GAME_RESULT_MESSAGE.getMessage()); + break; + case "GAME_COMPLETE": + System.out.println(Message.GAME_COMPLETE_MESSAGE.getMessage()); + break; + } + } +} diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29..0000000