From 933d2abae2e2599d7be2432ff67a8b29e263e1a3 Mon Sep 17 00:00:00 2001 From: seokrae Date: Mon, 2 Jan 2023 19:14:52 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=EC=95=BC?= =?UTF-8?q?=EA=B5=AC=20=EA=B2=8C=EC=9E=84=20=EC=96=B4=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=8B=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/baseball/BaseBallApplication.java | 10 ++++++++++ .../java/com/example/baseball/game/BaseBallGame.java | 7 +++++++ 2 files changed, 17 insertions(+) create mode 100644 src/main/java/com/example/baseball/BaseBallApplication.java create mode 100644 src/main/java/com/example/baseball/game/BaseBallGame.java diff --git a/src/main/java/com/example/baseball/BaseBallApplication.java b/src/main/java/com/example/baseball/BaseBallApplication.java new file mode 100644 index 0000000..45062df --- /dev/null +++ b/src/main/java/com/example/baseball/BaseBallApplication.java @@ -0,0 +1,10 @@ +package com.example.baseball; + +import com.example.baseball.game.BaseBallGame; + +public class BaseBallApplication { + public static void main(String[] args) { + BaseBallGame baseBallGame = new BaseBallGame(); + baseBallGame.run(); + } +} diff --git a/src/main/java/com/example/baseball/game/BaseBallGame.java b/src/main/java/com/example/baseball/game/BaseBallGame.java new file mode 100644 index 0000000..d5176bf --- /dev/null +++ b/src/main/java/com/example/baseball/game/BaseBallGame.java @@ -0,0 +1,7 @@ +package com.example.baseball.game; + +public class BaseBallGame { + public void run() { + + } +} From 237da3263a53b4648960f672a157aa1ba0aa5e89 Mon Sep 17 00:00:00 2001 From: seokrae Date: Mon, 2 Jan 2023 22:48:43 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20baseball=20=EB=82=B4=EB=B6=80=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=A0=9C=EC=99=B8=ED=95=9C=20=EC=8A=A4?= =?UTF-8?q?=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/baseball/BaseBallApplication.java | 4 +-- .../java/com/example/baseball/balls/Ball.java | 17 ++++++++++ .../com/example/baseball/balls/Balls.java | 24 ++++++++++++++ .../com/example/baseball/balls/Pitching.java | 24 ++++++++++++++ .../example/baseball/game/BaseBallGame.java | 33 ++++++++++++++++++- .../java/com/example/baseball/game/Round.java | 32 ++++++++++++++++++ .../java/com/example/baseball/io/Input.java | 9 +++++ .../java/com/example/baseball/io/Output.java | 5 +++ .../baseball/strategy/NumberGenerator.java | 8 +++++ 9 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/baseball/balls/Ball.java create mode 100644 src/main/java/com/example/baseball/balls/Balls.java create mode 100644 src/main/java/com/example/baseball/balls/Pitching.java create mode 100644 src/main/java/com/example/baseball/game/Round.java create mode 100644 src/main/java/com/example/baseball/io/Input.java create mode 100644 src/main/java/com/example/baseball/io/Output.java create mode 100644 src/main/java/com/example/baseball/strategy/NumberGenerator.java diff --git a/src/main/java/com/example/baseball/BaseBallApplication.java b/src/main/java/com/example/baseball/BaseBallApplication.java index 45062df..354cc1f 100644 --- a/src/main/java/com/example/baseball/BaseBallApplication.java +++ b/src/main/java/com/example/baseball/BaseBallApplication.java @@ -4,7 +4,7 @@ public class BaseBallApplication { public static void main(String[] args) { - BaseBallGame baseBallGame = new BaseBallGame(); - baseBallGame.run(); + BaseBallGame baseBallGame = new BaseBallGame(null, null); + baseBallGame.run(null); } } diff --git a/src/main/java/com/example/baseball/balls/Ball.java b/src/main/java/com/example/baseball/balls/Ball.java new file mode 100644 index 0000000..7bfedeb --- /dev/null +++ b/src/main/java/com/example/baseball/balls/Ball.java @@ -0,0 +1,17 @@ +package com.example.baseball.balls; + +/** + * 값 객체의 역할을 하는 클래스 + */ +public class Ball { + private final int value; + + public Ball(int value) { + this.value = value; + } + + public boolean isMatch(Ball user) { + // TODO 값이 같은지 비교하는 로직을 구현한다. + return false; + } +} diff --git a/src/main/java/com/example/baseball/balls/Balls.java b/src/main/java/com/example/baseball/balls/Balls.java new file mode 100644 index 0000000..42e44bc --- /dev/null +++ b/src/main/java/com/example/baseball/balls/Balls.java @@ -0,0 +1,24 @@ +package com.example.baseball.balls; + +import java.util.List; + +/** + * Ball에 대한 로직을 담은 일급 컬렉션 클래스 + */ +public class Balls { + private final List balls; + + public Balls(List balls) { + this.balls = balls; + } + + public boolean isStrike(Ball user, int idx) { + // TODO 스트라이크 여부를 판단하는 로직을 구현한다. + return false; + } + + public boolean isBall(Ball user, int idx) { + // TODO 볼 여부를 판단하는 로직을 구현한다. + return false; + } +} diff --git a/src/main/java/com/example/baseball/balls/Pitching.java b/src/main/java/com/example/baseball/balls/Pitching.java new file mode 100644 index 0000000..768e5d3 --- /dev/null +++ b/src/main/java/com/example/baseball/balls/Pitching.java @@ -0,0 +1,24 @@ +package com.example.baseball.balls; + +/** + * 비교 연산 및 결과 값을 담는 클래스 + */ +public class Pitching { + private final int strike; + private final int ball; + + public Pitching(int strike, int ball) { + this.strike = strike; + this.ball = ball; + } + + public static Pitching matches(Balls computer, Balls user) { + // TODO 스트라이크 및 볼을 연산하는 로직을 구현한다. + return null; + } + + public boolean isStrike() { + // TODO 스트라이크 여부를 판단하는 로직을 구현한다. + return false; + } +} diff --git a/src/main/java/com/example/baseball/game/BaseBallGame.java b/src/main/java/com/example/baseball/game/BaseBallGame.java index d5176bf..f1f4f40 100644 --- a/src/main/java/com/example/baseball/game/BaseBallGame.java +++ b/src/main/java/com/example/baseball/game/BaseBallGame.java @@ -1,7 +1,38 @@ package com.example.baseball.game; +import com.example.baseball.balls.Balls; +import com.example.baseball.balls.Pitching; +import com.example.baseball.io.Input; +import com.example.baseball.io.Output; +import com.example.baseball.strategy.NumberGenerator; + public class BaseBallGame { - public void run() { + private final Input input; + private final Output output; + + public BaseBallGame(Input input, Output output) { + this.input = input; + this.output = output; + } + /** + * 전체 게임의 트랜잭션을 책임지는 클래스 + */ + public void run(NumberGenerator numberGenerator) { + // 야구 게임은 게임을 끝낼 때까지 반복이 가능 + + do { + // 1. 게임 시작 + // 2. 컴퓨터(target) 숫자 생성 + Balls computer = numberGenerator.throwing(); + // 2.1 컴휴터가 생성한 숫자는 서로 다른 세 개 숫자로 이루어진다. + Pitching pitching = new Round(input, output) + .start(computer); + // 3. 사용자 숫자 입력 + // 3.1 사용자가 입력한 숫자는 서로 다른 세 개 숫자로 이루어진다. + // 4. 사용자 숫자와 컴퓨터 숫자 비교 + // 5. 사용자 숫자와 컴퓨터 숫자의 위치와 크기가 모두 같으면 게임 종료 + output.print(pitching.toString()); + } while(input.isReGame()); } } diff --git a/src/main/java/com/example/baseball/game/Round.java b/src/main/java/com/example/baseball/game/Round.java new file mode 100644 index 0000000..c1a0537 --- /dev/null +++ b/src/main/java/com/example/baseball/game/Round.java @@ -0,0 +1,32 @@ +package com.example.baseball.game; + +import com.example.baseball.balls.Balls; +import com.example.baseball.balls.Pitching; +import com.example.baseball.io.Input; +import com.example.baseball.io.Output; + +public class Round { + private final Input input; + private final Output output; + + public Round(Input input, Output output) { + this.input = input; + this.output = output; + } + + public Pitching start(Balls computer) { + + Pitching pitching; + do { + // 3. 사용자 숫자 입력 + Balls user = input.throwing(); + // 4. 사용자 숫자와 컴퓨터 숫자 비교 + pitching = Pitching.matches(computer, user); + // 5. 사용자 숫자와 컴퓨터 숫자의 위치와 크기가 모두 같으면 게임 종료 + output.print(pitching.toString()); + + } while(!pitching.isStrike()); + + return pitching; + } +} diff --git a/src/main/java/com/example/baseball/io/Input.java b/src/main/java/com/example/baseball/io/Input.java new file mode 100644 index 0000000..147cce2 --- /dev/null +++ b/src/main/java/com/example/baseball/io/Input.java @@ -0,0 +1,9 @@ +package com.example.baseball.io; + +import com.example.baseball.balls.Balls; + +public interface Input { + boolean isReGame(); + + Balls throwing(); +} diff --git a/src/main/java/com/example/baseball/io/Output.java b/src/main/java/com/example/baseball/io/Output.java new file mode 100644 index 0000000..694698c --- /dev/null +++ b/src/main/java/com/example/baseball/io/Output.java @@ -0,0 +1,5 @@ +package com.example.baseball.io; + +public interface Output { + void print(String toString); +} diff --git a/src/main/java/com/example/baseball/strategy/NumberGenerator.java b/src/main/java/com/example/baseball/strategy/NumberGenerator.java new file mode 100644 index 0000000..808c385 --- /dev/null +++ b/src/main/java/com/example/baseball/strategy/NumberGenerator.java @@ -0,0 +1,8 @@ +package com.example.baseball.strategy; + +import com.example.baseball.balls.Balls; + +@FunctionalInterface +public interface NumberGenerator { + Balls throwing(); +}