diff --git a/README.md b/README.md index e69de29..f24524a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,29 @@ +[구현 기능 목록] +1. Main 클래스 : Card, Player, Dealer, Board +2. 클래스 객체 +3. 지역변수 정의 +4. 지역 메소드 정의 + +[구현할 메서드 기능 목록(Before OMOF rule)]
+ + +1. 본 게임 전 초기설정 +- 카드 숫자 설정 +- 참여 인원 받기 +- 배팅 금액 받기 + + +2. 게임 시작 +- 모두에게 카드 2장 지급 +- 한 사람의 카드 숫자 계산(합 21=>블랙잭) +- 카드 숫자 계산해서 딜러vs 플레이어 승패 정하기 (합21 or 더가까운) +- 플레이어의 카드 판단 (21 넘는다 or 안넘는다) +- 프레이어 배팅 금액 잃음 (21 넘을경우) +- 플레이어 카드 뽑기 (21 안넘을 경우) +- 보드에서 게임을 순서대로 진행하기 +- 처음 2장부터 블랙잭이 되면 베팅금액 1.5배 딜러에게 받고 둘다 블랙잭이면 플레이어는 베팅 금액 돌려받기 +- 딜러는 처음 2장의 조건으로 행동 판단. (16이하, 17이상, 21초과) + +3. 주안점 +- 블랙잭은 계산함수 안에서? 아니면 메서드 하나로? 메서드 하나라면 숫자 계산함수와 포함 관계는? + diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..10302ea --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,10 @@ +import domain.board.Blackjack; + +public class Main { + + public static void main(String[] args) { + Blackjack board = new Blackjack(); + board.game(); + } + +} diff --git a/src/main/java/domain/board/Blackjack.java b/src/main/java/domain/board/Blackjack.java new file mode 100644 index 0000000..a179d33 --- /dev/null +++ b/src/main/java/domain/board/Blackjack.java @@ -0,0 +1,172 @@ +package domain.board; + +import domain.card.*; +import domain.user.*; +import java.util.*; + +public class Blackjack { + Scanner sc; + List cards; + List players; + Dealer dealer; + Rule rule; + + public Blackjack(){ + init(); + } + + public void init() { + sc = new Scanner(System.in); + cards = CardFactory.create(); + dealer = new Dealer(); + rule = new Rule(); + rule = new Rule(); + createPlayers(); + } + + public void createPlayers() { + String names[]; + Map users; + names = getNameInput(); + users = setBettingMoney(names); + createPlayer(users); + } + + public String[] getNameInput() { + String names[]; + System.out.println("게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"); + names = sc.next().split(","); + return names; + } + + public Map setBettingMoney(String[] names) { + Map users = new HashMap(); + String bettingMoney; + for(int i=0 ; i users) { + players = new ArrayList(); + for(Map.Entry user : users.entrySet() ) { + Player player = new Player(user.getKey(),Double.parseDouble(user.getValue())); + players.add(player); + } + } + /* 딜러, 플레이어에게 카드 두장 주기. + * cards에서 카드 한장 지우고 그 카드를 유저에게 주는 giveCardTo 함수 2번호출 + * */ + public void giveTwoCardToAll() { + giveCardToDealer(dealer); + giveCardToDealer(dealer); + for(Player player : players) { + giveCardToPlayer(player); + giveCardToPlayer(player); + } + } + + public void giveCardToPlayer(Player player) { + int random = (int)Math.random()*cards.size(); + Card card = cards.remove(random); + player.addCard(card); + + } + + public void giveCardToDealer(Dealer dealer) { + int random = (int)(Math.random()*(cards.size()-1)); + Card card = cards.remove(random); + dealer.addCard(card); + } + + public void printNoticeTwoCard() { + System.out.print("딜러와 "); + for(int i=0 ; i cards = player.getCards(); + int score=0; + for(Card card:cards) { + score = score+ card.getScore(); + } + return score; + } + + public int getDealerScore(Dealer dealer) { + List cards = dealer.getCards(); + int score=0; + for(Card card:cards) { + score = score+ card.getScore(); + } + return score; + } + + public boolean dealerCanGetCard(Dealer dealer) { + int score = getDealerScore(dealer); + if(score<=DEALER_LIMIT_SCORE) { + return true; + } + return false; + } + + public boolean isPlayerBlackjack(Player player) { + if(getPlayerScore(player)==BLACKJACK_SCORE) { + return true; + } + return false; + } + + public boolean isDealerBlackjack(Dealer dealer) { + if(getDealerScore(dealer)==BLACKJACK_SCORE) { + return true; + } + return false; + } + + /* 플레이어가 블랙잭 - 1.5배 딜러에게 받는다. + * 플레이어, 딜러 동시에 블랙잭 - 플레이어는 베팅액 그대로. 아닌 플레이어는 딜러에게 뺏김. + * 딜러 21 초과 - 베팅액 돌려받는다. + * */ + public double getBettingResult(Dealer dealer, List players) { + double dealerMoney=0,playerMoney=0; + if(isDealerBlackjack(dealer)){ + for(int i=0 ; iBLACKJACK_SCORE) { + + } + return dealerMoney; + } + +} diff --git a/src/main/java/domain/card/Card.java b/src/main/java/domain/card/Card.java index bab8a84..cec7bd8 100644 --- a/src/main/java/domain/card/Card.java +++ b/src/main/java/domain/card/Card.java @@ -15,7 +15,9 @@ public Card(Symbol symbol, Type type) { this.type = type; } - // TODO Card 관련 추가 기능 구현 + public void printCard() { + System.out.print("("+this.symbol+","+this.type+")"); + } @Override public boolean equals(Object o) { @@ -38,4 +40,8 @@ public String toString() { ", type=" + type + '}'; } + + public int getScore() { + return this.symbol.getScore(); + } } diff --git a/src/main/java/domain/card/CardFactory.java b/src/main/java/domain/card/CardFactory.java index 9658c84..8729b3c 100644 --- a/src/main/java/domain/card/CardFactory.java +++ b/src/main/java/domain/card/CardFactory.java @@ -1,7 +1,6 @@ package domain.card; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -14,7 +13,7 @@ public static List create() { for (Symbol symbol : symbols) { createByType(cards, symbol); } - return Collections.unmodifiableList(cards); + return cards; } private static void createByType(List cards, Symbol symbol) { diff --git a/src/main/java/domain/user/Dealer.java b/src/main/java/domain/user/Dealer.java index 328e2f6..3005505 100644 --- a/src/main/java/domain/user/Dealer.java +++ b/src/main/java/domain/user/Dealer.java @@ -9,13 +9,25 @@ * 게임 딜러를 의미하는 객체 */ public class Dealer { - private final List cards = new ArrayList<>(); + private final List cards = new ArrayList<>(); public Dealer() {} + + + public List getCards(){ + return this.cards; + } public void addCard(Card card) { cards.add(card); } - // TODO 추가 기능 구현 + public void printCard() { + System.out.print("딜러:"); + for(Card card:cards) { + card.printCard(); + } + System.out.println(); + } + } diff --git a/src/main/java/domain/user/Player.java b/src/main/java/domain/user/Player.java index d529127..5fe048e 100644 --- a/src/main/java/domain/user/Player.java +++ b/src/main/java/domain/user/Player.java @@ -10,18 +10,49 @@ */ public class Player { private final String name; - private final double bettingMoney; + private double bettingMoney; private final List cards = new ArrayList<>(); public Player(String name, double bettingMoney) { this.name = name; this.bettingMoney = bettingMoney; } + + public String getName() { + return this.name; + } + + public List getCards(){ + return this.cards; + } + + public double getBettingMoney() { + return this.bettingMoney; + } + + public void setBettingMoney(double money) { + this.bettingMoney = money; + } public void addCard(Card card) { cards.add(card); } - - // TODO 추가 기능 구현 - + + public void printCard() { + System.out.print(name+"카드:"); + for(Card card:cards) { + card.printCard(); + } + System.out.println(); + } + + + + + + + + + + } diff --git a/src/test/java/domain/card/CardFactoryTest.java b/src/test/java/domain/card/CardFactoryTest.java index 8c93f3d..134b28f 100644 --- a/src/test/java/domain/card/CardFactoryTest.java +++ b/src/test/java/domain/card/CardFactoryTest.java @@ -12,5 +12,9 @@ void create() { List cards = CardFactory.create(); assertThat(cards).hasSize(52); System.out.println(cards); + + System.out.print("\n 0번째 지운 후 0번째 요소 :"); + cards.get(0).printCard(); + } }