-
Notifications
You must be signed in to change notification settings - Fork 384
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[2단계 - 블랙잭(베팅)] 성하(김성훈) 미션 제출합니다. (#531)
* docs(README.md): 기능 요구 사항 및 구현할 기능 목록 작성 * refactor(ResultView): 상수 유틸 클래스 딜러 이름 사용하도록 리팩토링 * refactor: 컨트롤러에 있는 도메인 로직 BlackJackGame으로 위임 * refactor(Deck): DeckGenreator 기능들 Deck으로 위임 * docs(README.md): 기능목록 업데이트 * test(BettingMoneyTest): 배팅 머니가 0 이하의 금액이면 예외 처리 테스트 * feat(BettingMoney): 0 이하의 금액 예외 처리 기능 구현 * test(DealerTest): 플레이어의 배팅 머니 저장 기능 테스트 * feat(Dealer): 플레이어의 배팅 금액 저장 기능 구현 * test(DealerTest): 수익률 계산 기능 테스트 * feat: 수익률 계산 기능 구현 * test(DealerTest): 딜러 블랙잭 판단 기능 테스트 * feat : 딜러 블랙잭 판단 기능 구현 * feat(InputView): 배팅 금액 입력 기능 구현 * test(InputValiddatorTest): 배팅 금액이 숫자가 아니면 예외 처리 테스트 * feat(InputValidator): 배팅 금액 검증 기능 구현 * feat(OutputView): 배팅 금액 출력 기능 구현 * feat(BlackJackGame): 배팅 금액 저장 & 수익 계산 기능 구현 * feat(ResultView): 최종 수익 출력 기능 구현 * test(TotalSumValueTest): 모든 요소에 수를 더하는 기능 테스트 * feat(TotalSumValues): 모든 요소에 수를 더하는 기능 구현 * test(HandCardsTest): 최적의 합계 구하는 기능 테스트 * refactor: 최적 합계 구하는 기능 HandCards로 위임 * rename: HandCards -> Hand로 네이밍 변경 * refactor: 핸드 카드 반환 기능 리팩토링 * refactor: 참가자 자신이 최적 합계 계산하도록 리팩토링 * test: DeckGeneratorTest DeckTest로 위임 * test(HandTest): 블랙잭 체크 기능 테스트 * feat(Hand): 블랙잭 체크 기능 구현 * test(BettingMoneyByPlayerTest): 플레이어의 배팅 금액을 찾아서 반환 기능 테스트 * feat(BettingMoneyByPlayer): 플레이어의 배팅 금액 찾아서 반환 기능 구현 * test(FinalProfitByParticipantTest): 딜러의 최종 수익 계산 테스트 * feat(FinalProfitByParticipant): 참가자별 최종 수익 관련 기능 구현 * test(FinalProfitTest): 최종 수익 더하는 기능 테스트 * feat(FinalProfit): 최종 수익 더하는 기능 구현 * test(FinalProfitTest): 최종 수익 부호를 바꾸는 기능 테스트 * feat(FinalProfit): 최종 수익 부호를 바꾸는 기능 구현 * test(HandTest): 버스트 체크 기능 테스트 * feat(Hand): 버스트 체크 기능 구현 * test(HandTest): 스테이 체크 기능 테스트 * feat(Hand): 스테이 체크 기능 구현 * feat(BettingManage): 참가자별 배팅 금액, 수익을 관리하는 BettingManager 구현 * docs(README.md): 참가자별 배팅 금액 저장, 참가자별 수익을 계산할 수 있다. * refactor(FinalProfitByParticipant): 순서 보장하도록 LinkedHashMap으로 변경 * refactor(BettingManager): 수익 계산 시 스테이 분기 처리 추가 * refactor(ResultView): 최종 수익 딜러 따로 출력하도록 리팩토링 * feat: 블랙잭 게임 실행되도록 컨트롤러 실행 로직 조립 * chore: 사용하지 않는 메소드 삭제 * remove: 안 쓰는 Result 관련 객체 삭제 * refactor(FinalProfit): 딜러 최종 수익이 0일 때, -1 곱하지 않도록 리팩토링 * refactor: 딜러가 블랙잭일 시 플레이어 추가 카드 요청 단계 Skip 후 결과 출력하도록 리팩토링 * refactor: BettingMoney 변환 검증 로직 도메인으로 위임 * refactor: ParticipantResultDto를 생성하여 View에서 사용하도록 리팩토링 * refactor(Hand): 카드 합이 21이어도 카드 장 수가 3장 이상이면 Stay가 되도록 리팩토링 * refactor: ParticipantFinalResultDto를 생성하여 View에서 사용하도록 리팩토링 * refactor: FinalProfitDto를 생성하여 View에서 사용하도록 리팩토링 * refactor: 불필요한 메소드 삭제 * refactor: FinalProfitDto를 생성하여 View에서 사용하도록 리팩토링 * refactor(BlackJackController): 게임 단계 분리 리팩토링 * refactor(BettingMoney): getter 네이밍 멤버 변수명과 일치하도록 리팩토링 * refactor(Hand): 코드 구조 개선 리팩토링 * test(PlayerBettingResultTest): 배팅 결과에 따라 최종 수익을 계산하는 기능 테스트 * feat(PlayerBettingResult): 배팅 결과에 따라 최종 수익을 계산하는 기능 구현 * test(PlayerTest): 플레이어와 딜러의 상태를 비교하여 배팅 결과를 반환하는 기능 테스트 * feat(Player): 플레이어와 딜러의 상태를 비교하여 배팅 결과를 반환하는 기능 구현 * refactor(BettingManager): 책임 분리 및 구조 개선 리팩토링
- Loading branch information
1 parent
16bc60a
commit 32502d7
Showing
50 changed files
with
1,168 additions
and
747 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package domain.betting; | ||
|
||
import java.util.List; | ||
|
||
import domain.participant.Dealer; | ||
import domain.participant.Hand; | ||
import domain.participant.Player; | ||
import domain.profit.FinalProfit; | ||
import domain.profit.FinalProfitByParticipant; | ||
import domain.profit.FinalProfitDto; | ||
|
||
public class BettingManager { | ||
|
||
private final BettingMoneyByPlayer bettingMoneyByPlayer; | ||
private final FinalProfitByParticipant finalProfitByParticipant; | ||
|
||
public BettingManager() { | ||
this.bettingMoneyByPlayer = new BettingMoneyByPlayer(); | ||
this.finalProfitByParticipant = new FinalProfitByParticipant(); | ||
} | ||
|
||
public void savePlayerBettingMoney(Player player, BettingMoney bettingMoney) { | ||
bettingMoneyByPlayer.putPlayerBettingMoney(player, bettingMoney); | ||
} | ||
|
||
public void calculateParticipantFinalProfit(List<Player> players, Dealer dealer) { | ||
for (Player player : players) { | ||
calculatePlayerFinalProfit(player, dealer); | ||
} | ||
} | ||
|
||
private void calculatePlayerFinalProfit(Player player, Dealer dealer) { | ||
Hand dealerHand = dealer.getHand(); | ||
BettingMoney bettingMoney = bettingMoneyByPlayer.findBettingMoneyByPlayer(player); | ||
PlayerBettingResult playerBettingResult = player.calculateBettingResult(dealerHand); | ||
saveProfit(player, bettingMoney, playerBettingResult); | ||
} | ||
|
||
private void saveProfit(Player player, BettingMoney bettingMoney, PlayerBettingResult playerBettingResult) { | ||
finalProfitByParticipant.putParticipantFinalProfit(player, new FinalProfit(playerBettingResult.calculateFinalProfit(bettingMoney.getMoney()))); | ||
} | ||
|
||
public FinalProfitDto generateFinalProfitDto() { | ||
return new FinalProfitDto( | ||
finalProfitByParticipant.calculateDealerFinalProfit(), | ||
finalProfitByParticipant.getFinalProfitByParticipant()); | ||
} | ||
} |
Oops, something went wrong.