-
Notifications
You must be signed in to change notification settings - Fork 74
Expand file tree
/
Copy pathBlackjackGame.java
More file actions
88 lines (71 loc) · 2.67 KB
/
BlackjackGame.java
File metadata and controls
88 lines (71 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package blackjack.controller;
import blackjack.domain.Dealer;
import blackjack.domain.Judgement;
import blackjack.domain.Player;
import blackjack.view.InputView;
import blackjack.view.OutputView;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class BlackjackGame {
private static final int THRESHOLD = 21;
public void play() {
List<String> playersName = getPlayerName();
Dealer dealer = new Dealer();
List<Player> players = playersName.stream().map(Player::new)
.collect(Collectors.toList());
List<Player> allGamblers = getAllGamblers(dealer, players);
allGamblers.forEach(dealer::allocateInitialCards);
OutputView.printPlayersCard(allGamblers);
betting(dealer, players);
checkIfDealerGotMoreCard(dealer);
Judgement judgement = new Judgement(allGamblers);
OutputView.printGameResult(allGamblers, judgement.findWinners());
}
private void betting(Dealer dealer, List<Player> players) {
List<Player> alivePlayers = players;
boolean isPlaying;
do {
isPlaying = isAnyOneGettingMoreCard(dealer, alivePlayers);
alivePlayers = filterBustedPlayer(alivePlayers);
}
while (isPlaying);
}
private List<Player> filterBustedPlayer(List<Player> alive) {
return alive.stream().filter(player -> player.calculateScore() <= THRESHOLD)
.collect(Collectors.toList());
}
private boolean isAnyOneGettingMoreCard(Dealer dealer, List<Player> players) {
boolean isPlaying = false;
for (Player player : players) {
isPlaying = isPlayerGettingMoreCard(dealer, player);
}
return isPlaying;
}
private boolean isPlayerGettingMoreCard(Dealer dealer, Player player) {
boolean answer = InputView.askAddCard(player);
if (answer) {
dealer.allocateCard(player);
OutputView.printJoinedCardInfo(player);
OutputView.printNextLine();
return true;
}
return false;
}
private List<String> getPlayerName() {
List<String> playersName = InputView.getPlayersName();
OutputView.printInitialCardDistribute(playersName);
return playersName;
}
private void checkIfDealerGotMoreCard(Dealer dealer) {
if (dealer.addOneMoreCard()) {
OutputView.printDealerReceived();
}
}
private List<Player> getAllGamblers(Dealer dealer, List<Player> players) {
List<Player> allGamblers = new ArrayList<>();
allGamblers.add(dealer);
allGamblers.addAll(players);
return allGamblers;
}
}