Skip to content
Merged
22 changes: 10 additions & 12 deletions src/main/java/BowlingMain.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
import domain.BowlingGame;
import domain.Player;
import state.Ready;
import state.State;
import view.InputView;
import view.ResultView;

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class BowlingMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BowlingGame bowlingGame = new BowlingGame();
List<Player> players = bowlingGame.createPlayer(Arrays.asList(InputView.getUserName(scanner)));
State currentState = new Ready();
List<Player> players = bowlingGame.createPlayer(InputView.getUserName(scanner, InputView.getUserCount(scanner)));

ResultView.printScoreBoard(players, currentState);
ResultView.printScoreBoard(players);
for (int index = 1; index < 11; index++) {
while (!bowlingGame.isEndFrame()) {
currentState = bowlingGame.bowl(InputView.getThrowing(scanner, index));
ResultView.printScoreBoard(players, currentState);
}
if (index < 10) {
bowlingGame.nextFrame();
for (Player player : players) {
while (!bowlingGame.isEndFrame(player)) {
bowlingGame.bowl(player, InputView.getThrowing(scanner, player.getName()));
ResultView.printScoreBoard(players);
}
if (index < 10) {
bowlingGame.nextFrame(player);
}
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/domain/BowlingGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ public Pins createPins(int falledPins) {
return new Pins(falledPins);
}

public State bowl(int falledPins) {
return players.get(0).bowl(createPins(falledPins));
public State bowl(Player player, int falledPins) {
return player.bowl(createPins(falledPins));
}

public boolean isEndFrame() {
public boolean isEndFrame(Player player) {
// 다수 고려하지 않음, 우선 한 명만.
return players.get(0).isEnd();
return player.isEnd();
}

public Frame nextFrame() {
return players.get(0).nextFrame();
public Frame nextFrame(Player player) {
return player.nextFrame();
}
}
4 changes: 3 additions & 1 deletion src/main/java/domain/NormalFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ public int getScore(int beforeScore) {
}

public int calculateAdditionalScore(Score beforeScore) {
beforeScore = state.updateScore(beforeScore);
if (!Ready.isReady(state)) {
beforeScore = state.updateScore(beforeScore);
}
if (beforeScore.canCalculateScore()) {
return beforeScore.getScore();
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/domain/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public Player(String name) {
}

// getter와 동일한 역할인데, 어떻게 변경해주면 좋을까
public String printName() {
public String getName() {
return name;
}

Expand Down
28 changes: 23 additions & 5 deletions src/main/java/view/InputView.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,33 @@
package view;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class InputView {
public static String getUserName(Scanner scanner) {
System.out.print("\n플레이어 이름은(3 english letters)?: ");
return scanner.nextLine();
public static List<String> getUserName(Scanner scanner, int count) {
scanner.reset();
List<String> users = new ArrayList<>();
for (int index = 0; index < count; index++) {
System.out.print("플레이어 " + (index + 1) + "의 이름은(3 english letters)?: ");
String name = scanner.nextLine();
users.add(name);
}
return users;
}

public static int getThrowing(Scanner scanner, int no) {
System.out.print("\n"+no + "프레임 투구 : ");
public static int getThrowing(Scanner scanner, String name) {
System.out.print("\n" + name + "'s trun : ");
return scanner.nextInt();
}

public static int getUserCount(Scanner scanner) {
System.out.print("How many people? ");
try {
return Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("숫자만 입력해주세요.");
return getUserCount(scanner);
}
}
}
14 changes: 7 additions & 7 deletions src/main/java/view/ResultView.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ private static void printHeader() {
System.out.println(sb.toString());
}

private static void printSymbol(Player player, State currentState) {
private static void printSymbol(Player player) {
StringBuilder sb = new StringBuilder();
int offset = 0; // 현재 상태 출력시 공백 조절
sb.append(String.format("| %3s |", player.printName()));
sb.append(String.format("| %3s |", player.getName()));
for (int index = 0; index < player.getFinishedFrame(); index++) {
sb.append(String.format(" %4s |", player.printFramesState(index)));
}
if (!player.isLastFrame() && !currentState.isEnd()) {
sb.append(String.format(" %4s |", currentState.printState()));
if (!player.isLastFrame() && !player.isEnd()) {
sb.append(String.format(" %4s |", player.printPlayingFrameState()));
offset = -1;
}
if (player.isLastFrame() && !player.isEnd()) {
Expand Down Expand Up @@ -65,10 +65,10 @@ public static void printEmptyScore() {
System.out.println(sb.toString());
}

public static void printScoreBoard(List<Player> players, State currentState) {
public static void printScoreBoard(List<Player> players) {
printHeader();
for (Player player : players) {
printHeader();
printSymbol(player, currentState);
printSymbol(player);
printScore(player);
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/test/java/domain/BowlingGameTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ public void createPlayer() {
@Test
public void bowl() {
Scanner scanner = new Scanner("10");
createPlayer();
bowlingGame.bowl(InputView.getThrowing(scanner, 1));
List<Player> players = bowlingGame.createPlayer(Arrays.asList("htw", "pjs"));
bowlingGame.bowl(players.get(0), InputView.getThrowing(scanner, players.get(0).getName()));
}

@Test
public void isEndFrame() {
createPlayer();
bowlingGame.bowl(10);
assertTrue(bowlingGame.isEndFrame());
// Scanner scanner = new Scanner("10");
// List<Player> players = bowlingGame.createPlayer(Arrays.asList("htw", "pjs"));
// assertTrue(bowlingGame.isEndFrame(players.get));
}
}
2 changes: 1 addition & 1 deletion src/test/java/domain/PlayerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public void setUp() {

@Test
public void name() {
assertEquals("htw", player.printName());
assertEquals("htw", player.getName());
}

@Test
Expand Down
13 changes: 4 additions & 9 deletions src/test/java/view/InputViewTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package view;

import domain.Player;
import org.junit.Test;

import java.util.Scanner;
Expand All @@ -8,14 +9,8 @@

public class InputViewTest {
@Test
public void userName() {
Scanner scanner = new Scanner("htw");
assertEquals("htw", InputView.getUserName(scanner));
}

@Test
public void throwing() {
Scanner scanner = new Scanner("10");
assertEquals(10, InputView.getThrowing(scanner, 1));
public void userCount() {
Scanner scanner = new Scanner("2");
assertEquals(2, InputView.getUserCount(scanner));
}
}