diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c3e7623 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/java/BlackJack.java b/src/main/java/BlackJack.java index f853c9c..939554f 100644 --- a/src/main/java/BlackJack.java +++ b/src/main/java/BlackJack.java @@ -1,23 +1,21 @@ -import domain.*; -import ui.Game; - -import java.util.ArrayList; -import java.util.List; - -public class BlackJack { - - public static void main(String[] args) { - Game game = new Game(); - game.play(); - CardDeck cardDeck = new CardDeck(); - List dealerCardList = new ArrayList<>(); - List gamerCardList = new ArrayList<>(); - Dealer dealer=new Dealer(dealerCardList); - Gamer gamer=new Gamer(gamerCardList); - Rule rule=new Rule(); - gamer.firstPick(cardDeck); - dealer.firstPick(cardDeck); - dealer.pick(cardDeck); - rule.Winner(dealer,gamer); - } -} +//import domain.CardDeck; +//import domain.Dealer; +//import domain.Gamer; +//import domain.Rule; +//import ui.Game; +// +//public class BlackJack { +// +// public static void main(String[] args) { +// Game game = new Game(); +// game.play(); +// CardDeck cardDeck = new CardDeck(); +// Dealer dealer=new Dealer(); +// Gamer gamer=new Gamer(); +// Rule rule=new Rule(); +// gamer.firstPick(cardDeck); +// dealer.firstPick(cardDeck); +// dealer.additionalPick(rule,cardDeck); +// rule.winner(dealer,gamer); +// } +//} diff --git a/src/main/java/domain/Card.java b/src/main/java/domain/Card.java index 62941d7..8506b86 100644 --- a/src/main/java/domain/Card.java +++ b/src/main/java/domain/Card.java @@ -1,43 +1,42 @@ package domain; +import java.util.Objects; + public class Card { - private CardShape pattern; - private String character; - private int point; - - public int getPoint() { - return point; - } - - public Card(CardShape pattern, String character) { - this.pattern = pattern; - this.character = character; - this.point=cardPoint(character); - } - private int cardPoint(String character){ - if(character.equals("A")) - return 1; - else if(character.equals("K")||character.equals("Q")||character.equals("J")) - return 10; - else - return Integer.parseInt(character); - } - - public void setPattern(CardShape pattern) { - this.pattern = pattern; - } - - public void setCharacter(String character) { - this.character = character; - } - - public CardShape getPattern() { - return pattern; - } - - public String getCharacter() { - return character; - } + public Pattern getPattern() { + return pattern; + } + + public CardShape getCardShape() { + return cardShape; + } + + private CardShape cardShape; + private Pattern pattern; + + + public Card(CardShape cardShape, Pattern pattern) { + this.cardShape = cardShape; + this.pattern = pattern; + } + + + public boolean isPatternEquals(Card card){ + return this.pattern.equals(card.pattern); + } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Card card = (Card) o; + return cardShape == card.cardShape && + pattern == card.pattern; + } + + @Override + public int hashCode() { + return Objects.hash(cardShape, pattern); + } } diff --git a/src/main/java/domain/CardDeck.java b/src/main/java/domain/CardDeck.java index 84fd914..87b4b7c 100644 --- a/src/main/java/domain/CardDeck.java +++ b/src/main/java/domain/CardDeck.java @@ -3,84 +3,31 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Random; public class CardDeck { - - List cards=new ArrayList<>(); - private static final int PATTERN_A=1; - private static final int PATTERN_J=11; - private static final int PATTERN_Q=12; - private static final int PATTERN_K=13; - private static final int CARD_DECK_SIZE=13; - - public List getCards() { - return cards; - } - - public void setCards(List cards) { + //List cardList = new ArrayList<>(); + private Cards cards; + //Cards cards; + public CardDeck(Cards cards) { this.cards = cards; + cardShuffle(); } - private static String[] patterns={ - CardShape.CLUB.name(), - CardShape.DIAMOND.name(), - CardShape.HEART.name(), - CardShape.SPADE.name() - }; - - public List create(){ - List cards = new ArrayList<>(); - for(int i=0;i<4;i++){ - makeCarddeck(patterns[i]); - } - return Collections.unmodifiableList(cards); + private void cardShuffle(){ + cards.create(); + Collections.shuffle(cards.getCards()); } - public CardDeck() { - makeDeck(patterns); - } - private void makeDeck(String[] patterns){ - for(int i=0;i<4;i++) - makeCarddeck(patterns[i]); + public Card pick(){ + Card card = cards.toList().get(0); + remove(card); + return card; } - //카드덱 만들기 - private void makeCarddeck(String pattern) { - for(int i=1;i<=CARD_DECK_SIZE;i++){ - String character =numberToPattern(i); - Card card = new Card(CardShape.valueOf(pattern), character); - this.cards.add(card); - } - } - private String numberToPattern(int number){ - if (number == PATTERN_A) - return "A"; - else if (number == PATTERN_J) - return "J"; - else if (number == PATTERN_Q) - return "Q"; - else if (number == PATTERN_K) - return "K"; - else - return String.valueOf(number); - } + public void remove(Card card){ - public void addCard(Card card){ - this.cards.add(card); + cards.getCards().remove(card); } - //카드덱에서 카드 한장 뽑기(인덱스 추출) - private int drawCardIndex(){ - Random random = new Random(); - return random.nextInt(cards.size()); - } - - //카드덱에서 해당 인덱스에 있는 카드 삭제 - public Card pickAndRemove(){ - Card pickcard = cards.get(drawCardIndex()); - this.cards.remove(pickcard); - return pickcard; - } } diff --git a/src/main/java/domain/CardShape.java b/src/main/java/domain/CardShape.java index 20125c2..8d7c7a7 100644 --- a/src/main/java/domain/CardShape.java +++ b/src/main/java/domain/CardShape.java @@ -1,17 +1,15 @@ package domain; - public enum CardShape { - SPADE("♠", "SPADE"), - HEART("♥", "HEART"), - DIAMOND("♦", "DIAMOND"), - CLUB("♣", "CLUB"); + SPADE("SPADE"), + HEART( "HEART"), + DIAMOND("DIAMOND"), + CLUB("CLUB"); private String shape; - private String title; - CardShape(String shape, String title) { + CardShape(String shape) { this.shape = shape; - this.title = title; + } public String getShape() { @@ -22,12 +20,4 @@ public void setShape(String shape) { this.shape = shape; } - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - } diff --git a/src/main/java/domain/Cards.java b/src/main/java/domain/Cards.java new file mode 100644 index 0000000..13778be --- /dev/null +++ b/src/main/java/domain/Cards.java @@ -0,0 +1,39 @@ +package domain; + + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Cards { + private List cards = new ArrayList<>(); + + public Cards(List cards) { + this.cards=cards; + } + public List toList(){ + List cardList=new ArrayList<>(); + for(int i=0;i< cards.size();i++) + cardList.add(cards.get(i)); + return cardList; + } + + public List create(){ + for(Pattern pattern: Pattern.values()){ + createByPattern(cards,pattern); + } + return Collections.unmodifiableList(cards); + } + + public List getCards(){ + return cards; + } + private void createByPattern(List cards, Pattern pattern){ + for(CardShape cardShape:CardShape.values()){ + cards.add(new Card(cardShape,pattern)); + } + } + + + +} diff --git a/src/main/java/domain/Dealer.java b/src/main/java/domain/Dealer.java index e285b72..0f093b0 100644 --- a/src/main/java/domain/Dealer.java +++ b/src/main/java/domain/Dealer.java @@ -1,68 +1,40 @@ -package domain; - -import java.util.List; - -public class Dealer implements Player{ - - List dealerCards; - private static final int MAX_CARD=3; - private static final int BOUNDARY_VALUE=17; - public int dealerTotal; - - public Dealer(List dealerCards) { - this.dealerCards = dealerCards; - this.dealerTotal=0; - } - @Override - public List openCard(){ - return dealerCards; - } - - @Override //카드 2장을 초기에 뽑음 - public void firstPick(CardDeck cardDeck){ - dealerCards.add(cardDeck.pickAndRemove()); - dealerCards.add(cardDeck.pickAndRemove()); - total(dealerCards); - } - - //카드값(16초과한지 계산) - @Override - public void total(List cards){ - cards= dealerCards; - for(Card card:cards) - this.dealerTotal+=card.getPoint(); - } - - //포인트가 16이하여서 한번 더 뽑음 - public void pick(CardDeck cardDeck){ - if(this.dealerTotal=MAX_CARD) - throw new IllegalArgumentException("받을 수 있는 카드 수 초과"); - return false; - } - +//package domain; +//import java.util.ArrayList; +//import java.util.List; +// +//public class Dealer implements Player{ +// +// Cards dealerCards; +// List dealerCardList= new ArrayList<>(); +// private static final int MAX_CARD=3; +// +// +// public Dealer() { +// dealerCards = new Cards(dealerCardList); +// } +// public Dealer(Cards dealerCards){ +// this.dealerCards=dealerCards; +// } // @Override -// public boolean equals(Object o) { -// if (this == o) return true; -// if (!(o instanceof Dealer)) return false; -// Dealer dealer = (Dealer) o; -// return dealer_cards.equals(dealer.dealer_cards) && -// rule.equals(dealer.rule); +// public Cards openCard(){ +// return dealerCards; // } // // @Override -// public int hashCode() { -// return Objects.hash(dealer_cards, rule); +// public void addCard(CardDeck cardDeck){ +// if(dealerCards.getCards().size() gamerCards; - public int gamerTotal; - - public Gamer(List gamercards) { - this.gamerCards = gamercards; - this.gamerTotal=0; - } - @Override - public List openCard(){ - return gamerCards; - } - public void firstPick(CardDeck cardDeck){ - gamerCards.add(cardDeck.pickAndRemove()); - gamerCards.add(cardDeck.pickAndRemove()); - total(gamerCards); - } - @Override - public void total(List cards){ - cards=gamerCards; - for(Card card:cards) { - this.gamerTotal += card.getPoint(); - } - } - public void pick(CardDeck cardDeck){ - gamerCards.add(cardDeck.pickAndRemove()); - this.gamerTotal+=gamerCards.get(lastCardIndex()).getPoint(); - - } - - private int lastCardIndex(){ - return gamerCards.size()-1; - } -} +//package domain; +// +// +//import java.util.ArrayList; +//import java.util.List; +// +//public class Gamer implements Player{ +// Cards gamerCards; +// List gamerCardList= new ArrayList<>(); +// private static final int MAX_CARD=3; +// private static final int BOUNDARY_VALUE=17; +// +// public Gamer() { +// gamerCards = new Cards(gamerCardList); +// } +// public Gamer(Cards gamerCards){ +// this.gamerCards=gamerCards; +// } +// @Override +// public Cards openCard(){ +// return gamerCards; +// } +// @Override +// public void addCard(CardDeck cardDeck){ +// gamerCards.toList(cardDeck.pick()); +// } +// @Override +// public void firstPick(CardDeck cardDeck){ +// gamerCards.toList(cardDeck.pick()); +// gamerCards.toList(cardDeck.pick()); +// System.out.println("Gamer First Point: "+gamerCards.getCards().get(0).getPattern().getScore()); +// System.out.println("Gamer Second Point: "+gamerCards.getCards().get(1).getPattern().getScore()); +// } +//} diff --git a/src/main/java/domain/Pattern.java b/src/main/java/domain/Pattern.java new file mode 100644 index 0000000..a5bdbec --- /dev/null +++ b/src/main/java/domain/Pattern.java @@ -0,0 +1,32 @@ +package domain; + +public enum Pattern { + ACE(1, "A"), + TWO(2, "2"), + THREE(3, "3"), + FOUR(4, "4"), + FIVE(5, "5"), + SIX(6, "6"), + SEVEN(7, "7"), + EIGHT(8, "8"), + NINE(9, "9"), + TEN(10, "10"), + JACK(10, "J"), + QUEEN(10, "Q"), + KING(10, "K"); + + private int score; + private String name; + + Pattern(int score, String name) { + this.score = score; + this.name = name; + } + public int getScore() { + return score; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index 80e6d1e..11ca5c0 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -1,10 +1,8 @@ package domain; - import java.util.List; public interface Player { - public List openCard(); + public Cards openCard(); public void firstPick(CardDeck cardDeck); - public void total(List cards); - + public void addCard(CardDeck cardDeck); } diff --git a/src/main/java/domain/Rule.java b/src/main/java/domain/Rule.java index 815a173..971c505 100644 --- a/src/main/java/domain/Rule.java +++ b/src/main/java/domain/Rule.java @@ -1,35 +1,38 @@ -package domain; - -public class Rule { - public int dealerPoint; - public int gamerPoint; - - public Rule() { - this.dealerPoint = 0; - this.gamerPoint = 0; - } - public void Winner(Dealer dealer,Gamer gamer){ - dealerPoint=dealer.dealerTotal; - gamerPoint=gamer.gamerTotal; - for(Card card: dealer.dealerCards) - System.out.println(card.getPoint()); - if(dealerPoint>21) - dealerPoint=0; - if(gamerPoint>21) - gamerPoint=0; - if(dealerPoint>gamerPoint) - System.out.println("Dealer is winner"); - else if(dealerPoint==gamerPoint) { - System.out.println("Draw"); - } - else { - System.out.println("Gamer is winner"); - } - } - private int calcPoint(int point){ - if(point>21) - return -1; - else - return point; - } -} +//package domain; +//public class Rule { +// private static final int BOUNDARY_VALUE=17; +// public void winner(Dealer dealer,Gamer gamer){ +// int dealerPoint=sumOfcard(dealer.openCard()); +// int gamerPoint=sumOfcard(gamer.openCard()); +// System.out.println("dealerPoint: "+dealerPoint); +// System.out.println("gamerPoint: "+gamerPoint); +// if(gamerPoint>dealerPoint) +// System.out.println("Gamer is winner"); +// else if(gamerPoint==dealerPoint) +// System.out.println("Draw"); +// else +// System.out.println("Dealer is winner"); +// } +// +// public int sumOfcard(Cards cardList){ +// int sum=0; +// for(int i=0;i21) +// return -1; +// else return sum; +// } +//} diff --git a/src/test/java/domain/CardDeckTest.java b/src/test/java/domain/CardDeckTest.java index 36397bf..a37f9c4 100644 --- a/src/test/java/domain/CardDeckTest.java +++ b/src/test/java/domain/CardDeckTest.java @@ -1,51 +1,31 @@ package domain; -import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.junit.runners.Parameterized; import java.util.ArrayList; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertSame; - public class CardDeckTest { - - @ParameterizedTest - @ValueSource(strings = {"SPADE","HEART","DIAMOND","CLUB"}) - @DisplayName("Carddeck") - public void Carddeck(String pattern){ - String character; - CardDeck cardDeck = new CardDeck(); - List cards=new ArrayList<>(); - for (int i = 0; i < 14; i++) { - if (i == 0) - character = "A"; - else if (i == 11) - character = "J"; - else if (i == 12) - character = "Q"; - else if (i == 13) - character = "K"; - else - character = String.valueOf(i); - Card card = new Card(CardShape.valueOf(pattern),character); - cards.add(card); - cardDeck.addCard(card); - } + //카드 섞는 것 + @Test + void CardShuffleTest(){ + List cardList = new ArrayList<>(); + Cards cards = new Cards(cardList); + CardDeck cardDeck = new CardDeck(cards); + System.out.println(cards.getCards().get(0).getCardShape().getShape()); + System.out.println(cards.getCards().get(0).getPattern().getName()); //cards안의 list자체가 섞임 } + //카드 뽑고 제거 @Test - @DisplayName("카드 뽑은 후 삭제") - void RemoveTest(){ - CardDeck cardDeck = new CardDeck(); - Card card = cardDeck.pickAndRemove(); - System.out.println(card.getPattern()); - System.out.println(card.getCharacter()); - assertEquals(cardDeck.getCards().contains(card),false); + void cardPickTest(){ + List cardList = new ArrayList<>(); + Cards cards = new Cards(cardList); + CardDeck cardDeck = new CardDeck(cards); + Card card = cardDeck.pick(); + Assertions.assertEquals(cards.getCards().contains(card),false); } + } diff --git a/src/test/java/domain/CardsTest.java b/src/test/java/domain/CardsTest.java new file mode 100644 index 0000000..aadecb3 --- /dev/null +++ b/src/test/java/domain/CardsTest.java @@ -0,0 +1,26 @@ +package domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CardsTest { + + @Test + @DisplayName("Make Cards") + void createCard(){ + List cardList= new ArrayList<>(); + Cards cards = new Cards(cardList); + assertEquals(cardList.size(),52); + for(int i=0;icards = new ArrayList<>(); - Dealer dealer = new Dealer(cards); - dealer.firstPick(cardDeck); //카드 2장을 뽑음 - dealer.pick(cardDeck); // 이 함수 자체가 카드 포인트가 16이하인지 판단하고 16이하면 한장 더뽑고 아니면 안뽑는 함수 - for(int i = 0; i cards = new ArrayList<>(); - Dealer dealer = new Dealer(cards); - dealer.firstPick(cardDeck); - dealer.firstPick(cardDeck); - IllegalArgumentException ex = assertThrows( - IllegalArgumentException.class,()->dealer.isOverCardSize() - ); - assertTrue(ex.getMessage().contains("받을 수 있는 카드 수 초과")); - } -} +//package domain; +// +//import org.junit.jupiter.api.DisplayName; +//import org.junit.jupiter.api.Test; +// +//import java.util.ArrayList; +//import java.util.List; +// +//import static org.junit.jupiter.api.Assertions.assertThrows; +//import static org.junit.jupiter.api.Assertions.assertTrue; +// +//public class DealerTest { +// +// @Test +// @DisplayName("카드 2장을 뽑고 계산") +// void pickCard(){ +// CardDeck cardDeck = new CardDeck(); +// Listcards = new ArrayList<>(); +// Dealer dealer = new Dealer(cards); +// dealer.firstPick(cardDeck); //카드 2장을 뽑음 +// dealer.pick(cardDeck); // 이 함수 자체가 카드 포인트가 16이하인지 판단하고 16이하면 한장 더뽑고 아니면 안뽑는 함수 +// for(int i = 0; i cards = new ArrayList<>(); +// Dealer dealer = new Dealer(cards); +// dealer.firstPick(cardDeck); +// dealer.firstPick(cardDeck); +// IllegalArgumentException ex = assertThrows( +// IllegalArgumentException.class,()->dealer.isOverCardSize() +// ); +// assertTrue(ex.getMessage().contains("받을 수 있는 카드 수 초과")); +// } +//} diff --git a/src/test/java/domain/GamerTest.java b/src/test/java/domain/GamerTest.java index 620db9f..6505a84 100644 --- a/src/test/java/domain/GamerTest.java +++ b/src/test/java/domain/GamerTest.java @@ -1,26 +1,26 @@ -package domain; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class GamerTest { - @Test - @DisplayName("게이머 카드 뽑기") - void gamerCardPick(){ - CardDeck cardDeck = new CardDeck(); - List cards = new ArrayList<>(); - Gamer gamer = new Gamer(cards); - gamer.firstPick(cardDeck); - for(int i=0;i cards = new ArrayList<>(); +// Gamer gamer = new Gamer(cards); +// gamer.firstPick(cardDeck); +// for(int i=0;i dealerCardlist=new ArrayList<>(); - List gamerCardList = new ArrayList<>(); - Dealer dealer=new Dealer(dealerCardlist); - Gamer gamer=new Gamer(gamerCardList); - Rule rule=new Rule(); - gamer.firstPick(cardDeck); - dealer.firstPick(cardDeck); - dealer.pick(cardDeck); - rule.Winner(dealer,gamer); - } -} +//package domain; +// +//import org.junit.jupiter.api.DisplayName; +//import org.junit.jupiter.api.Test; +// +//import java.util.ArrayList; +//import java.util.List; +// +//public class RuleTest { +// +// @Test +// @DisplayName("게임 승리자") +// public void winnerTest(){ +// CardDeck cardDeck = new CardDeck(); +// List dealerCardlist=new ArrayList<>(); +// List gamerCardList = new ArrayList<>(); +// Dealer dealer=new Dealer(dealerCardlist); +// Gamer gamer=new Gamer(gamerCardList); +// Rule rule=new Rule(); +// gamer.firstPick(cardDeck); +// dealer.firstPick(cardDeck); +// dealer.pick(cardDeck); +// rule.Winner(dealer,gamer); +// } +//}