From 05d2a1c7617092480d60c28ed571b20d62be8f65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 14:36:19 +0900 Subject: [PATCH 01/14] =?UTF-8?q?refactor=20:=20OutputUtil=EC=9D=98=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 동일하게 보여야하는 데이터는 View에서 가지고 있도록 변경 --- src/main/java/view/OutputUtil.java | 32 ++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/view/OutputUtil.java b/src/main/java/view/OutputUtil.java index f4d09d8c..8150c365 100644 --- a/src/main/java/view/OutputUtil.java +++ b/src/main/java/view/OutputUtil.java @@ -1,7 +1,35 @@ package view; +import domain.Ladder; +import domain.Line; +import domain.User; + +import java.util.List; + public class OutputUtil { - public static void printLadder(String ladder) { - System.out.println(ladder); + private static final String USER_LINE = "|"; + private static final String CONNECTION_LINE = "-----"; + private static final String EMPTY_LINE = " "; + + public static void printUsers(List users) { + users.forEach(user -> System.out.print(user + " ")); + } + + + public static void printLadder(Ladder ladder) { + //각 줄별로 출력 + } + + public static void printResults() { + //Result를 담은 List를 매개변수로 받는다 + //출력 + } + + private static void printLadderLine(Line line) { + //반복문으로 line을 돌면서 + //-1 = 빈칸 + //0 = 유저 + //1 = 연결선 + //으로 만들어서 반환 } } From 1fabc23a3ee4b7acc1bd93490ee79e91911adbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 15:09:06 +0900 Subject: [PATCH 02/14] =?UTF-8?q?refactor=20:=20User=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20=EC=8B=9C=EC=9E=91=EC=9C=84=EC=B9=98?= =?UTF-8?q?=EB=A5=BC=20=EB=82=98=ED=83=80=EB=82=B4=EB=8A=94=20point=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/User.java | 12 +++++++++--- src/test/java/domain/UserTest.java | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java index d6f05e61..56708762 100644 --- a/src/main/java/domain/User.java +++ b/src/main/java/domain/User.java @@ -7,23 +7,29 @@ public class User { private static final int USERNAME_MINLENGTH = 1; private static final String PADDING = " "; private String name; + private int point; - private User(String user) { + private User(String user, int point) { if (!validateUserName(user)) { throw new InputMismatchException("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); } this.name = addPadding(user); + this.point = point; } - public static User createUser(String user) { - return new User(user); + public static User createUser(String user, int point) { + return new User(user, point); } public String getName() { return name; } + public int getPoint() { + return point; + } + private String addPadding(String user) { if (user.length() == USERNAME_MAXLENGTH) { return user; diff --git a/src/test/java/domain/UserTest.java b/src/test/java/domain/UserTest.java index de70026e..ab84ca09 100644 --- a/src/test/java/domain/UserTest.java +++ b/src/test/java/domain/UserTest.java @@ -16,7 +16,7 @@ public class UserTest { @DisplayName("유저 이름의 길이가 범위를 벗어날 경우 예외발생 테스트") void nameLengthOutOfBound() { - assertThatThrownBy(() -> User.createUser("suntory")) + assertThatThrownBy(() -> User.createUser("suntory",0)) .isInstanceOf(InputMismatchException.class) .hasMessage("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); } @@ -27,7 +27,7 @@ void addPaddingToUsername() { List usernames = Arrays.asList("a","aa", "aaa", "aaaa"); usernames.forEach(name->{ - String sut = User.createUser(name).getName(); + String sut = User.createUser(name,0).getName(); assertThat(sut.length()).isEqualTo(5); }); } From ae16b2c34441b11bf85d290e1e028884b667cba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 15:09:57 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat=20:=20=EA=B2=B0=EA=B3=BC=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EB=8B=B4=EB=8A=94=20Result=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20result=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EB=B0=9B=EB=8A=94=20Input=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - InputUtil에 예외처리하는 메서드 제거 --- src/main/java/domain/Result.java | 18 ++++++++++++++++++ src/main/java/view/InputUtil.java | 18 ++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 src/main/java/domain/Result.java diff --git a/src/main/java/domain/Result.java b/src/main/java/domain/Result.java new file mode 100644 index 00000000..adfdae44 --- /dev/null +++ b/src/main/java/domain/Result.java @@ -0,0 +1,18 @@ +package domain; + + +public class Result { + private final String name; + + private Result(String name) { + this.name = name; + } + + public static Result createResult(String name) { + return new Result(name); + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/view/InputUtil.java b/src/main/java/view/InputUtil.java index 7ef3c5ca..0c0e5ee8 100644 --- a/src/main/java/view/InputUtil.java +++ b/src/main/java/view/InputUtil.java @@ -1,24 +1,27 @@ package view; -import java.util.InputMismatchException; import java.util.Scanner; public class InputUtil { private static final Scanner sc = new Scanner(System.in); private static final String NAME_INPUT_QUESTION = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; + private static final String RESULT_INPUT_QUESTION = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; private static final String HEIGHT_INPUT_QUESTION = "최대 사다리 높이는 몇 개인가요?"; - private static final String EXCEPTION_MESSAGE = "참가자의 수가 부족합니다."; public static String[] getUserNameInput() { System.out.println(NAME_INPUT_QUESTION); String usernames = sc.nextLine(); - if(!validateUsernameFormat(usernames)){ - throw new InputMismatchException(EXCEPTION_MESSAGE); - } return usernames.split(","); } + public static String[] getResultsInput() { + System.out.println(RESULT_INPUT_QUESTION); + + String resuls = sc.nextLine(); + return resuls.split(","); + } + public static int getLadderSizeInput() { System.out.println(HEIGHT_INPUT_QUESTION); return sc.nextInt(); @@ -27,9 +30,4 @@ public static int getLadderSizeInput() { public static void close() { sc.close(); } - - - public static boolean validateUsernameFormat(String usernames) { - return usernames.split(",").length >= 2; - } } From c507bad9b51a5d64eb92edb5ab768cd3624e577c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 15:11:19 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat=20:=20Controller,=20Service=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20result=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Controller에서 서비스에게 result를 매개변수로 전달하도록 변경 - User, Result를 담는 자료구조를 List에서 Map으로 변경 --- src/main/java/controller/GameController.java | 7 +-- src/main/java/domain/service/GameService.java | 51 +++++++++++-------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 4c1f4704..fba3f722 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -8,11 +8,12 @@ public class GameController { public void run() { - String[] users = InputUtil.getUserNameInput();; + String[] users = InputUtil.getUserNameInput(); + String[] results = InputUtil.getResultsInput(); int lineHeight = InputUtil.getLadderSizeInput(); - GameService ladderGame = new GameService(lineHeight, users); - OutputUtil.printLadder(ladderGame.getGameResult()); + GameService ladderGame = new GameService(lineHeight, users, results); +// OutputUtil.printLadder(ladderGame.getGameResult()); } } diff --git a/src/main/java/domain/service/GameService.java b/src/main/java/domain/service/GameService.java index fda310da..1e0a2063 100644 --- a/src/main/java/domain/service/GameService.java +++ b/src/main/java/domain/service/GameService.java @@ -1,41 +1,52 @@ package domain.service; import domain.Ladder; +import domain.Result; import domain.User; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; public class GameService { - private List users; + private Map users; + private Map results; private Ladder ladder; - public GameService(int ladderHeight, String[] user) { + public GameService( int lineHeight, String[] users,String[] results) { - this.users = getUserList(user); - this.ladder = new Ladder(ladderHeight, calculateLadderWidth()); + this.users = getUserMap(users); + this.results = getResultMap(results); + this.ladder = new Ladder(lineHeight, calculateLadderWidth()); } - public String getGameResult() { - StringBuilder sb = new StringBuilder(); - - users.forEach(user -> { - sb.append(user.getName() + " "); - }); - sb.append("\n"); - sb.append(ladder.toString()); - - return sb.toString(); + public Result getSingleResult(String username) { + int userPoint = users.get(username).getPoint(); + //게임 로직 + return results.get(userPoint); } - private List getUserList(String[] users) { - List list = new ArrayList<>(); + private Map getUserMap(String[] users) { + int i = 0; + Map map = new HashMap<>(); for (String user : users) { - list.add(User.createUser(user)); + map.put(user, User.createUser(user, i)); + i += 2; } - return list; + return map; } + private Map getResultMap(String[] results) { + int i = 0; + Map map = new HashMap<>(); + for (String result : results) { + map.put(i,Result.createResult(result)); + i += 2; + } + return map; + } + + + private int calculateLadderWidth() { return users.size() * 2 - 1; } From 8531f0fa319babacf919566827c229206114d0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 15:59:43 +0900 Subject: [PATCH 05/14] =?UTF-8?q?refactor=20:=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EB=82=B4=EC=97=90=EC=84=9C=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ladder, result, user 패키지로 분리 및 각각 Creator클래스 생성 --- src/main/java/controller/GameController.java | 3 +- src/main/java/domain/User.java | 53 ------------------- .../java/domain/gameservice/GameService.java | 35 ++++++++++++ src/main/java/domain/{ => ladder}/Ladder.java | 2 +- .../java/domain/ladder/LadderCreator.java | 8 +++ src/main/java/domain/{ => ladder}/Line.java | 2 +- src/main/java/domain/{ => result}/Result.java | 2 +- .../java/domain/result/ResultCreator.java | 16 ++++++ src/main/java/domain/service/GameService.java | 53 ------------------- src/main/java/domain/user/User.java | 20 +++++++ src/main/java/domain/user/UserCreator.java | 33 ++++++++++++ src/main/java/view/OutputUtil.java | 6 +-- src/test/java/domain/LineTest.java | 1 + src/test/java/domain/UserTest.java | 26 +++++---- 14 files changed, 132 insertions(+), 128 deletions(-) delete mode 100644 src/main/java/domain/User.java create mode 100644 src/main/java/domain/gameservice/GameService.java rename src/main/java/domain/{ => ladder}/Ladder.java (97%) create mode 100644 src/main/java/domain/ladder/LadderCreator.java rename src/main/java/domain/{ => ladder}/Line.java (98%) rename src/main/java/domain/{ => result}/Result.java (92%) create mode 100644 src/main/java/domain/result/ResultCreator.java delete mode 100644 src/main/java/domain/service/GameService.java create mode 100644 src/main/java/domain/user/User.java create mode 100644 src/main/java/domain/user/UserCreator.java diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index fba3f722..e9eca319 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -1,8 +1,7 @@ package controller; -import domain.service.GameService; +import domain.gameservice.GameService; import view.InputUtil; -import view.OutputUtil; public class GameController { diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java deleted file mode 100644 index 56708762..00000000 --- a/src/main/java/domain/User.java +++ /dev/null @@ -1,53 +0,0 @@ -package domain; - -import java.util.*; - -public class User { - private static final int USERNAME_MAXLENGTH = 5; - private static final int USERNAME_MINLENGTH = 1; - private static final String PADDING = " "; - private String name; - private int point; - - - private User(String user, int point) { - if (!validateUserName(user)) { - throw new InputMismatchException("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); - } - this.name = addPadding(user); - this.point = point; - } - - public static User createUser(String user, int point) { - return new User(user, point); - } - - public String getName() { - return name; - } - - public int getPoint() { - return point; - } - - private String addPadding(String user) { - if (user.length() == USERNAME_MAXLENGTH) { - return user; - } - StringBuilder sb = new StringBuilder(); - int whiteSpace = USERNAME_MAXLENGTH - user.length(); - int frontSpace = whiteSpace / 2; - int backSpace = whiteSpace - frontSpace; - - sb.append(PADDING.repeat(frontSpace)); - sb.append(user); - sb.append(PADDING.repeat(backSpace)); - - return sb.toString(); - } - - - private boolean validateUserName(String name) { - return name.length() >= USERNAME_MINLENGTH && name.length() <= USERNAME_MAXLENGTH; - } -} diff --git a/src/main/java/domain/gameservice/GameService.java b/src/main/java/domain/gameservice/GameService.java new file mode 100644 index 00000000..a5db43a5 --- /dev/null +++ b/src/main/java/domain/gameservice/GameService.java @@ -0,0 +1,35 @@ +package domain.gameservice; + +import domain.ladder.Ladder; +import domain.ladder.LadderCreator; +import domain.result.Result; +import domain.result.ResultCreator; +import domain.user.User; +import domain.user.UserCreator; + +import java.util.Map; + +public class GameService { + private Map users; + private Map results; + private Ladder ladder; + + public GameService( int lineHeight, String[] users,String[] results) { + + this.users = UserCreator.createUserMap(users); + this.results = ResultCreator.createResultMap(results); + this.ladder = LadderCreator.createLadder(lineHeight, calculateLadderWidth()); + } + + public Result getSingleResult(String username) { + int userPoint = users.get(username).getPoint(); + //게임 로직 + return results.get(userPoint); + } + + + + private int calculateLadderWidth() { + return users.size() * 2 - 1; + } +} diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/ladder/Ladder.java similarity index 97% rename from src/main/java/domain/Ladder.java rename to src/main/java/domain/ladder/Ladder.java index 32f5f70a..65ca9bb9 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -1,4 +1,4 @@ -package domain; +package domain.ladder; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/domain/ladder/LadderCreator.java b/src/main/java/domain/ladder/LadderCreator.java new file mode 100644 index 00000000..a646c4d5 --- /dev/null +++ b/src/main/java/domain/ladder/LadderCreator.java @@ -0,0 +1,8 @@ +package domain.ladder; + +public class LadderCreator { + public static Ladder createLadder(int ladderHeight, int ladderWidth) { + return new Ladder(ladderHeight, ladderWidth); + } + +} diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/ladder/Line.java similarity index 98% rename from src/main/java/domain/Line.java rename to src/main/java/domain/ladder/Line.java index f5af7170..3fca3baf 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/ladder/Line.java @@ -1,4 +1,4 @@ -package domain; +package domain.ladder; import util.RandomUtil; diff --git a/src/main/java/domain/Result.java b/src/main/java/domain/result/Result.java similarity index 92% rename from src/main/java/domain/Result.java rename to src/main/java/domain/result/Result.java index adfdae44..0868e1ec 100644 --- a/src/main/java/domain/Result.java +++ b/src/main/java/domain/result/Result.java @@ -1,4 +1,4 @@ -package domain; +package domain.result; public class Result { diff --git a/src/main/java/domain/result/ResultCreator.java b/src/main/java/domain/result/ResultCreator.java new file mode 100644 index 00000000..e28a7cd8 --- /dev/null +++ b/src/main/java/domain/result/ResultCreator.java @@ -0,0 +1,16 @@ +package domain.result; + +import java.util.HashMap; +import java.util.Map; + +public class ResultCreator { + public static Map createResultMap(String[] results) { + int i = 0; + Map map = new HashMap<>(); + for (String result : results) { + map.put(i,Result.createResult(result)); + i += 2; + } + return map; + } +} diff --git a/src/main/java/domain/service/GameService.java b/src/main/java/domain/service/GameService.java deleted file mode 100644 index 1e0a2063..00000000 --- a/src/main/java/domain/service/GameService.java +++ /dev/null @@ -1,53 +0,0 @@ -package domain.service; - -import domain.Ladder; -import domain.Result; -import domain.User; - -import java.util.HashMap; -import java.util.Map; - -public class GameService { - private Map users; - private Map results; - private Ladder ladder; - - public GameService( int lineHeight, String[] users,String[] results) { - - this.users = getUserMap(users); - this.results = getResultMap(results); - this.ladder = new Ladder(lineHeight, calculateLadderWidth()); - } - - public Result getSingleResult(String username) { - int userPoint = users.get(username).getPoint(); - //게임 로직 - return results.get(userPoint); - } - - private Map getUserMap(String[] users) { - int i = 0; - Map map = new HashMap<>(); - for (String user : users) { - map.put(user, User.createUser(user, i)); - i += 2; - } - return map; - } - - private Map getResultMap(String[] results) { - int i = 0; - Map map = new HashMap<>(); - for (String result : results) { - map.put(i,Result.createResult(result)); - i += 2; - } - return map; - } - - - - private int calculateLadderWidth() { - return users.size() * 2 - 1; - } -} diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java new file mode 100644 index 00000000..7c9869d3 --- /dev/null +++ b/src/main/java/domain/user/User.java @@ -0,0 +1,20 @@ +package domain.user; + +public class User { + private String name; + private int point; + + + public User(String user, int point) { + this.name = user; + this.point = point; + } + + public String getName() { + return name; + } + + public int getPoint() { + return point; + } +} diff --git a/src/main/java/domain/user/UserCreator.java b/src/main/java/domain/user/UserCreator.java new file mode 100644 index 00000000..958359e5 --- /dev/null +++ b/src/main/java/domain/user/UserCreator.java @@ -0,0 +1,33 @@ +package domain.user; + +import java.util.HashMap; + +import java.util.InputMismatchException; +import java.util.Map; + +public class UserCreator { + private static final int USERNAME_MAXLENGTH = 5; + private static final int USERNAME_MINLENGTH = 1; + private Map users; + + public UserCreator(String[] users) { + this.users = createUserMap(users); + } + + public static Map createUserMap(String[] users) { + int i = 0; + Map map = new HashMap<>(); + for (String user : users) { + validateUserName(user); + map.put(user, new User(user, i)); + i += 2; + } + return map; + } + + private static void validateUserName(String name) { + if(!(name.length() >= USERNAME_MINLENGTH && name.length() <= USERNAME_MAXLENGTH)) { + throw new InputMismatchException("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); + }; + } +} diff --git a/src/main/java/view/OutputUtil.java b/src/main/java/view/OutputUtil.java index 8150c365..c3bb55ec 100644 --- a/src/main/java/view/OutputUtil.java +++ b/src/main/java/view/OutputUtil.java @@ -1,8 +1,8 @@ package view; -import domain.Ladder; -import domain.Line; -import domain.User; +import domain.ladder.Ladder; +import domain.ladder.Line; +import domain.user.User; import java.util.List; diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java index ca61bd6f..37060dbd 100644 --- a/src/test/java/domain/LineTest.java +++ b/src/test/java/domain/LineTest.java @@ -1,5 +1,6 @@ package domain; +import domain.ladder.Line; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/domain/UserTest.java b/src/test/java/domain/UserTest.java index ab84ca09..b8938bcb 100644 --- a/src/test/java/domain/UserTest.java +++ b/src/test/java/domain/UserTest.java @@ -1,11 +1,10 @@ package domain; +import domain.user.UserCreator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.Arrays; import java.util.InputMismatchException; -import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -15,20 +14,19 @@ public class UserTest { @Test @DisplayName("유저 이름의 길이가 범위를 벗어날 경우 예외발생 테스트") void nameLengthOutOfBound() { - - assertThatThrownBy(() -> User.createUser("suntory",0)) + assertThatThrownBy(() -> UserCreator.createUserMap(new String[]{"suntory, forky, jerry"})) .isInstanceOf(InputMismatchException.class) .hasMessage("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); } - @Test - @DisplayName("이름의 길이가 5자가 아닐경우 공백으로 채워주는 테스트") - void addPaddingToUsername() { - List usernames = Arrays.asList("a","aa", "aaa", "aaaa"); - - usernames.forEach(name->{ - String sut = User.createUser(name,0).getName(); - assertThat(sut.length()).isEqualTo(5); - }); - } +// @Test +// @DisplayName("이름의 길이가 5자가 아닐경우 공백으로 채워주는 테스트") +// void addPaddingToUsername() { +// List usernames = Arrays.asList("a","aa", "aaa", "aaaa"); +// +// usernames.forEach(name->{ +// String sut = new User(name,0).getName(); +// assertThat(sut.length()).isEqualTo(5); +// }); +// } } From ce41cf77ce62a50a902ea0adf7c9bf29f9626afc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 21:49:12 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat=20:=201=EB=AA=85=EC=9D=98=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=96=BB=EC=96=B4=EC=98=A4?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20Result=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=9D=84=20Item=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ladder 클래스에 포인트를 이동시키는 메서드, 좌우 이동 가능 여부 판별 메서드 추가 - Line에 이전, 다음 요소 반환하는 메서드 추가 - OutputUtil 클래스 출력 메서드, addPadding 메서드 추가 --- src/main/java/controller/GameController.java | 6 ++- .../java/domain/gameservice/GameService.java | 34 +++++++++---- src/main/java/domain/item/Item.java | 18 +++++++ src/main/java/domain/item/ItemCreator.java | 16 ++++++ src/main/java/domain/ladder/Ladder.java | 44 ++++++++++------ .../java/domain/ladder/LadderCreator.java | 7 +++ src/main/java/domain/ladder/Line.java | 42 ++++++++------- src/main/java/domain/result/Result.java | 18 ------- .../java/domain/result/ResultCreator.java | 16 ------ src/main/java/view/OutputUtil.java | 51 ++++++++++++++----- src/test/java/domain/UserTest.java | 12 ----- 11 files changed, 162 insertions(+), 102 deletions(-) create mode 100644 src/main/java/domain/item/Item.java create mode 100644 src/main/java/domain/item/ItemCreator.java delete mode 100644 src/main/java/domain/result/Result.java delete mode 100644 src/main/java/domain/result/ResultCreator.java diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index e9eca319..f70271fd 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -2,6 +2,7 @@ import domain.gameservice.GameService; import view.InputUtil; +import view.OutputUtil; public class GameController { @@ -12,7 +13,10 @@ public void run() { int lineHeight = InputUtil.getLadderSizeInput(); GameService ladderGame = new GameService(lineHeight, users, results); -// OutputUtil.printLadder(ladderGame.getGameResult()); + OutputUtil.printUsers(ladderGame.getUsers()); + OutputUtil.printLadder(ladderGame.getLadder()); + OutputUtil.printItems(ladderGame.getItems()); + } } diff --git a/src/main/java/domain/gameservice/GameService.java b/src/main/java/domain/gameservice/GameService.java index a5db43a5..f7c31293 100644 --- a/src/main/java/domain/gameservice/GameService.java +++ b/src/main/java/domain/gameservice/GameService.java @@ -2,34 +2,50 @@ import domain.ladder.Ladder; import domain.ladder.LadderCreator; -import domain.result.Result; -import domain.result.ResultCreator; +import domain.ladder.Line; +import domain.item.Item; +import domain.item.ItemCreator; import domain.user.User; import domain.user.UserCreator; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class GameService { private Map users; - private Map results; + private Map items; private Ladder ladder; - public GameService( int lineHeight, String[] users,String[] results) { + public GameService( int lineHeight, String[] users,String[] items) { this.users = UserCreator.createUserMap(users); - this.results = ResultCreator.createResultMap(results); + this.items = ItemCreator.createResultMap(items); this.ladder = LadderCreator.createLadder(lineHeight, calculateLadderWidth()); } - public Result getSingleResult(String username) { + public Item getSinglePlayerResult(String username) { int userPoint = users.get(username).getPoint(); - //게임 로직 - return results.get(userPoint); - } + for (int i = 0; i < ladder.getLadderSize(); i++) { + userPoint += ladder.move(i, userPoint); + } + return items.get(userPoint); + } + public List getLadder() { + return ladder.getLadders(); + } private int calculateLadderWidth() { return users.size() * 2 - 1; } + + public List getUsers() { + return new ArrayList<>(users.values()); + } + + public List getItems() { + return new ArrayList<>(items.values()); + } } diff --git a/src/main/java/domain/item/Item.java b/src/main/java/domain/item/Item.java new file mode 100644 index 00000000..631bdf49 --- /dev/null +++ b/src/main/java/domain/item/Item.java @@ -0,0 +1,18 @@ +package domain.item; + + +public class Item { + private final String name; + + private Item(String name) { + this.name = name; + } + + public static Item createResult(String name) { + return new Item(name); + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/domain/item/ItemCreator.java b/src/main/java/domain/item/ItemCreator.java new file mode 100644 index 00000000..00c8ab18 --- /dev/null +++ b/src/main/java/domain/item/ItemCreator.java @@ -0,0 +1,16 @@ +package domain.item; + +import java.util.HashMap; +import java.util.Map; + +public class ItemCreator { + public static Map createResultMap(String[] results) { + int i = 0; + Map map = new HashMap<>(); + for (String result : results) { + map.put(i, Item.createResult(result)); + i += 2; + } + return map; + } +} diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java index 65ca9bb9..1178ea86 100644 --- a/src/main/java/domain/ladder/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -10,23 +10,39 @@ public class Ladder { public Ladder(int ladderHeight, int ladderWidth) { - if (!validateLadderHeight(ladderHeight)) { - throw new IllegalArgumentException("입력값이 올바르지 않습니다."); - } this.ladderHeight = ladderHeight; this.ladderWidth = ladderWidth; initLadder(); } - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - ladders.forEach(line->{ - StringBuilder row = new StringBuilder(); - row.append(line.toString()); - sb.append(" " + row + "\n"); - }); - return sb.toString(); + public int getLadderSize() { + return ladderHeight; + } + + public List getLadders() { + return ladders; + } + + public int move(int rowNumber, int userPoint) { + Line line = ladders.get(rowNumber); + if (userPoint == 0) { + return canMoveRight(line, userPoint); + } + if (userPoint == ladderWidth-1) { + return canMoveLeft(line, userPoint); + } + return canMoveLeft(line, userPoint) + canMoveRight(line, userPoint); + + } + + private int canMoveLeft(Line line, int userPoint) { + if (line.getPrev(userPoint) == 1) return -2; + return 0; + } + + private int canMoveRight(Line line, int userPoint) { + if (line.getNext(userPoint) == 1) return 2; + return 0; } private void initLadder() { @@ -36,7 +52,5 @@ private void initLadder() { } } - private boolean validateLadderHeight(int lineCount) { - return lineCount >= 1; - } + } diff --git a/src/main/java/domain/ladder/LadderCreator.java b/src/main/java/domain/ladder/LadderCreator.java index a646c4d5..4c00868a 100644 --- a/src/main/java/domain/ladder/LadderCreator.java +++ b/src/main/java/domain/ladder/LadderCreator.java @@ -2,7 +2,14 @@ public class LadderCreator { public static Ladder createLadder(int ladderHeight, int ladderWidth) { + if (!validateLadderHeight(ladderHeight)) { + throw new IllegalArgumentException("입력값이 올바르지 않습니다."); + } return new Ladder(ladderHeight, ladderWidth); } + private static boolean validateLadderHeight(int lineCount) { + return lineCount >= 1; + } + } diff --git a/src/main/java/domain/ladder/Line.java b/src/main/java/domain/ladder/Line.java index 3fca3baf..522bfc4f 100644 --- a/src/main/java/domain/ladder/Line.java +++ b/src/main/java/domain/ladder/Line.java @@ -6,53 +6,59 @@ import java.util.List; public class Line { - private static final String USER_LINE = "|"; - private static final String CONNECTION_LINE = "-----"; - private static final String EMPTY_SPACE = " "; - private List row; + private static final int USER_LINE = 0; + private static final int CONNECTION_LINE = 1; + private static final int EMPTY_SPACE = -1; + private List row; public static Line createRandomStep(int width) { return new Line(width); } - private Line(int width) { - row = createLadderRow(width); + + public int getPrev(int userPoint) { + return row.get(userPoint - 1); + } + + public int getNext(int userPoint) { + return row.get(userPoint + 1); } - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - row.forEach(element -> sb.append(element)); - return sb.toString(); + public List getLine() { + return row; + } + + private Line(int width) { + row = createLadderRow(width); } - private List createLadderRow(int width) { - List row = new ArrayList<>(); + private List createLadderRow(int width) { + List row = new ArrayList<>(); for (int i = 0; i < width; i++) { row.add(createElement(i, row)); } return row; } - private String createElement(int point, List row) { + private int createElement(int point, List row) { if (point % 2 == 0) { return USER_LINE; } return createRandomStep(point, row); } - private String createRandomStep(int point, List row) { + private int createRandomStep(int point, List row) { if (point == 1 || !isDoubleConnected(row.get(point - 2))) return createLineByRandom(); return EMPTY_SPACE; } - private String createLineByRandom() { + private int createLineByRandom() { return RandomUtil.getBoolean() ? CONNECTION_LINE : EMPTY_SPACE; } - private boolean isDoubleConnected(String prev) { - return prev.equals(CONNECTION_LINE); + private boolean isDoubleConnected(int prev) { + return prev == CONNECTION_LINE; } } diff --git a/src/main/java/domain/result/Result.java b/src/main/java/domain/result/Result.java deleted file mode 100644 index 0868e1ec..00000000 --- a/src/main/java/domain/result/Result.java +++ /dev/null @@ -1,18 +0,0 @@ -package domain.result; - - -public class Result { - private final String name; - - private Result(String name) { - this.name = name; - } - - public static Result createResult(String name) { - return new Result(name); - } - - public String getName() { - return name; - } -} diff --git a/src/main/java/domain/result/ResultCreator.java b/src/main/java/domain/result/ResultCreator.java deleted file mode 100644 index e28a7cd8..00000000 --- a/src/main/java/domain/result/ResultCreator.java +++ /dev/null @@ -1,16 +0,0 @@ -package domain.result; - -import java.util.HashMap; -import java.util.Map; - -public class ResultCreator { - public static Map createResultMap(String[] results) { - int i = 0; - Map map = new HashMap<>(); - for (String result : results) { - map.put(i,Result.createResult(result)); - i += 2; - } - return map; - } -} diff --git a/src/main/java/view/OutputUtil.java b/src/main/java/view/OutputUtil.java index c3bb55ec..b6337906 100644 --- a/src/main/java/view/OutputUtil.java +++ b/src/main/java/view/OutputUtil.java @@ -1,7 +1,7 @@ package view; -import domain.ladder.Ladder; import domain.ladder.Line; +import domain.item.Item; import domain.user.User; import java.util.List; @@ -10,26 +10,51 @@ public class OutputUtil { private static final String USER_LINE = "|"; private static final String CONNECTION_LINE = "-----"; private static final String EMPTY_LINE = " "; + private static final String PADDING = " "; public static void printUsers(List users) { - users.forEach(user -> System.out.print(user + " ")); + users.forEach(user -> System.out.print(addPadding(user.getName()))); + System.out.println(); } + public static void printLadder(List ladder) { + for (Line line : ladder) { + System.out.println(PADDING.repeat(2) + printLadderLine(line.getLine()));; + } + } - public static void printLadder(Ladder ladder) { - //각 줄별로 출력 + public static void printItems(List items) { + items.forEach(item -> System.out.print(addPadding(item.getName()))); + System.out.println(); } - public static void printResults() { - //Result를 담은 List를 매개변수로 받는다 - //출력 + private static String printLadderLine(List line) { + StringBuilder sb = new StringBuilder(); + for (int i : line) { + if (i % 2 == 0) { + sb.append(USER_LINE); + } else if (i == -1) { + sb.append(EMPTY_LINE); + } else { + sb.append(CONNECTION_LINE); + } + } + return sb.toString(); } - private static void printLadderLine(Line line) { - //반복문으로 line을 돌면서 - //-1 = 빈칸 - //0 = 유저 - //1 = 연결선 - //으로 만들어서 반환 + private static String addPadding(String user) { + if (user.length() == 5) { + return user; + } + StringBuilder sb = new StringBuilder(); + int whiteSpace = 5 - user.length(); + int frontSpace = whiteSpace / 2; + int backSpace = whiteSpace - frontSpace; + + sb.append(PADDING.repeat(frontSpace)); + sb.append(user); + sb.append(PADDING.repeat(backSpace)); + + return sb.toString(); } } diff --git a/src/test/java/domain/UserTest.java b/src/test/java/domain/UserTest.java index b8938bcb..154d139c 100644 --- a/src/test/java/domain/UserTest.java +++ b/src/test/java/domain/UserTest.java @@ -6,7 +6,6 @@ import java.util.InputMismatchException; -import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; public class UserTest { @@ -18,15 +17,4 @@ void nameLengthOutOfBound() { .isInstanceOf(InputMismatchException.class) .hasMessage("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); } - -// @Test -// @DisplayName("이름의 길이가 5자가 아닐경우 공백으로 채워주는 테스트") -// void addPaddingToUsername() { -// List usernames = Arrays.asList("a","aa", "aaa", "aaaa"); -// -// usernames.forEach(name->{ -// String sut = new User(name,0).getName(); -// assertThat(sut.length()).isEqualTo(5); -// }); -// } } From aa4bf91567629382555070b61decdd96fad4a478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Fri, 18 Feb 2022 23:02:46 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat=20:=20GameService=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=8B=A4=ED=96=89=20=EB=B0=8F=20=EA=B2=B0=EA=B3=BC?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - playGame 메서드를 실행해서 결과를 저장. - GameService 결과를 담는 Map타입의 results 변수선언 --- src/main/java/controller/GameController.java | 4 ++ .../java/domain/gameservice/GameService.java | 40 +++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index f70271fd..68af6323 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -13,10 +13,14 @@ public void run() { int lineHeight = InputUtil.getLadderSizeInput(); GameService ladderGame = new GameService(lineHeight, users, results); + OutputUtil.printUsers(ladderGame.getUsers()); OutputUtil.printLadder(ladderGame.getLadder()); OutputUtil.printItems(ladderGame.getItems()); + ladderGame.playGame(); + + } } diff --git a/src/main/java/domain/gameservice/GameService.java b/src/main/java/domain/gameservice/GameService.java index f7c31293..a01602fb 100644 --- a/src/main/java/domain/gameservice/GameService.java +++ b/src/main/java/domain/gameservice/GameService.java @@ -9,6 +9,7 @@ import domain.user.UserCreator; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,6 +17,7 @@ public class GameService { private Map users; private Map items; private Ladder ladder; + private Map results; public GameService( int lineHeight, String[] users,String[] items) { @@ -24,28 +26,42 @@ public GameService( int lineHeight, String[] users,String[] items) { this.ladder = LadderCreator.createLadder(lineHeight, calculateLadderWidth()); } - public Item getSinglePlayerResult(String username) { - int userPoint = users.get(username).getPoint(); - - for (int i = 0; i < ladder.getLadderSize(); i++) { - userPoint += ladder.move(i, userPoint); + public void playGame() { + for (User user : users.values()) { + results.putAll(playSinglePlayer(user)); } - return items.get(userPoint); + } + + public List getUsers() { + return new ArrayList<>(users.values()); + } + + public List getItems() { + return new ArrayList<>(items.values()); } public List getLadder() { return ladder.getLadders(); } - private int calculateLadderWidth() { - return users.size() * 2 - 1; + public Map getResults() { + return results; } - public List getUsers() { - return new ArrayList<>(users.values()); + private Map playSinglePlayer(User user) { + int userPoint = user.getPoint(); + + for (int i = 0; i < ladder.getLadderSize(); i++) { + userPoint += ladder.move(i, userPoint); + } + Item item = items.get(userPoint); + return new HashMap<>(){{ + put(user.getName(), item.getName());}}; } - public List getItems() { - return new ArrayList<>(items.values()); + private int calculateLadderWidth() { + return users.size() * 2 - 1; } + + } From efad21639ba83e8a9016a9b7a13961751e9c20c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sat, 19 Feb 2022 01:12:32 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EB=B3=B4=EA=B3=A0=EC=8B=B6=EC=9D=80=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EB=B0=9B=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EC=99=80=20=EC=9E=85=EB=A0=A5=EA=B0=92=EC=9D=84=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 19 +++++++++++++++++-- .../java/domain/gameservice/GameService.java | 9 +++++++-- src/main/java/view/InputUtil.java | 19 +++++++++++++------ src/main/java/view/OutputUtil.java | 14 ++++++++++++++ 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 68af6323..4ff8d61c 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -8,8 +8,9 @@ public class GameController { public void run() { + boolean status = true; String[] users = InputUtil.getUserNameInput(); - String[] results = InputUtil.getResultsInput(); + String[] results = InputUtil.getItemsInput(); int lineHeight = InputUtil.getLadderSizeInput(); GameService ladderGame = new GameService(lineHeight, users, results); @@ -20,7 +21,21 @@ public void run() { ladderGame.playGame(); - + while (status) { + String target = InputUtil.getResultTargetInput(); + status = handleTargetInput(target,ladderGame); + } } + public boolean handleTargetInput(String target, GameService ladderGame) { + if (target.equals("춘식이")) { + return false; + } else if(target.equals("all")){ + OutputUtil.printAllResult(ladderGame.getResults()); + return true; + }else{ + OutputUtil.printSingleResult(ladderGame.getSingleUserResult(target)); + return true; + } + } } diff --git a/src/main/java/domain/gameservice/GameService.java b/src/main/java/domain/gameservice/GameService.java index a01602fb..0db939b5 100644 --- a/src/main/java/domain/gameservice/GameService.java +++ b/src/main/java/domain/gameservice/GameService.java @@ -24,11 +24,12 @@ public GameService( int lineHeight, String[] users,String[] items) { this.users = UserCreator.createUserMap(users); this.items = ItemCreator.createResultMap(items); this.ladder = LadderCreator.createLadder(lineHeight, calculateLadderWidth()); + this.results = new HashMap<>(); } public void playGame() { - for (User user : users.values()) { - results.putAll(playSinglePlayer(user)); + for (String user : users.keySet()) { + results.putAll(playSinglePlayer(users.get(user))); } } @@ -48,6 +49,10 @@ public Map getResults() { return results; } + public String getSingleUserResult(String username) { + return results.get(username); + } + private Map playSinglePlayer(User user) { int userPoint = user.getPoint(); diff --git a/src/main/java/view/InputUtil.java b/src/main/java/view/InputUtil.java index 0c0e5ee8..56aa6d57 100644 --- a/src/main/java/view/InputUtil.java +++ b/src/main/java/view/InputUtil.java @@ -5,26 +5,33 @@ public class InputUtil { private static final Scanner sc = new Scanner(System.in); private static final String NAME_INPUT_QUESTION = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; - private static final String RESULT_INPUT_QUESTION = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; + private static final String ITEM_INPUT_QUESTION = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; private static final String HEIGHT_INPUT_QUESTION = "최대 사다리 높이는 몇 개인가요?"; + private static final String TARGET_QUESTION = "결과를 보고 싶은 사람은?"; + private static final String DELIMITER = ","; public static String[] getUserNameInput() { System.out.println(NAME_INPUT_QUESTION); String usernames = sc.nextLine(); - return usernames.split(","); + return usernames.split(DELIMITER); } - public static String[] getResultsInput() { - System.out.println(RESULT_INPUT_QUESTION); + public static String[] getItemsInput() { + System.out.println(ITEM_INPUT_QUESTION); String resuls = sc.nextLine(); - return resuls.split(","); + return resuls.split(DELIMITER); } public static int getLadderSizeInput() { System.out.println(HEIGHT_INPUT_QUESTION); - return sc.nextInt(); + return Integer.parseInt(sc.nextLine()); + } + + public static String getResultTargetInput() { + System.out.println(TARGET_QUESTION); + return sc.nextLine(); } public static void close() { diff --git a/src/main/java/view/OutputUtil.java b/src/main/java/view/OutputUtil.java index b6337906..aa9e6d90 100644 --- a/src/main/java/view/OutputUtil.java +++ b/src/main/java/view/OutputUtil.java @@ -5,6 +5,7 @@ import domain.user.User; import java.util.List; +import java.util.Map; public class OutputUtil { private static final String USER_LINE = "|"; @@ -28,6 +29,19 @@ public static void printItems(List items) { System.out.println(); } + public static void printAllResult(Map results) { + System.out.println("실행 결과"); + for (String user : results.keySet()) { + System.out.println(user + " : " + results.get(user)); + } + } + + public static void printSingleResult(String result) { + System.out.println("실행 결과"); + System.out.println(result); + System.out.println(); + } + private static String printLadderLine(List line) { StringBuilder sb = new StringBuilder(); for (int i : line) { From 4fc5b7c4b4973521ae241333329ef440bf5eeb65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sun, 20 Feb 2022 22:30:39 +0900 Subject: [PATCH 09/14] =?UTF-8?q?refactor=20:=20InputUtil,=20OutputUtil=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=AA=85=EC=9D=84=20InputView,?= =?UTF-8?q?=20OutputView=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 22 +++++++++---------- .../view/{InputUtil.java => InputView.java} | 2 +- .../view/{OutputUtil.java => OutputView.java} | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) rename src/main/java/view/{InputUtil.java => InputView.java} (98%) rename src/main/java/view/{OutputUtil.java => OutputView.java} (98%) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 4ff8d61c..e2d05d16 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -1,28 +1,28 @@ package controller; import domain.gameservice.GameService; -import view.InputUtil; -import view.OutputUtil; +import view.InputView; +import view.OutputView; public class GameController { public void run() { boolean status = true; - String[] users = InputUtil.getUserNameInput(); - String[] results = InputUtil.getItemsInput(); - int lineHeight = InputUtil.getLadderSizeInput(); + String[] users = InputView.getUserNameInput(); + String[] results = InputView.getItemsInput(); + int lineHeight = InputView.getLadderSizeInput(); GameService ladderGame = new GameService(lineHeight, users, results); - OutputUtil.printUsers(ladderGame.getUsers()); - OutputUtil.printLadder(ladderGame.getLadder()); - OutputUtil.printItems(ladderGame.getItems()); + OutputView.printUsers(ladderGame.getUsers()); + OutputView.printLadder(ladderGame.getLadder()); + OutputView.printItems(ladderGame.getItems()); ladderGame.playGame(); while (status) { - String target = InputUtil.getResultTargetInput(); + String target = InputView.getResultTargetInput(); status = handleTargetInput(target,ladderGame); } } @@ -31,10 +31,10 @@ public boolean handleTargetInput(String target, GameService ladderGame) { if (target.equals("춘식이")) { return false; } else if(target.equals("all")){ - OutputUtil.printAllResult(ladderGame.getResults()); + OutputView.printAllResult(ladderGame.getResults()); return true; }else{ - OutputUtil.printSingleResult(ladderGame.getSingleUserResult(target)); + OutputView.printSingleResult(ladderGame.getSingleUserResult(target)); return true; } } diff --git a/src/main/java/view/InputUtil.java b/src/main/java/view/InputView.java similarity index 98% rename from src/main/java/view/InputUtil.java rename to src/main/java/view/InputView.java index 56aa6d57..a5b905b2 100644 --- a/src/main/java/view/InputUtil.java +++ b/src/main/java/view/InputView.java @@ -2,7 +2,7 @@ import java.util.Scanner; -public class InputUtil { +public class InputView { private static final Scanner sc = new Scanner(System.in); private static final String NAME_INPUT_QUESTION = "참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"; private static final String ITEM_INPUT_QUESTION = "실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"; diff --git a/src/main/java/view/OutputUtil.java b/src/main/java/view/OutputView.java similarity index 98% rename from src/main/java/view/OutputUtil.java rename to src/main/java/view/OutputView.java index aa9e6d90..75691bc0 100644 --- a/src/main/java/view/OutputUtil.java +++ b/src/main/java/view/OutputView.java @@ -7,7 +7,7 @@ import java.util.List; import java.util.Map; -public class OutputUtil { +public class OutputView { private static final String USER_LINE = "|"; private static final String CONNECTION_LINE = "-----"; private static final String EMPTY_LINE = " "; From 66a1da5047125163a4356abef677b57a371c8a91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sun, 27 Feb 2022 15:50:02 +0900 Subject: [PATCH 10/14] =?UTF-8?q?refactor=20:=20InputView=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=EC=9D=84=20getXX=20=EC=97=90=EC=84=9C=20inputXX?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 게터메서드와 헷갈릴 수 있는 메서드명이라고 생각되어 변경했습니다. --- src/main/java/view/InputView.java | 16 +++++++++------- src/test/java/domain/LineTest.java | 18 ------------------ src/test/java/domain/UserTest.java | 20 -------------------- 3 files changed, 9 insertions(+), 45 deletions(-) delete mode 100644 src/test/java/domain/LineTest.java delete mode 100644 src/test/java/domain/UserTest.java diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index a5b905b2..e24ccb05 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,5 +1,7 @@ package view; +import java.util.Arrays; +import java.util.List; import java.util.Scanner; public class InputView { @@ -10,31 +12,31 @@ public class InputView { private static final String TARGET_QUESTION = "결과를 보고 싶은 사람은?"; private static final String DELIMITER = ","; - public static String[] getUserNameInput() { + public List inputUserName() { System.out.println(NAME_INPUT_QUESTION); String usernames = sc.nextLine(); - return usernames.split(DELIMITER); + return Arrays.asList(usernames.split(DELIMITER)); } - public static String[] getItemsInput() { + public List inputItems() { System.out.println(ITEM_INPUT_QUESTION); String resuls = sc.nextLine(); - return resuls.split(DELIMITER); + return Arrays.asList(resuls.split(DELIMITER)); } - public static int getLadderSizeInput() { + public int inputLadderSize() { System.out.println(HEIGHT_INPUT_QUESTION); return Integer.parseInt(sc.nextLine()); } - public static String getResultTargetInput() { + public String inputResultTarget() { System.out.println(TARGET_QUESTION); return sc.nextLine(); } - public static void close() { + public void close() { sc.close(); } } diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java deleted file mode 100644 index 37060dbd..00000000 --- a/src/test/java/domain/LineTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package domain; - -import domain.ladder.Line; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class LineTest { - @Test - @DisplayName("Line 생성 시 중복 줄이 없는지 테스트") - void createLine() { - Line line = Line.createRandomStep(100); - - assertThat(line.toString().contains("-----|-----")).isFalse(); - - } -} diff --git a/src/test/java/domain/UserTest.java b/src/test/java/domain/UserTest.java deleted file mode 100644 index 154d139c..00000000 --- a/src/test/java/domain/UserTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package domain; - -import domain.user.UserCreator; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.InputMismatchException; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -public class UserTest { - - @Test - @DisplayName("유저 이름의 길이가 범위를 벗어날 경우 예외발생 테스트") - void nameLengthOutOfBound() { - assertThatThrownBy(() -> UserCreator.createUserMap(new String[]{"suntory, forky, jerry"})) - .isInstanceOf(InputMismatchException.class) - .hasMessage("이름의 길이를 1자 이상, 5자 이하로 작성해주세요."); - } -} From ea9d71c1ee92e257629f09f055701b8247572ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sun, 27 Feb 2022 16:19:25 +0900 Subject: [PATCH 11/14] =?UTF-8?q?refactor=20:=20ItemCreator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20createResultMap=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=A7=A4=EA=B0=9C=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=EC=9D=84=20List=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/item/ItemCreator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/domain/item/ItemCreator.java b/src/main/java/domain/item/ItemCreator.java index 00c8ab18..0ea445ab 100644 --- a/src/main/java/domain/item/ItemCreator.java +++ b/src/main/java/domain/item/ItemCreator.java @@ -1,10 +1,11 @@ package domain.item; import java.util.HashMap; +import java.util.List; import java.util.Map; public class ItemCreator { - public static Map createResultMap(String[] results) { + public static Map createResultMap(List results) { int i = 0; Map map = new HashMap<>(); for (String result : results) { From 639a103b5ec9ad69d64931c77a17c4c08ac2c915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sun, 27 Feb 2022 16:23:49 +0900 Subject: [PATCH 12/14] =?UTF-8?q?refactor=20:=20UserCreator=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F?= =?UTF-8?q?=20User=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=EC=97=90=20final=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/user/User.java | 4 ++-- src/main/java/domain/user/UserCreator.java | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java index 7c9869d3..f47a6aa1 100644 --- a/src/main/java/domain/user/User.java +++ b/src/main/java/domain/user/User.java @@ -1,8 +1,8 @@ package domain.user; public class User { - private String name; - private int point; + private final String name; + private final int point; public User(String user, int point) { diff --git a/src/main/java/domain/user/UserCreator.java b/src/main/java/domain/user/UserCreator.java index 958359e5..95e4be91 100644 --- a/src/main/java/domain/user/UserCreator.java +++ b/src/main/java/domain/user/UserCreator.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.InputMismatchException; +import java.util.List; import java.util.Map; public class UserCreator { @@ -10,11 +11,11 @@ public class UserCreator { private static final int USERNAME_MINLENGTH = 1; private Map users; - public UserCreator(String[] users) { + public UserCreator(List users) { this.users = createUserMap(users); } - public static Map createUserMap(String[] users) { + public static Map createUserMap(List users) { int i = 0; Map map = new HashMap<>(); for (String user : users) { From 8c61cdc6086913fe63405534c4fa4f83d68d6ec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sun, 27 Feb 2022 16:25:28 +0900 Subject: [PATCH 13/14] =?UTF-8?q?refactor=20:=20GameService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4,=20Ladder=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EC=9D=98=20get=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20readon?= =?UTF-8?q?ly=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/gameservice/GameService.java | 10 +++------- src/main/java/domain/ladder/Ladder.java | 14 ++++++++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/domain/gameservice/GameService.java b/src/main/java/domain/gameservice/GameService.java index 0db939b5..1cf7ef3f 100644 --- a/src/main/java/domain/gameservice/GameService.java +++ b/src/main/java/domain/gameservice/GameService.java @@ -8,10 +8,7 @@ import domain.user.User; import domain.user.UserCreator; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class GameService { private Map users; @@ -19,8 +16,7 @@ public class GameService { private Ladder ladder; private Map results; - public GameService( int lineHeight, String[] users,String[] items) { - + public GameService( int lineHeight, List users,List items) { this.users = UserCreator.createUserMap(users); this.items = ItemCreator.createResultMap(items); this.ladder = LadderCreator.createLadder(lineHeight, calculateLadderWidth()); @@ -46,7 +42,7 @@ public List getLadder() { } public Map getResults() { - return results; + return Collections.unmodifiableMap(results); } public String getSingleUserResult(String username) { diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java index 1178ea86..31bcab66 100644 --- a/src/main/java/domain/ladder/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -1,18 +1,19 @@ package domain.ladder; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class Ladder { private final int ladderWidth; private final int ladderHeight; - private List ladders; + private final List ladders; public Ladder(int ladderHeight, int ladderWidth) { this.ladderHeight = ladderHeight; this.ladderWidth = ladderWidth; - initLadder(); + ladders = initLadder(); } public int getLadderSize() { @@ -20,7 +21,7 @@ public int getLadderSize() { } public List getLadders() { - return ladders; + return Collections.unmodifiableList(ladders); } public int move(int rowNumber, int userPoint) { @@ -45,11 +46,12 @@ private int canMoveRight(Line line, int userPoint) { return 0; } - private void initLadder() { - ladders = new ArrayList<>(); + private List initLadder() { + List result = new ArrayList<>(); for (int i = 0; i < ladderHeight; i++) { - ladders.add(Line.createRandomStep(ladderWidth)); + result.add(Line.createRandomStep(ladderWidth)); } + return result; } From 250c190a468247194dd939f1585b74b1479037c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=A8=EC=84=9D=ED=98=B8?= Date: Sun, 27 Feb 2022 16:28:07 +0900 Subject: [PATCH 14/14] =?UTF-8?q?refactor=20:=20GameController=EC=97=90?= =?UTF-8?q?=EC=84=9C=20outputview,=20inputview=EB=A5=BC=20=EB=A9=A4?= =?UTF-8?q?=EB=B2=84=EB=B3=80=EC=88=98=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 29 ++++++++++++-------- src/main/java/view/OutputView.java | 17 ++++++------ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index e2d05d16..d09779d4 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -4,37 +4,42 @@ import view.InputView; import view.OutputView; +import java.util.List; + public class GameController { + private final InputView inputView = new InputView(); + private final OutputView outputView = new OutputView(); + public void run() { boolean status = true; - String[] users = InputView.getUserNameInput(); - String[] results = InputView.getItemsInput(); - int lineHeight = InputView.getLadderSizeInput(); + List users = inputView.inputUserName(); + List results = inputView.inputItems(); + int lineHeight = inputView.inputLadderSize(); GameService ladderGame = new GameService(lineHeight, users, results); - OutputView.printUsers(ladderGame.getUsers()); - OutputView.printLadder(ladderGame.getLadder()); - OutputView.printItems(ladderGame.getItems()); + outputView.printUsers(ladderGame.getUsers()); + outputView.printLadder(ladderGame.getLadder()); + outputView.printItems(ladderGame.getItems()); ladderGame.playGame(); while (status) { - String target = InputView.getResultTargetInput(); - status = handleTargetInput(target,ladderGame); + String target = inputView.inputResultTarget(); + status = handleTargetInput(target, ladderGame); } } public boolean handleTargetInput(String target, GameService ladderGame) { if (target.equals("춘식이")) { return false; - } else if(target.equals("all")){ - OutputView.printAllResult(ladderGame.getResults()); + } else if (target.equals("all")) { + outputView.printAllResult(ladderGame.getResults()); return true; - }else{ - OutputView.printSingleResult(ladderGame.getSingleUserResult(target)); + } else { + outputView.printSingleResult(ladderGame.getSingleUserResult(target)); return true; } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 75691bc0..95c9c655 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -13,36 +13,37 @@ public class OutputView { private static final String EMPTY_LINE = " "; private static final String PADDING = " "; - public static void printUsers(List users) { + public void printUsers(List users) { users.forEach(user -> System.out.print(addPadding(user.getName()))); System.out.println(); } - public static void printLadder(List ladder) { + public void printLadder(List ladder) { for (Line line : ladder) { System.out.println(PADDING.repeat(2) + printLadderLine(line.getLine()));; } } - public static void printItems(List items) { + public void printItems(List items) { items.forEach(item -> System.out.print(addPadding(item.getName()))); - System.out.println(); + System.out.println(System.lineSeparator()); } - public static void printAllResult(Map results) { + public void printAllResult(Map results) { System.out.println("실행 결과"); for (String user : results.keySet()) { System.out.println(user + " : " + results.get(user)); } + System.out.println(); } - public static void printSingleResult(String result) { + public void printSingleResult(String result) { System.out.println("실행 결과"); System.out.println(result); System.out.println(); } - private static String printLadderLine(List line) { + private String printLadderLine(List line) { StringBuilder sb = new StringBuilder(); for (int i : line) { if (i % 2 == 0) { @@ -56,7 +57,7 @@ private static String printLadderLine(List line) { return sb.toString(); } - private static String addPadding(String user) { + private String addPadding(String user) { if (user.length() == 5) { return user; }