From 7b806acc61d7da1ff35df4ac2809500732b08721 Mon Sep 17 00:00:00 2001 From: monsteralover Date: Tue, 28 May 2024 23:04:01 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat=20:=20=EA=B2=8C=EC=9E=84=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 16 ++++++++++++++++ src/main/java/Card.java | 22 ++++++++++++++++++++++ src/main/java/Dealer.java | 13 +++++++++++++ src/main/java/GameProcessor.java | 5 +++++ src/main/java/GameStarter.java | 26 ++++++++++++++++++++++++++ src/main/java/InputValidator.java | 18 ++++++++++++++++++ src/main/java/InputView.java | 17 +++++++++++++++++ src/main/java/Player.java | 11 +++++++++++ src/main/java/ResultView.java | 25 +++++++++++++++++++++++++ src/main/java/Suits.java | 24 ++++++++++++++++++++++++ 10 files changed, 177 insertions(+) create mode 100644 src/main/java/Application.java create mode 100644 src/main/java/Card.java create mode 100644 src/main/java/Dealer.java create mode 100644 src/main/java/GameProcessor.java create mode 100644 src/main/java/GameStarter.java create mode 100644 src/main/java/InputValidator.java create mode 100644 src/main/java/InputView.java create mode 100644 src/main/java/Player.java create mode 100644 src/main/java/ResultView.java create mode 100644 src/main/java/Suits.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000000..85d925ddce8 --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,16 @@ +import java.util.List; + +public class Application { + + public static void main(String[] args) { + + InputView inputView = new InputView(); + InputValidator inputValidator = new InputValidator(); + ResultView resultView = new ResultView(); + + GameStarter gameStarter = new GameStarter(); + List playerNames = gameStarter.getPlayersNames(inputView, inputValidator); + gameStarter.dealFirstTurnTwoCards(resultView,playerNames); + + } +} diff --git a/src/main/java/Card.java b/src/main/java/Card.java new file mode 100644 index 00000000000..d3541c06eef --- /dev/null +++ b/src/main/java/Card.java @@ -0,0 +1,22 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Card { + int number; + Suits suits; + + public Card() { + this.number = new Random().nextInt(11) + 1; + this.suits = Suits.getRandomSuits(); + } + + public List generateCards (int numberOfCards) { + List cards = new ArrayList<>(); + for (int i = 0; i < numberOfCards; i++) { + cards.add(new Card()); + } + return cards; + } + +} diff --git a/src/main/java/Dealer.java b/src/main/java/Dealer.java new file mode 100644 index 00000000000..7a03657a59d --- /dev/null +++ b/src/main/java/Dealer.java @@ -0,0 +1,13 @@ +import java.util.List; + +public class Dealer { + List cards; + + public Dealer(List cards) { + this.cards = cards; + } + + public List getCards() { + return cards; + } +} diff --git a/src/main/java/GameProcessor.java b/src/main/java/GameProcessor.java new file mode 100644 index 00000000000..6a0c0605f67 --- /dev/null +++ b/src/main/java/GameProcessor.java @@ -0,0 +1,5 @@ +import java.util.List; + +public class GameProcessor { + +} diff --git a/src/main/java/GameStarter.java b/src/main/java/GameStarter.java new file mode 100644 index 00000000000..146091d2c89 --- /dev/null +++ b/src/main/java/GameStarter.java @@ -0,0 +1,26 @@ +import java.util.ArrayList; +import java.util.List; + +public class GameStarter { + + public List getPlayersNames(InputView inputView, InputValidator inputValidator) { + String unVerifiedPlayerNames = inputView.getPlayerNames(); + return inputValidator.validatePlayerNames(unVerifiedPlayerNames); + } + public void dealFirstTurnTwoCards(ResultView resultView, List playerNames) { + int dealingCardNumbers = 2; + resultView.printFirstDeal(playerNames); + Card card = new Card(); + List dealerCards = card.generateCards(dealingCardNumbers); + Dealer dealer = new Dealer(dealerCards); + List players = new ArrayList<>(); + + for (String playerName : playerNames) { + Player player = new Player(playerName, card.generateCards(dealingCardNumbers)); + players.add(player); + } + resultView.printInitialDealerCards(dealer); + resultView.printInitialPlayerCards(players); + } + +} diff --git a/src/main/java/InputValidator.java b/src/main/java/InputValidator.java new file mode 100644 index 00000000000..348b5c1eb45 --- /dev/null +++ b/src/main/java/InputValidator.java @@ -0,0 +1,18 @@ +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class InputValidator { + public List validatePlayerNames(String playerNamesString) { + + if (playerNamesString.isBlank()) { + throw new IllegalArgumentException("게임에 참여할 사람의 이름을 입력해주세요"); + } + + if (playerNamesString.contains(",")) { + return Arrays.stream(playerNamesString.split(",")) + .collect(Collectors.toList()); + } + return List.of(playerNamesString); + } +} diff --git a/src/main/java/InputView.java b/src/main/java/InputView.java new file mode 100644 index 00000000000..767e3c1b25e --- /dev/null +++ b/src/main/java/InputView.java @@ -0,0 +1,17 @@ +import java.util.Scanner; + +public class InputView { + + Scanner scanner = new Scanner(System.in); + + public String getPlayerNames() { + System.out.println("게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"); + return acceptInput(); + } + private String acceptInput() { + return scanner.nextLine(); + } + + + +} diff --git a/src/main/java/Player.java b/src/main/java/Player.java new file mode 100644 index 00000000000..78176c9b209 --- /dev/null +++ b/src/main/java/Player.java @@ -0,0 +1,11 @@ +import java.util.List; + +public class Player { + String name; + List cards; + + public Player(String name, List cards) { + this.name = name; + this.cards = cards; + } +} diff --git a/src/main/java/ResultView.java b/src/main/java/ResultView.java new file mode 100644 index 00000000000..7f342e938e0 --- /dev/null +++ b/src/main/java/ResultView.java @@ -0,0 +1,25 @@ +import java.util.List; +import java.util.stream.Collectors; + +public class ResultView { + public void printFirstDeal(List playerNames) { + System.out.println("딜러와" + playerNames + "에게 2장을 나누었습니다."); + } + + public void printInitialDealerCards(Dealer dealer) { + Card firstCard = dealer.getCards().get(0); + System.out.println("딜러: " + firstCard.number + firstCard.suits.title ); + } + + public void printInitialPlayerCards(List players) { + for (Player player : players) { + String message = player.name + " 카드: "; + List cards = player.cards; + String cardsToString = cards.stream() + .map(card -> card.number + card.suits.title) + .collect(Collectors.joining(", ")); + message += cardsToString; + System.out.println(message); + } + } +} diff --git a/src/main/java/Suits.java b/src/main/java/Suits.java new file mode 100644 index 00000000000..e0d2f0503eb --- /dev/null +++ b/src/main/java/Suits.java @@ -0,0 +1,24 @@ +import java.util.Random; + +public enum Suits { + heart("하트"), + spade("스페이드"), + club("클로브"), + diamond("다이아몬드"); + + String title; + + public String getTitle() { + return title; + } + + Suits(String title) { + this.title = title; + } + + public static Suits getRandomSuits() { + int randomIndex = new Random().nextInt(3); + Suits[] values = Suits.values(); + return values[randomIndex]; + } +} From ef80cd8aa335774c4fe8ad1021309b8c71e5c18c Mon Sep 17 00:00:00 2001 From: monsteralover Date: Tue, 28 May 2024 23:17:12 +0900 Subject: [PATCH 2/8] =?UTF-8?q?refactor=20:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20=20dealer,=20player=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 5 ++++- src/main/java/GameStarter.java | 20 +++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 85d925ddce8..e469d4325c4 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -10,7 +10,10 @@ public static void main(String[] args) { GameStarter gameStarter = new GameStarter(); List playerNames = gameStarter.getPlayersNames(inputView, inputValidator); - gameStarter.dealFirstTurnTwoCards(resultView,playerNames); + resultView.printFirstDeal(playerNames); + Dealer dealer = gameStarter.pickDealerCards(resultView); + List players = gameStarter.pickPlayerCards(playerNames, resultView); + } } diff --git a/src/main/java/GameStarter.java b/src/main/java/GameStarter.java index 146091d2c89..9d1e0766c4a 100644 --- a/src/main/java/GameStarter.java +++ b/src/main/java/GameStarter.java @@ -3,24 +3,30 @@ public class GameStarter { + static final int DEALING_CARD_NUMBERS = 2; public List getPlayersNames(InputView inputView, InputValidator inputValidator) { String unVerifiedPlayerNames = inputView.getPlayerNames(); return inputValidator.validatePlayerNames(unVerifiedPlayerNames); } - public void dealFirstTurnTwoCards(ResultView resultView, List playerNames) { - int dealingCardNumbers = 2; - resultView.printFirstDeal(playerNames); + public Dealer pickDealerCards(ResultView resultView) { Card card = new Card(); - List dealerCards = card.generateCards(dealingCardNumbers); + List dealerCards = card.generateCards(DEALING_CARD_NUMBERS); Dealer dealer = new Dealer(dealerCards); - List players = new ArrayList<>(); + resultView.printInitialDealerCards(dealer); + + return dealer; + } + public List pickPlayerCards(List playerNames, ResultView resultView) { + Card card = new Card(); + List players = new ArrayList<>(); for (String playerName : playerNames) { - Player player = new Player(playerName, card.generateCards(dealingCardNumbers)); + Player player = new Player(playerName, card.generateCards(DEALING_CARD_NUMBERS)); players.add(player); } - resultView.printInitialDealerCards(dealer); resultView.printInitialPlayerCards(players); + + return players; } } From 38b84f14e0d7084d0237b0e309690fe2ca0e8cbe Mon Sep 17 00:00:00 2001 From: monsteralover Date: Wed, 29 May 2024 00:23:10 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat=20:=20=EA=B2=8C=EC=9E=84=20=EC=B0=B8?= =?UTF-8?q?=EA=B0=80=EC=9E=90=20=EA=B2=8C=EC=9E=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 7 +++---- src/main/java/GameProcessor.java | 25 +++++++++++++++++++++++++ src/main/java/GameStarter.java | 6 +++--- src/main/java/InputValidator.java | 10 ++++++++++ src/main/java/InputView.java | 17 +++++++++++++++-- src/main/java/Player.java | 6 ++++++ src/main/java/ResultView.java | 19 ++++++++++++------- 7 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index e469d4325c4..fd4ca3e3f99 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -3,17 +3,16 @@ public class Application { public static void main(String[] args) { - - InputView inputView = new InputView(); - InputValidator inputValidator = new InputValidator(); + InputView inputView = new InputView(new InputValidator()); ResultView resultView = new ResultView(); GameStarter gameStarter = new GameStarter(); - List playerNames = gameStarter.getPlayersNames(inputView, inputValidator); + List playerNames = new GameStarter().getPlayersNames(inputView); resultView.printFirstDeal(playerNames); Dealer dealer = gameStarter.pickDealerCards(resultView); List players = gameStarter.pickPlayerCards(playerNames, resultView); + List playersFinishedGame = new GameProcessor(inputView,resultView).playersPlayGame(players); } } diff --git a/src/main/java/GameProcessor.java b/src/main/java/GameProcessor.java index 6a0c0605f67..53698c32af5 100644 --- a/src/main/java/GameProcessor.java +++ b/src/main/java/GameProcessor.java @@ -1,5 +1,30 @@ import java.util.List; public class GameProcessor { + InputView inputView; + ResultView resultView; + + public GameProcessor(InputView inputView, ResultView resultView) { + this.inputView = inputView; + this.resultView = resultView; + } + + public List playersPlayGame(List players) { + for (int i = 0; i < players.size(); i++) { + Player updatedPlayer = playerAcceptsExtraCardIfChooseTo(players.get(i)); + players.set(i, updatedPlayer); + } + return players; + } + + public Player playerAcceptsExtraCardIfChooseTo(Player player) { + if (inputView.askIfGetOneMoreCard(player.name)) { + player = player.acceptsExtraCard(player); + resultView.printPlayerCards(player); + playerAcceptsExtraCardIfChooseTo(player); + } + return player; + } + } diff --git a/src/main/java/GameStarter.java b/src/main/java/GameStarter.java index 9d1e0766c4a..83e25fd8265 100644 --- a/src/main/java/GameStarter.java +++ b/src/main/java/GameStarter.java @@ -4,10 +4,10 @@ public class GameStarter { static final int DEALING_CARD_NUMBERS = 2; - public List getPlayersNames(InputView inputView, InputValidator inputValidator) { - String unVerifiedPlayerNames = inputView.getPlayerNames(); - return inputValidator.validatePlayerNames(unVerifiedPlayerNames); + public List getPlayersNames(InputView inputView) { + return inputView.getPlayerNames(); } + public Dealer pickDealerCards(ResultView resultView) { Card card = new Card(); List dealerCards = card.generateCards(DEALING_CARD_NUMBERS); diff --git a/src/main/java/InputValidator.java b/src/main/java/InputValidator.java index 348b5c1eb45..67f06e750b3 100644 --- a/src/main/java/InputValidator.java +++ b/src/main/java/InputValidator.java @@ -15,4 +15,14 @@ public List validatePlayerNames(String playerNamesString) { } return List.of(playerNamesString); } + + public boolean validateAnswerForOneMoreCard(String acceptInput) { + if (acceptInput.equals("y")) { + return true; + } + if (acceptInput.equals("n")) { + return false; + } + throw new IllegalArgumentException("y나 n으로 입력하세요"); + } } diff --git a/src/main/java/InputView.java b/src/main/java/InputView.java index 767e3c1b25e..10478e97e82 100644 --- a/src/main/java/InputView.java +++ b/src/main/java/InputView.java @@ -1,17 +1,30 @@ +import java.util.List; import java.util.Scanner; public class InputView { + InputValidator inputValidator; + + public InputView(InputValidator inputValidator) { + this.inputValidator = inputValidator; + } + Scanner scanner = new Scanner(System.in); - public String getPlayerNames() { + public List getPlayerNames() { System.out.println("게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"); - return acceptInput(); + + return inputValidator.validatePlayerNames(acceptInput()); } private String acceptInput() { return scanner.nextLine(); } + public boolean askIfGetOneMoreCard(String name) { + + System.out.println(name + "는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"); + return inputValidator.validateAnswerForOneMoreCard(acceptInput()); + } } diff --git a/src/main/java/Player.java b/src/main/java/Player.java index 78176c9b209..a1b3f6edc4b 100644 --- a/src/main/java/Player.java +++ b/src/main/java/Player.java @@ -8,4 +8,10 @@ public Player(String name, List cards) { this.name = name; this.cards = cards; } + + public Player acceptsExtraCard(final Player player) { + List playerCards = player.cards; + playerCards.add(playerCards.size(), new Card().generateCards(1).get(0)); + return new Player(player.name, playerCards); + } } diff --git a/src/main/java/ResultView.java b/src/main/java/ResultView.java index 7f342e938e0..f17f554b3f9 100644 --- a/src/main/java/ResultView.java +++ b/src/main/java/ResultView.java @@ -13,13 +13,18 @@ public void printInitialDealerCards(Dealer dealer) { public void printInitialPlayerCards(List players) { for (Player player : players) { - String message = player.name + " 카드: "; - List cards = player.cards; - String cardsToString = cards.stream() - .map(card -> card.number + card.suits.title) - .collect(Collectors.joining(", ")); - message += cardsToString; - System.out.println(message); + printPlayerCards(player); } } + + public void printPlayerCards(Player player) { + String message = player.name + " 카드: "; + List cards = player.cards; + String cardsToString = cards.stream() + .map(card -> card.number + card.suits.title) + .collect(Collectors.joining(", ")); + message += cardsToString; + System.out.println(message); + } + } From ae341b759573b0896d737cf93632f7d7da9686d3 Mon Sep 17 00:00:00 2001 From: monsteralover Date: Sun, 2 Jun 2024 21:56:19 +0900 Subject: [PATCH 4/8] =?UTF-8?q?modify=20:=20=EC=B9=B4=EB=93=9C=20=EC=84=B8?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=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/Application.java | 9 +++--- src/main/java/Card.java | 22 +++++++------ src/main/java/Denomination.java | 25 +++++++++++++++ src/main/java/GameProcessor.java | 30 +++++++++--------- src/main/java/GameStarter.java | 41 +++++++++++++------------ src/main/java/Player.java | 10 +++--- src/main/java/ResultView.java | 4 +-- src/main/java/{Suits.java => Suit.java} | 8 ++--- 8 files changed, 91 insertions(+), 58 deletions(-) create mode 100644 src/main/java/Denomination.java rename src/main/java/{Suits.java => Suit.java} (72%) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index fd4ca3e3f99..1f692f1d19c 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -7,12 +7,13 @@ public static void main(String[] args) { ResultView resultView = new ResultView(); GameStarter gameStarter = new GameStarter(); - List playerNames = new GameStarter().getPlayersNames(inputView); + List playerNames = gameStarter.getPlayersNames(inputView); resultView.printFirstDeal(playerNames); - Dealer dealer = gameStarter.pickDealerCards(resultView); - List players = gameStarter.pickPlayerCards(playerNames, resultView); + gameStarter.generateCardSet(); +// Dealer dealer = gameStarter.pickDealerCards(resultView); +// List players = gameStarter.pickPlayerCards(playerNames, resultView); - List playersFinishedGame = new GameProcessor(inputView,resultView).playersPlayGame(players); +// List playersFinishedGame = new GameProcessor(inputView,resultView).playersPlayGame(players); } } diff --git a/src/main/java/Card.java b/src/main/java/Card.java index d3541c06eef..aaedb2d417a 100644 --- a/src/main/java/Card.java +++ b/src/main/java/Card.java @@ -1,22 +1,26 @@ import java.util.ArrayList; import java.util.List; -import java.util.Random; public class Card { - int number; - Suits suits; + + Denomination number; + Suit suit; public Card() { - this.number = new Random().nextInt(11) + 1; - this.suits = Suits.getRandomSuits(); } - public List generateCards (int numberOfCards) { + public Card(Denomination number, Suit suit) { + this.number = number; + this.suit = suit; + } + + public List generateCardSet () { List cards = new ArrayList<>(); - for (int i = 0; i < numberOfCards; i++) { - cards.add(new Card()); + for (Denomination denomination : Denomination.values()) { + for (Suit suit : Suit.values()){ + cards.add(new Card(denomination,suit)); + } } return cards; } - } diff --git a/src/main/java/Denomination.java b/src/main/java/Denomination.java new file mode 100644 index 00000000000..60dd3353476 --- /dev/null +++ b/src/main/java/Denomination.java @@ -0,0 +1,25 @@ +public enum Denomination { + ACE(1), + TWO(2), + THREE(3), + FOUR(4), + FIVE(5), + SIX(6), + SEVEN(7), + EIGHT(8), + NINE(9), + TEN(10), + J (10), + Q (10), + K (10); + + int value; + + public int getValue() { + return value; + } + + Denomination(int value) { + this.value = value; + } +} diff --git a/src/main/java/GameProcessor.java b/src/main/java/GameProcessor.java index 53698c32af5..9bc2f233dc8 100644 --- a/src/main/java/GameProcessor.java +++ b/src/main/java/GameProcessor.java @@ -9,22 +9,22 @@ public GameProcessor(InputView inputView, ResultView resultView) { this.resultView = resultView; } - public List playersPlayGame(List players) { - for (int i = 0; i < players.size(); i++) { - Player updatedPlayer = playerAcceptsExtraCardIfChooseTo(players.get(i)); - players.set(i, updatedPlayer); - } - return players; - } +// public List playersPlayGame(List players) { +// for (int i = 0; i < players.size(); i++) { +// Player updatedPlayer = playerAcceptsExtraCardIfChooseTo(players.get(i)); +// players.set(i, updatedPlayer); +// } +// return players; +// } - public Player playerAcceptsExtraCardIfChooseTo(Player player) { - if (inputView.askIfGetOneMoreCard(player.name)) { - player = player.acceptsExtraCard(player); - resultView.printPlayerCards(player); - playerAcceptsExtraCardIfChooseTo(player); - } - return player; - } +// public Player playerAcceptsExtraCardIfChooseTo(Player player) { +// if (inputView.askIfGetOneMoreCard(player.name)) { +// player = player.acceptsExtraCard(player); +// resultView.printPlayerCards(player); +// playerAcceptsExtraCardIfChooseTo(player); +// } +// return player; +// } } diff --git a/src/main/java/GameStarter.java b/src/main/java/GameStarter.java index 83e25fd8265..999cdb04991 100644 --- a/src/main/java/GameStarter.java +++ b/src/main/java/GameStarter.java @@ -7,26 +7,29 @@ public class GameStarter { public List getPlayersNames(InputView inputView) { return inputView.getPlayerNames(); } - - public Dealer pickDealerCards(ResultView resultView) { - Card card = new Card(); - List dealerCards = card.generateCards(DEALING_CARD_NUMBERS); - Dealer dealer = new Dealer(dealerCards); - resultView.printInitialDealerCards(dealer); - - return dealer; + public List generateCardSet() { + return new Card().generateCardSet(); } - public List pickPlayerCards(List playerNames, ResultView resultView) { - Card card = new Card(); - List players = new ArrayList<>(); - for (String playerName : playerNames) { - Player player = new Player(playerName, card.generateCards(DEALING_CARD_NUMBERS)); - players.add(player); - } - resultView.printInitialPlayerCards(players); - - return players; - } +// public Dealer pickDealerCards(ResultView resultView) { +// Card card = new Card(); +// List dealerCards = card.generateCards(DEALING_CARD_NUMBERS); +// Dealer dealer = new Dealer(dealerCards); +// resultView.printInitialDealerCards(dealer); +// +// return dealer; +// } +// +// public List pickPlayerCards(List playerNames, ResultView resultView) { +// Card card = new Card(); +// List players = new ArrayList<>(); +// for (String playerName : playerNames) { +// Player player = new Player(playerName, card.generateCards(DEALING_CARD_NUMBERS)); +// players.add(player); +// } +// resultView.printInitialPlayerCards(players); +// +// return players; +// } } diff --git a/src/main/java/Player.java b/src/main/java/Player.java index a1b3f6edc4b..3c0bf0d74bf 100644 --- a/src/main/java/Player.java +++ b/src/main/java/Player.java @@ -9,9 +9,9 @@ public Player(String name, List cards) { this.cards = cards; } - public Player acceptsExtraCard(final Player player) { - List playerCards = player.cards; - playerCards.add(playerCards.size(), new Card().generateCards(1).get(0)); - return new Player(player.name, playerCards); - } +// public Player acceptsExtraCard(final Player player) { +// List playerCards = player.cards; +// playerCards.add(playerCards.size(), new Card().generateCards(1).get(0)); +// return new Player(player.name, playerCards); +// } } diff --git a/src/main/java/ResultView.java b/src/main/java/ResultView.java index f17f554b3f9..e8141f647ef 100644 --- a/src/main/java/ResultView.java +++ b/src/main/java/ResultView.java @@ -8,7 +8,7 @@ public void printFirstDeal(List playerNames) { public void printInitialDealerCards(Dealer dealer) { Card firstCard = dealer.getCards().get(0); - System.out.println("딜러: " + firstCard.number + firstCard.suits.title ); + System.out.println("딜러: " + firstCard.number + firstCard.suit.title ); } public void printInitialPlayerCards(List players) { @@ -21,7 +21,7 @@ public void printPlayerCards(Player player) { String message = player.name + " 카드: "; List cards = player.cards; String cardsToString = cards.stream() - .map(card -> card.number + card.suits.title) + .map(card -> card.number + card.suit.title) .collect(Collectors.joining(", ")); message += cardsToString; System.out.println(message); diff --git a/src/main/java/Suits.java b/src/main/java/Suit.java similarity index 72% rename from src/main/java/Suits.java rename to src/main/java/Suit.java index e0d2f0503eb..7beacdcf225 100644 --- a/src/main/java/Suits.java +++ b/src/main/java/Suit.java @@ -1,6 +1,6 @@ import java.util.Random; -public enum Suits { +public enum Suit { heart("하트"), spade("스페이드"), club("클로브"), @@ -12,13 +12,13 @@ public String getTitle() { return title; } - Suits(String title) { + Suit(String title) { this.title = title; } - public static Suits getRandomSuits() { + public static Suit getRandomSuits() { int randomIndex = new Random().nextInt(3); - Suits[] values = Suits.values(); + Suit[] values = Suit.values(); return values[randomIndex]; } } From 83142d99960d86ef03c960da5405c8c3c2ee6b33 Mon Sep 17 00:00:00 2001 From: monsteralover Date: Mon, 3 Jun 2024 00:31:56 +0900 Subject: [PATCH 5/8] =?UTF-8?q?modify=20:=20=EC=B9=B4=EB=93=9C=20=EC=84=B8?= =?UTF-8?q?=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=BD=91=EB=8F=84=EB=A1=9D=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/Application.java | 14 ++++++++---- src/main/java/Card.java | 14 +++++++++--- src/main/java/CardHolder.java | 24 ++++++++++++++++++++ src/main/java/CardSet.java | 26 +++++++++++++++++++++ src/main/java/Dealer.java | 15 ++++++++----- src/main/java/Denomination.java | 17 +++++++++++--- src/main/java/GameStarter.java | 40 +++++++++++++++++++++++++++++---- src/main/java/GameStatus.java | 27 ++++++++++++++++++++++ src/main/java/Player.java | 23 +++++++++++++------ src/main/java/ResultView.java | 32 ++++++++++++++++++++++---- 10 files changed, 201 insertions(+), 31 deletions(-) create mode 100644 src/main/java/CardHolder.java create mode 100644 src/main/java/CardSet.java create mode 100644 src/main/java/GameStatus.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 1f692f1d19c..72f11e7a1ef 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -7,11 +7,17 @@ public static void main(String[] args) { ResultView resultView = new ResultView(); GameStarter gameStarter = new GameStarter(); - List playerNames = gameStarter.getPlayersNames(inputView); - resultView.printFirstDeal(playerNames); - gameStarter.generateCardSet(); + CardSet cardSet = gameStarter.generateCardSet(); + + List players = gameStarter.createPlayers(inputView); + Dealer dealer = gameStarter.createDealer(); + GameStatus gameStatus = new GameStatus(players, dealer, cardSet); + gameStarter.dealFirstTurn(gameStatus); + resultView.printFirstDeal(gameStatus); + + // Dealer dealer = gameStarter.pickDealerCards(resultView); -// List players = gameStarter.pickPlayerCards(playerNames, resultView); + //List players = gameStarter.pickPlayerCards(playerNames, resultView); // List playersFinishedGame = new GameProcessor(inputView,resultView).playersPlayGame(players); diff --git a/src/main/java/Card.java b/src/main/java/Card.java index aaedb2d417a..908c74648cc 100644 --- a/src/main/java/Card.java +++ b/src/main/java/Card.java @@ -14,13 +14,21 @@ public Card(Denomination number, Suit suit) { this.suit = suit; } - public List generateCardSet () { - List cards = new ArrayList<>(); + public CardSet generateCardSet () { + ArrayList cards = new ArrayList<>(); for (Denomination denomination : Denomination.values()) { for (Suit suit : Suit.values()){ cards.add(new Card(denomination,suit)); } } - return cards; + return new CardSet(cards); + } + + @Override + public String toString() { + return "Card{" + + "number=" + number + + ", suit=" + suit + + '}'; } } diff --git a/src/main/java/CardHolder.java b/src/main/java/CardHolder.java new file mode 100644 index 00000000000..d8194373ece --- /dev/null +++ b/src/main/java/CardHolder.java @@ -0,0 +1,24 @@ +import java.util.ArrayList; +import java.util.List; + +public abstract class CardHolder { + protected List cards; + + public CardHolder() { + this.cards = new ArrayList<>(); + } + + public List getCards() { + return cards; + } + + public void pickCard(CardSet cardSet) { + Card pickedCard = cardSet.takeCard(cardSet); + setCard(pickedCard); + } + public void setCard(Card pickedCard) { + if(this.cards == null) this.cards = new ArrayList<>(); + this.cards.add(pickedCard); + } + +} diff --git a/src/main/java/CardSet.java b/src/main/java/CardSet.java new file mode 100644 index 00000000000..0691e15ef55 --- /dev/null +++ b/src/main/java/CardSet.java @@ -0,0 +1,26 @@ +import java.util.List; +import java.util.Random; + +public class CardSet { + List cards; + + public CardSet(List cards) { + this.cards = cards; + } + + public Card takeCard(CardSet cardSet) { + List cardSetCards = cardSet.cards; + int randomIndex = new Random().nextInt(cardSetCards.size()); + Card pickedCard = cardSetCards.get(randomIndex); + cardSetCards.remove(randomIndex); + + return pickedCard; + } + + @Override + public String toString() { + return "CardSet{" + + "cards=" + cards + + '}'; + } +} diff --git a/src/main/java/Dealer.java b/src/main/java/Dealer.java index 7a03657a59d..04135a55f86 100644 --- a/src/main/java/Dealer.java +++ b/src/main/java/Dealer.java @@ -1,13 +1,16 @@ +import java.util.ArrayList; import java.util.List; -public class Dealer { - List cards; +public class Dealer extends CardHolder{ - public Dealer(List cards) { - this.cards = cards; + public Dealer() { + super(); } - public List getCards() { - return cards; + @Override + public String toString() { + return "Dealer{" + + "cards=" + cards + + '}'; } } diff --git a/src/main/java/Denomination.java b/src/main/java/Denomination.java index 60dd3353476..891500cbbb7 100644 --- a/src/main/java/Denomination.java +++ b/src/main/java/Denomination.java @@ -1,3 +1,5 @@ +import java.util.List; + public enum Denomination { ACE(1), TWO(2), @@ -9,9 +11,9 @@ public enum Denomination { EIGHT(8), NINE(9), TEN(10), - J (10), - Q (10), - K (10); + J(10), + Q(10), + K(10); int value; @@ -22,4 +24,13 @@ public int getValue() { Denomination(int value) { this.value = value; } + + static boolean isNumber(Denomination denomination) { + List persons = List.of(ACE, J, Q, K); + + if (persons.contains(denomination)) { + return false; + } + return true; + } } diff --git a/src/main/java/GameStarter.java b/src/main/java/GameStarter.java index 999cdb04991..7ba5fd05a0f 100644 --- a/src/main/java/GameStarter.java +++ b/src/main/java/GameStarter.java @@ -4,13 +4,30 @@ public class GameStarter { static final int DEALING_CARD_NUMBERS = 2; - public List getPlayersNames(InputView inputView) { - return inputView.getPlayerNames(); + public List createPlayers(InputView inputView) { + List playerNames = inputView.getPlayerNames(); + return createPlayersByNames(playerNames); } - public List generateCardSet() { - return new Card().generateCardSet(); + + private List createPlayersByNames(List playerNames) { + List players = new ArrayList<>(); + for (String playerName : playerNames) { + Player player = new Player(playerName); + players.add(player); + } + return players; + } + + public Dealer createDealer(){ + return new Dealer(); } + //resultView.printFirstDeal(playerNames); + + public CardSet generateCardSet() { + return new Card().generateCardSet(); + } +// // public Dealer pickDealerCards(ResultView resultView) { // Card card = new Card(); // List dealerCards = card.generateCards(DEALING_CARD_NUMBERS); @@ -31,5 +48,20 @@ public List generateCardSet() { // // return players; // } + + public GameStatus dealFirstTurn(GameStatus gameStatus) { + + CardSet cardSet = gameStatus.getCardSet(); + List players = gameStatus.getPlayers(); + Dealer dealer = gameStatus.getDealer(); + for (Player player : gameStatus.getPlayers()) { + player.pickCard(cardSet); + player.pickCard(cardSet); + } + dealer.pickCard(cardSet); + dealer.pickCard(cardSet); + + return new GameStatus(players,dealer,cardSet); + } } diff --git a/src/main/java/GameStatus.java b/src/main/java/GameStatus.java new file mode 100644 index 00000000000..cb88c38cba5 --- /dev/null +++ b/src/main/java/GameStatus.java @@ -0,0 +1,27 @@ +import java.util.List; + +public class GameStatus { + + public GameStatus(List players, Dealer dealer, CardSet cardSet) { + this.players = players; + this.dealer = dealer; + this.cardSet = cardSet; + } + + List players; + Dealer dealer; + CardSet cardSet; + + public List getPlayers() { + return players; + } + + public Dealer getDealer() { + return dealer; + } + + public CardSet getCardSet() { + return cardSet; + } + +} diff --git a/src/main/java/Player.java b/src/main/java/Player.java index 3c0bf0d74bf..6cb56469562 100644 --- a/src/main/java/Player.java +++ b/src/main/java/Player.java @@ -1,17 +1,26 @@ -import java.util.List; - -public class Player { +public class Player extends CardHolder { String name; - List cards; - public Player(String name, List cards) { + public Player(String name) { + super(); this.name = name; - this.cards = cards; } -// public Player acceptsExtraCard(final Player player) { + public String getName() { + return name; + } + // public Player acceptsExtraCard(final Player player) { // List playerCards = player.cards; // playerCards.add(playerCards.size(), new Card().generateCards(1).get(0)); // return new Player(player.name, playerCards); // } + + + @Override + public String toString() { + return "Player{" + + "name='" + name + '\'' + + ", cards=" + cards + + '}'; + } } diff --git a/src/main/java/ResultView.java b/src/main/java/ResultView.java index e8141f647ef..f69bd1b5db5 100644 --- a/src/main/java/ResultView.java +++ b/src/main/java/ResultView.java @@ -2,13 +2,37 @@ import java.util.stream.Collectors; public class ResultView { - public void printFirstDeal(List playerNames) { - System.out.println("딜러와" + playerNames + "에게 2장을 나누었습니다."); + public void printFirstDeal(GameStatus gameStatus) { + printPlayerNames(gameStatus); + printInitialDealerCards(gameStatus.getDealer()); + printInitialPlayerCards(gameStatus.getPlayers()); + } + + private void printPlayerNames(GameStatus gameStatus) { + List players = gameStatus.getPlayers(); + StringBuilder names = new StringBuilder(); + for (Player player : players) { + names.append(",").append(player.getName()); + } + + System.out.println("딜러와" + names + "에게 2장을 나누었습니다."); } public void printInitialDealerCards(Dealer dealer) { Card firstCard = dealer.getCards().get(0); - System.out.println("딜러: " + firstCard.number + firstCard.suit.title ); + String denomination = getDenomination(firstCard); + System.out.println("딜러: " + denomination + firstCard.suit.title); + } + + private String getDenomination(Card card) { + String denomination = ""; + if (Denomination.isNumber(card.number)) { + denomination = String.valueOf(card.number.value); + } + if (!Denomination.isNumber(card.number)) { + denomination = card.number.toString(); + } + return denomination; } public void printInitialPlayerCards(List players) { @@ -21,7 +45,7 @@ public void printPlayerCards(Player player) { String message = player.name + " 카드: "; List cards = player.cards; String cardsToString = cards.stream() - .map(card -> card.number + card.suit.title) + .map(card -> getDenomination(card) + card.suit.title) .collect(Collectors.joining(", ")); message += cardsToString; System.out.println(message); From 1d45e21e4eb1a412857ef7b99b96f139833b0fa9 Mon Sep 17 00:00:00 2001 From: monsteralover Date: Mon, 3 Jun 2024 00:40:47 +0900 Subject: [PATCH 6/8] =?UTF-8?q?modify=20:=20=EA=B2=8C=EC=9E=84=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EC=8B=9C=EC=97=90=EB=8F=84=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=84=B8=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20=EB=BD=91=EB=8F=84=EB=A1=9D=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/Application.java | 11 +++++------ src/main/java/Dealer.java | 5 +---- src/main/java/GameProcessor.java | 30 +++++++++++++++--------------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 72f11e7a1ef..960376b6fec 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -7,19 +7,18 @@ public static void main(String[] args) { ResultView resultView = new ResultView(); GameStarter gameStarter = new GameStarter(); + //cardSet, dealer, players 생성 CardSet cardSet = gameStarter.generateCardSet(); - List players = gameStarter.createPlayers(inputView); Dealer dealer = gameStarter.createDealer(); GameStatus gameStatus = new GameStatus(players, dealer, cardSet); + + //firstDeal gameStarter.dealFirstTurn(gameStatus); resultView.printFirstDeal(gameStatus); - -// Dealer dealer = gameStarter.pickDealerCards(resultView); - //List players = gameStarter.pickPlayerCards(playerNames, resultView); - -// List playersFinishedGame = new GameProcessor(inputView,resultView).playersPlayGame(players); + GameProcessor gameProcessor = new GameProcessor(inputView, resultView); + List playersFinishedGame = gameProcessor.playersPlayGame(players, cardSet); } } diff --git a/src/main/java/Dealer.java b/src/main/java/Dealer.java index 04135a55f86..7859cb77c52 100644 --- a/src/main/java/Dealer.java +++ b/src/main/java/Dealer.java @@ -1,7 +1,4 @@ -import java.util.ArrayList; -import java.util.List; - -public class Dealer extends CardHolder{ +public class Dealer extends CardHolder { public Dealer() { super(); diff --git a/src/main/java/GameProcessor.java b/src/main/java/GameProcessor.java index 9bc2f233dc8..e1a7ea526fc 100644 --- a/src/main/java/GameProcessor.java +++ b/src/main/java/GameProcessor.java @@ -9,22 +9,22 @@ public GameProcessor(InputView inputView, ResultView resultView) { this.resultView = resultView; } -// public List playersPlayGame(List players) { -// for (int i = 0; i < players.size(); i++) { -// Player updatedPlayer = playerAcceptsExtraCardIfChooseTo(players.get(i)); -// players.set(i, updatedPlayer); -// } -// return players; -// } + public List playersPlayGame(List players, CardSet cardSet) { + for (int i = 0; i < players.size(); i++) { + Player updatedPlayer = playerAcceptsExtraCardIfChooseTo(players.get(i), cardSet); + players.set(i, updatedPlayer); + } + return players; + } -// public Player playerAcceptsExtraCardIfChooseTo(Player player) { -// if (inputView.askIfGetOneMoreCard(player.name)) { -// player = player.acceptsExtraCard(player); -// resultView.printPlayerCards(player); -// playerAcceptsExtraCardIfChooseTo(player); -// } -// return player; -// } + public Player playerAcceptsExtraCardIfChooseTo(Player player, CardSet cardSet) { + if (inputView.askIfGetOneMoreCard(player.name)) { + player.pickCard(cardSet); + resultView.printPlayerCards(player); + playerAcceptsExtraCardIfChooseTo(player, cardSet); + } + return player; + } } From b95893fb975cbcd9a3850c77249272a854411bd4 Mon Sep 17 00:00:00 2001 From: monsteralover Date: Mon, 3 Jun 2024 00:57:00 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EB=94=9C=EB=9F=AC=2016=20=EC=9D=B4?= =?UTF-8?q?=ED=95=98=EB=A9=B4=20=EC=B9=B4=EB=93=9C=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=ED=9A=8D=EB=93=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 1 + src/main/java/CardSet.java | 6 ------ src/main/java/Dealer.java | 6 ------ src/main/java/GameProcessor.java | 16 +++++++++++++++- src/main/java/GameStarter.java | 21 --------------------- src/main/java/ResultView.java | 3 +++ 6 files changed, 19 insertions(+), 34 deletions(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 960376b6fec..46dce424134 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -19,6 +19,7 @@ public static void main(String[] args) { GameProcessor gameProcessor = new GameProcessor(inputView, resultView); List playersFinishedGame = gameProcessor.playersPlayGame(players, cardSet); + Dealer dealerFinishedGame = gameProcessor.dealerPlayGame(dealer, cardSet); } } diff --git a/src/main/java/CardSet.java b/src/main/java/CardSet.java index 0691e15ef55..8b9f7c5856b 100644 --- a/src/main/java/CardSet.java +++ b/src/main/java/CardSet.java @@ -17,10 +17,4 @@ public Card takeCard(CardSet cardSet) { return pickedCard; } - @Override - public String toString() { - return "CardSet{" + - "cards=" + cards + - '}'; - } } diff --git a/src/main/java/Dealer.java b/src/main/java/Dealer.java index 7859cb77c52..1e940519ba5 100644 --- a/src/main/java/Dealer.java +++ b/src/main/java/Dealer.java @@ -4,10 +4,4 @@ public Dealer() { super(); } - @Override - public String toString() { - return "Dealer{" + - "cards=" + cards + - '}'; - } } diff --git a/src/main/java/GameProcessor.java b/src/main/java/GameProcessor.java index e1a7ea526fc..c0697514933 100644 --- a/src/main/java/GameProcessor.java +++ b/src/main/java/GameProcessor.java @@ -4,6 +4,8 @@ public class GameProcessor { InputView inputView; ResultView resultView; + static int MAX_DEALER_CARD_NUMBER_SUM = 16; + public GameProcessor(InputView inputView, ResultView resultView) { this.inputView = inputView; this.resultView = resultView; @@ -26,5 +28,17 @@ public Player playerAcceptsExtraCardIfChooseTo(Player player, CardSet cardSet) { return player; } - + public Dealer dealerPlayGame(Dealer dealer, CardSet cardSet) { + List cards = dealer.getCards(); + int sumOfNumbers = 0; + for (Card card : cards) { + sumOfNumbers += card.number.getValue(); + } + if (sumOfNumbers <= MAX_DEALER_CARD_NUMBER_SUM) { + dealer.pickCard(cardSet); + resultView.printDealerCard(); + dealerPlayGame(dealer, cardSet); + } + return dealer; + } } diff --git a/src/main/java/GameStarter.java b/src/main/java/GameStarter.java index 7ba5fd05a0f..521ec23a2be 100644 --- a/src/main/java/GameStarter.java +++ b/src/main/java/GameStarter.java @@ -27,27 +27,6 @@ public Dealer createDealer(){ public CardSet generateCardSet() { return new Card().generateCardSet(); } -// -// public Dealer pickDealerCards(ResultView resultView) { -// Card card = new Card(); -// List dealerCards = card.generateCards(DEALING_CARD_NUMBERS); -// Dealer dealer = new Dealer(dealerCards); -// resultView.printInitialDealerCards(dealer); -// -// return dealer; -// } -// -// public List pickPlayerCards(List playerNames, ResultView resultView) { -// Card card = new Card(); -// List players = new ArrayList<>(); -// for (String playerName : playerNames) { -// Player player = new Player(playerName, card.generateCards(DEALING_CARD_NUMBERS)); -// players.add(player); -// } -// resultView.printInitialPlayerCards(players); -// -// return players; -// } public GameStatus dealFirstTurn(GameStatus gameStatus) { diff --git a/src/main/java/ResultView.java b/src/main/java/ResultView.java index f69bd1b5db5..88989352fe7 100644 --- a/src/main/java/ResultView.java +++ b/src/main/java/ResultView.java @@ -51,4 +51,7 @@ public void printPlayerCards(Player player) { System.out.println(message); } + public void printDealerCard() { + System.out.println("딜러는 16이하라 한장의 카드를 더 받았습니다."); + } } From fd53cae4f2c31466ebec68e8f5db8c55b99109be Mon Sep 17 00:00:00 2001 From: monsteralover Date: Mon, 3 Jun 2024 02:26:24 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EC=8A=B9?= =?UTF-8?q?=ED=8C=A8=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 23 ++++++++-- src/main/java/CardHolder.java | 12 ++++- src/main/java/GameProcessor.java | 35 +++++++++++++- src/main/java/ResultView.java | 63 +++++++++++++++++++++++++- src/main/java/WinningStatusPlayer.java | 9 ++++ 5 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 src/main/java/WinningStatusPlayer.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 46dce424134..f8c665a31c7 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -7,19 +7,32 @@ public static void main(String[] args) { ResultView resultView = new ResultView(); GameStarter gameStarter = new GameStarter(); + //cardSet, dealer, players 생성 + GameStatus gameStatus = startGame(gameStarter, inputView, resultView); + + //게임 진행 + GameProcessor gameProcessor = new GameProcessor(inputView, resultView); + List playersFinishedGame = gameProcessor.playersPlayGame(gameStatus.getPlayers(), gameStatus.getCardSet()); + Dealer dealerFinishedGame = gameProcessor.dealerPlayGame(gameStatus.getDealer(), gameStatus.getCardSet()); + + GameStatus gameStatusWithResult = resultView.printGameResult(playersFinishedGame, dealerFinishedGame); + List winningStatusPlayers = gameProcessor.decideWinner(gameStatusWithResult); + resultView.printWinner(winningStatusPlayers); + + } + + private static GameStatus startGame(GameStarter gameStarter, InputView inputView, ResultView resultView) { CardSet cardSet = gameStarter.generateCardSet(); List players = gameStarter.createPlayers(inputView); Dealer dealer = gameStarter.createDealer(); + GameStatus gameStatus = new GameStatus(players, dealer, cardSet); - //firstDeal gameStarter.dealFirstTurn(gameStatus); resultView.printFirstDeal(gameStatus); - GameProcessor gameProcessor = new GameProcessor(inputView, resultView); - List playersFinishedGame = gameProcessor.playersPlayGame(players, cardSet); - Dealer dealerFinishedGame = gameProcessor.dealerPlayGame(dealer, cardSet); - + return gameStatus; } + } diff --git a/src/main/java/CardHolder.java b/src/main/java/CardHolder.java index d8194373ece..cc7c1587fe5 100644 --- a/src/main/java/CardHolder.java +++ b/src/main/java/CardHolder.java @@ -3,6 +3,15 @@ public abstract class CardHolder { protected List cards; + protected int totalScore; + + public void setTotalScore(int totalScore) { + this.totalScore = totalScore; + } + + public int getTotalScore() { + return totalScore; + } public CardHolder() { this.cards = new ArrayList<>(); @@ -16,8 +25,9 @@ public void pickCard(CardSet cardSet) { Card pickedCard = cardSet.takeCard(cardSet); setCard(pickedCard); } + public void setCard(Card pickedCard) { - if(this.cards == null) this.cards = new ArrayList<>(); + if (this.cards == null) this.cards = new ArrayList<>(); this.cards.add(pickedCard); } diff --git a/src/main/java/GameProcessor.java b/src/main/java/GameProcessor.java index c0697514933..188d351bd17 100644 --- a/src/main/java/GameProcessor.java +++ b/src/main/java/GameProcessor.java @@ -1,3 +1,4 @@ +import java.util.ArrayList; import java.util.List; public class GameProcessor { @@ -5,6 +6,7 @@ public class GameProcessor { ResultView resultView; static int MAX_DEALER_CARD_NUMBER_SUM = 16; + static int GAME_STANDARD_WINNING_NUMBER = 21; public GameProcessor(InputView inputView, ResultView resultView) { this.inputView = inputView; @@ -36,9 +38,40 @@ public Dealer dealerPlayGame(Dealer dealer, CardSet cardSet) { } if (sumOfNumbers <= MAX_DEALER_CARD_NUMBER_SUM) { dealer.pickCard(cardSet); - resultView.printDealerCard(); + resultView.printDealerGetsAdditionalCard(); dealerPlayGame(dealer, cardSet); } return dealer; } + + public List decideWinner(GameStatus gameStatus) { + + List players = gameStatus.getPlayers(); + Dealer dealer = gameStatus.getDealer(); + + int dealerTotalScore = dealer.getTotalScore(); + int dealerAbsolute = Math.abs(GAME_STANDARD_WINNING_NUMBER - dealerTotalScore); + + List winningStatusPlayers = new ArrayList<>(); + for (Player player : players) { + int playerTotalScore = player.getTotalScore(); + int playerAbsolute = Math.abs(GAME_STANDARD_WINNING_NUMBER - playerTotalScore); + + WinningStatusPlayer winningStatusPlayer = null; + if (playerAbsolute < dealerAbsolute) { + winningStatusPlayer = new WinningStatusPlayer(player, true); + } + if (playerAbsolute == dealerAbsolute) { + winningStatusPlayer = new WinningStatusPlayer(player, null); + } + if (playerAbsolute > dealerAbsolute) { + winningStatusPlayer = new WinningStatusPlayer(player, false); + } + winningStatusPlayers.add(winningStatusPlayer); + + } + return winningStatusPlayers; + + } + } diff --git a/src/main/java/ResultView.java b/src/main/java/ResultView.java index 88989352fe7..e33f73f4cf6 100644 --- a/src/main/java/ResultView.java +++ b/src/main/java/ResultView.java @@ -51,7 +51,68 @@ public void printPlayerCards(Player player) { System.out.println(message); } - public void printDealerCard() { + public void printDealerGetsAdditionalCard() { System.out.println("딜러는 16이하라 한장의 카드를 더 받았습니다."); } + + public GameStatus printGameResult(List playersFinishedGame, Dealer dealerFinishedGame) { + List players = (List) printResult(playersFinishedGame); + Dealer dealer = (Dealer) printResult(List.of(dealerFinishedGame)).get(0); + return new GameStatus(players, dealer, null); + } + + public List printResult(List cardHolders) { + + StringBuilder printContent = new StringBuilder(); + for (CardHolder holder : cardHolders) { + printContent = new StringBuilder(addMessageIfDealer(holder, printContent.toString())); + List cards = holder.cards; + int totalValue = 0; + StringBuilder cardString = new StringBuilder(); + for (Card card : cards) { + cardString.append(getDenomination(card)).append(card.suit.title).append(","); + totalValue += card.number.getValue(); + } + cardString.deleteCharAt(cardString.length() - 1); + printContent.append(cardString).append(" - 결과: ").append(totalValue).append("\n"); + holder.setTotalScore(totalValue); + } + System.out.println(printContent); + return cardHolders; + } + + private String addMessageIfDealer(CardHolder cardHolder, String printContent) { + if (cardHolder instanceof Dealer) { + printContent += "딜러 카드: "; + } + if (cardHolder instanceof Player) { + printContent += ((Player) cardHolder).getName() + "카드: "; + } + return printContent; + } + + public void printWinner(List winningStatusPlayers) { + System.out.println("## 최종 승패"); + long playerWinCount = winningStatusPlayers.stream().filter(winningStatusPlayer -> winningStatusPlayer.winner).count(); + long playerLooseCount = winningStatusPlayers.stream().filter(winningStatusPlayer -> !winningStatusPlayer.winner).count(); + long playerTieCount = winningStatusPlayers.stream().filter(winningStatusPlayer -> winningStatusPlayer.winner == null).count(); + System.out.println("딜러: " + playerLooseCount + "승 " + playerWinCount + "패 " + playerTieCount + "무"); + winningStatusPlayers.forEach(winningStatusPlayer -> { + String name = winningStatusPlayer.player.getName(); + System.out.print(name + ": "); + printWinOrLoose(winningStatusPlayer.winner); + }); + } + + private void printWinOrLoose(Boolean isWin) { + if (isWin == null) { + System.out.println("무"); + } + if (Boolean.TRUE.equals(isWin)) { + System.out.println("승"); + } + if (Boolean.FALSE.equals(isWin)) { + System.out.println("패"); + } + } } diff --git a/src/main/java/WinningStatusPlayer.java b/src/main/java/WinningStatusPlayer.java new file mode 100644 index 00000000000..56f0f327fb3 --- /dev/null +++ b/src/main/java/WinningStatusPlayer.java @@ -0,0 +1,9 @@ +public class WinningStatusPlayer { + Player player; + Boolean winner; + + public WinningStatusPlayer(Player player, Boolean winner) { + this.player = player; + this.winner = winner; + } +}