Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,21 @@
# java-blackjack
# java-blackjack

#플레이어

#딜러

#트럼프카드
- randomNumber의 범위는 0~52
- Domain.Shape 가 걸림

- 1~13 * 4
- setTwoCard(
- return 카드 2장
- )

#Game
1. 게임을 시작
2. 플레이어 입력
3. 카드 배분
4. Domain.TrumpCard 2번 호출

59 changes: 59 additions & 0 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import Domain.Player;
import Service.BlackJackGame;
import view.inputView;
import view.outputView;

import java.io.OutputStream;

public class Application {
public static void main(String[] args) {
outputView.outputPlayerNames();
String[] playerNames = inputView.inputPlayerNames();

outputView.outputPlayerInfo(playerNames);
BlackJackGame game = new BlackJackGame();
game.registerParticipant(playerNames);
game.registerDealer();
// <-- 등록

for(Player player : game.playerList){
outputView.outputBettingPrice(player.getName());
player.bettingPrice = inputView.inputPlayerBettingPrice();
}

// 카드 OPEN -->
outputView.outputParticipantCardInfo(game.dealer);
game.playerList.forEach(outputView::outputParticipantCardInfo);
// <-- 카드 OPEN

// 플레이어 MORE 카드 -->
for(Player player : game.playerList){
while(!player.isBurst()){
outputView.outputMoreCard(player.getName());

if(inputView.inputIsMoreCard()){
game.participantAddCard(player);
outputView.outputParticipantCardInfo(player);
continue;
}
break;
}
}
// <-- 플레이어 MORE 카드

while (game.checkDealerScore()){
game.participantAddCard(game.dealer);
outputView.outputDealerCard();
}

// 딜러 hidden card 오픈
game.dealerCardOpen();

outputView.outputParticipantResult(game.dealer);
game.playerList.forEach(outputView::outputParticipantResult);

// game.calculrateGame();
game.calcurateBettingPrice();
outputView.outputBettingResult(game.dealer, game.playerList);
}
}
13 changes: 13 additions & 0 deletions src/main/java/Domain/Dealer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package Domain;

import java.util.List;

public class Dealer extends Participant{

public int dealerWinCount = 0 ;
public int dealerLoseCount = 0 ;
public Dealer(String name, List<TrumpCard> ParticipantCardList) {
super(name, ParticipantCardList);
}
boolean firstOpen = true ;
}
72 changes: 72 additions & 0 deletions src/main/java/Domain/Participant.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package Domain;

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

public class Participant {

private String name;
List<TrumpCard> ParticipantCardList = new ArrayList<>();
public int winningPrice = 0 ;
public boolean isBlackJack = false ;
public Participant(String name, List<TrumpCard> ParticipantCardList) {
this.name = name;
this.ParticipantCardList = ParticipantCardList;
}

public void addParticipantCardList(TrumpCard trumpCard) {
this.ParticipantCardList.add(trumpCard);
}

public int getParticipantScore() {
int score = ParticipantCardList.stream().map(TrumpCard::getCardScore).mapToInt(i->i).sum();
if (aceCount()){
return checkAce(score);
}
return score;
}

public boolean aceCount(){
return ParticipantCardList.stream().anyMatch(a -> a.getCardNumber() == 1);
}

public int checkAce(int score){
// if ParticipantCardList.cardNumber == 0 이 있다면
if (score <= 11){
return score - 1 + 11 ;
}
return score ;
}

public String getCardName(){
String cardInfos = "";
for(TrumpCard trumpCard : ParticipantCardList){
if (!trumpCard.isHiddenCard) {
cardInfos += getOneCardName(trumpCard);
cardInfos += ", ";
}
}
return cardInfos ;
}

public String getOneCardName(TrumpCard trumpCard){
String[] cardInfo = {"0", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
return cardInfo[trumpCard.cardNumber] + trumpCard.cardShape;
}

public String getName() {
return this.name;
}

public boolean isBurst(){
if(getParticipantScore() >= 21){
return true;
}
return false;
}

public List<TrumpCard> getParticipantCardList() {
return ParticipantCardList;
}
}

58 changes: 58 additions & 0 deletions src/main/java/Domain/Player.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package Domain;

import java.util.List;

public class Player extends Participant{

public String playerResult = "";
public int bettingPrice = 0 ;
public Player(String name, List<TrumpCard> ParticipantCardList) {
super(name, ParticipantCardList);
}

public boolean isPlayerWin(int dealerScore){
int myScore = getParticipantScore();
if(myScore > 21){
return false;
}

if(dealerScore > 21){
return true;
}

return dealerScore < myScore;
}

public float isPlayerWin_2(int dealerScore, boolean isDealerBlackJack, boolean isPlayerBlackJack){
int myScore = getParticipantScore();
if(myScore > 21){
return -1;
}

if(dealerScore > 21){
return 1;
}

if(isDealerBlackJack && isPlayerBlackJack){
return 1 ;
}

if(isPlayerBlackJack){
return 1.5f ;
}

if(dealerScore < myScore){
return 1 ;
}

if(dealerScore == myScore){ // 동점인 경우, 수익 0
return 0 ;
}

return -1;
}

public void setPlayerResult(){
playerResult = "승";
}
}
14 changes: 14 additions & 0 deletions src/main/java/Domain/Shape.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package Domain;

public enum Shape {
스페이드,
하트,
클로버,
다이아몬드
}

//1~13
//14~26
//27~39
//40~52

33 changes: 33 additions & 0 deletions src/main/java/Domain/TrumpCard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package Domain;

public class TrumpCard {
public Shape cardShape ;
public int cardNumber ;
public boolean isHiddenCard ;

// 카드 주기
public TrumpCard(int randomNumber) {
this.cardShape = makeRandomShape(randomNumber);
this.cardNumber = makeRandomNumber(randomNumber);
}

public Shape makeRandomShape(int randomNumber){
return Shape.values()[(int)randomNumber/13] ;
}

public int makeRandomNumber(int randomNumber){
return (randomNumber%13)+1 ;
}

public int getCardNumber(){
return this.cardNumber;
}

public int getCardScore(){
if(this.cardNumber >= 11){
return 10;
}

return this.cardNumber;
}
}
34 changes: 34 additions & 0 deletions src/main/java/Service/BlackJackCard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package Service;

import Domain.Participant;
import Domain.TrumpCard;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class BlackJackCard {

public List<TrumpCard> makeTwoCard(){
List<TrumpCard> trumpCards = new ArrayList<>();
for (int i = 0; i < 2; i++){
trumpCards.add(makeCardList(generateRandomNumber()));
}
return trumpCards;
}

public TrumpCard makeCardList(int randomNumber){
List<TrumpCard> cardList = new ArrayList<>();
return new TrumpCard(randomNumber);
}

public int generateRandomNumber(){
Random random = new Random();
return random.nextInt(52);
}

public TrumpCard makeOneCard(){
return new TrumpCard(generateRandomNumber());
}

}
72 changes: 72 additions & 0 deletions src/main/java/Service/BlackJackGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package Service;

import Domain.Dealer;
import Domain.Participant;
import Domain.Player;
import java.util.ArrayList;
import java.util.List;

public class BlackJackGame {

public List<Player> playerList = new ArrayList<>();
BlackJackCard blackJackCard = new BlackJackCard();
public Dealer dealer;

public void registerParticipant(String[] playerNames) {
for (String playerName : playerNames) {
Player player = new Player(playerName, blackJackCard.makeTwoCard());
player.isBlackJack = checkBlackJack(player);
this.playerList.add(player);
}
}

public void registerDealer() {
this.dealer = new Dealer("딜러", blackJackCard.makeTwoCard());
this.dealer.getParticipantCardList().get(0).isHiddenCard = true;
this.dealer.isBlackJack = checkBlackJack(this.dealer);
}

public boolean checkBlackJack(Participant participant) {
return participant.getParticipantScore() == 21;
}

public boolean checkDealerScore() {
return dealer.getParticipantScore() <= 16;
}

public void calculrateGame() {
int dealerScore = dealer.getParticipantScore();
for (Player player : playerList) {
boolean isPlayerWin = player.isPlayerWin(dealerScore);
if (isPlayerWin) {
player.playerResult = "승";
dealer.dealerLoseCount += 1;
} else {
player.playerResult = "패";
dealer.dealerWinCount += 1;
}
}
// playerList.stream()
// .filter(a -> a.isPlayerWin(dealerScore))
// .forEach(Player::setPlayerResult);
}

public void participantAddCard(Participant participant) {
participant.addParticipantCardList(blackJackCard.makeOneCard());
}

public void dealerCardOpen(){
dealer.getParticipantCardList().get(0).isHiddenCard = false;
}

public void calcurateBettingPrice() {
int dealerScore = dealer.getParticipantScore();
float bettingValue = 1 ;

for (Player player : playerList) {
bettingValue = player.isPlayerWin_2(dealerScore, dealer.isBlackJack, player.isBlackJack);
player.winningPrice += (int)(player.bettingPrice * bettingValue);
dealer.winningPrice += (int)(player.bettingPrice* bettingValue * -1);
}
}
}
Loading