Skip to content

feat: 스트림, 람다, Optional 기능구현 #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 36 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7edc850
feat: 익명 클래스를 람다로 전환하기
kimhyunso Aug 26, 2024
551a14d
feat: 람다를 활용해 중복 제거
kimhyunso Aug 26, 2024
03161ea
feat: 람다를 활용하여 중복 제거 기능 구현
kimhyunso Aug 28, 2024
f358e30
numbers 요소들의 sum을 구하는 기능 구현
kimhyunso Aug 28, 2024
a5978f2
feat: 배열 요소에 담긴 모든 숫자 중 3보다 큰 숫자를 2배 한 후 모든 값의 합을 구하는 기능 구현
kimhyunso Aug 28, 2024
b7def54
feat: printLongestWordTop100() 메서드 구현
kimhyunso Aug 28, 2024
6ac23fe
feat: Optional을 활용해 30살 이상 45 이하의 유저가 존재할 경우 true를 리턴하는 기능 구현
kimhyunso Aug 28, 2024
77cf9d8
feat: getUser() 메소드를 stream과 Optional을 활용하여 기능 구현
kimhyunso Sep 1, 2024
9ae4570
feat: Expression의 of메소드 stream활용하여 기능 구현
kimhyunso Sep 1, 2024
9c1975c
feat: computerStore getVersion() 기능 추가
kimhyunso Sep 2, 2024
5971d91
feat: getVersionOptional 기능 구현
kimhyunso Sep 4, 2024
6c7330b
fix: 모두 제거
kimhyunso Sep 4, 2024
2812149
feat: 카드 초기화 기능 추가
kimhyunso Sep 4, 2024
278367d
feat: user 기능 추가
kimhyunso Sep 4, 2024
5b0c22a
fix: 카드 모양 Null 체크 하는 기능 추가
kimhyunso Sep 4, 2024
af14f64
feat: User 기능 추가
kimhyunso Sep 4, 2024
c7b9f63
feat: 유저 이름 중 공백 및 null 허용 금지 기능 추가
kimhyunso Sep 5, 2024
bba7c5e
fix: 유저 이름 중 공백 및 null 허용 금지 기능 수정
kimhyunso Sep 5, 2024
136a073
fix: 메소드 간 공백 제거
kimhyunso Sep 5, 2024
adf2ec4
fix: user기능 수정
kimhyunso Sep 6, 2024
2e2e501
fix: deck 자료구조 수정
kimhyunso Sep 6, 2024
ae74d8b
feat: dealer 추가
kimhyunso Sep 6, 2024
aa921b3
feat: 카드 2장받는 기능 테스트
kimhyunso Sep 6, 2024
34d0c52
fix: 카드 2장받는 기능 테스트
kimhyunso Sep 6, 2024
97365ec
fix: Deck 클래스 수정
kimhyunso Sep 9, 2024
4d5099c
feat: MVC 패턴 적용
kimhyunso Sep 9, 2024
aa8d948
feat: 한장의 카드를 더 받는 view 기능 추가
kimhyunso Sep 9, 2024
060488b
fix: UserController 수정
kimhyunso Sep 9, 2024
e9015a3
fix: users 클래스 수정
kimhyunso Sep 9, 2024
c099753
fix: users 클래스 수정
kimhyunso Sep 9, 2024
c8897a3
fix: view and controller 클래스 수정
kimhyunso Sep 10, 2024
fc35162
feat: 최종수익 view 기능 구현
kimhyunso Sep 10, 2024
a29f63a
fix: 최종 금액 view 기능 구현
kimhyunso Sep 10, 2024
8471b59
fix: 최종수익 기능 수정
kimhyunso Sep 10, 2024
da483fb
fix: 최종 금액 view 기능 구현
kimhyunso Sep 11, 2024
1038cc8
fix:최종 수익 view 수정
kimhyunso Sep 12, 2024
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
38 changes: 38 additions & 0 deletions BACKJAC_README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
블랙잭 게임을 변형한 프로그램을 구현한다.

블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21 또는 21에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다.

- 카드 덱
♠♥♦♣ 네 수트(문양)
A, 2, 3, 4, 5, 6, 7, 8, 9, 10 + 잭(J, Jack), 퀸(Q, Queen), 킹(K, King) 메이저 카드 = 52장 + 조커 2장 = 54장

- Deck
1. spadeCard = 13장 + 조커 1장 [v]
- cardlist
2. heartCard = 13장 + 조커 1장 [v]
- cardlist
3. diamondCard = 13장 [v]
- cardlist
4. cloverCard = 13장 [v]
- cardlist

- 셔플기능 [v]

- player
1. UserA [v]
2. UserB [v]
3. dealer [v]

- 10000 -> 1칩이라고 가정

1. 플레이어는 게임을 시작할 때 배팅 금액을 정해야 한다.
2. 카드의 숫자 계산은 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다. [v]
3. 게임을 시작하면 플레이어는 두 장의 카드를 지급 받으며, 두 장의 카드 숫자를 합쳐 21을 초과하지 않으면서 21에 가깝게 만들면 이긴다.
4. 21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. 단, 카드를 추가로 뽑아 21을 초과할 경우 배팅 금액을 모두 잃게 된다.
5. 처음 두 장의 카드 합이 21일 경우 블랙잭이 되면 베팅 금액의 1.5 배를 딜러에게 받는다. 딜러와 플레이어가 모두 동시에 블랙잭인 경우 플레이어는 베팅한 금액을 돌려받는다.
6. 딜러는 처음에 받은 2장의 합계가 16이하이면 반드시 1장의 카드를 추가로 받아야 하고, 17점 이상이면 추가로 받을 수 없다.
7. 딜러가 21을 초과하면 그 시점까지 남아 있던 플레이어들은 가지고 있는 패에 상관 없이 승리해 베팅 금액을 받는다.




5 changes: 5 additions & 0 deletions STREAM_README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
1. 단어의 길이가 12자를 초과하는 단어를 추출한다.
2. 12자가 넘는 단어 중 길이가 긴 순서로 100개의 단어를 추출한다.
3. 단어 중복을 허용하지 않는다. 즉, 서로 다른 단어 100개를 추출해야 한다.
4. 추출한 100개의 단어를 출력한다. 모든 단어는 소문자로 출력해야 한다.

13 changes: 13 additions & 0 deletions src/main/java/nextstep/blackjac/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package nextstep.blackjac;

import nextstep.blackjac.controller.UserController;
import nextstep.blackjac.view.BlackJacView;

public class Main {
private static UserController userController = new UserController();

public static void main(String[] args) {
userController.play();
}

}
47 changes: 47 additions & 0 deletions src/main/java/nextstep/blackjac/card/Card.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package nextstep.blackjac.card;

import java.util.*;

public class Card {
private String cardName;
private String cardShape;
private int cardNumber;

public Card(String cardName, String cardShape, int cardNumber) {
this.cardName = cardName;
this.cardShape = cardShape;
this.cardNumber = cardNumber;
}

public Card(String cardName, String cardShape) {
this.cardName = cardName;
this.cardShape = cardShape;
}

public Card(String cardShape, int cardNumber) {
this.cardShape = cardShape;
this.cardNumber = cardNumber;
}

public int cardNumberTotal(Card card) {
return card.cardNumber;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Card card = (Card) o;
return cardNumber == card.cardNumber && Objects.equals(cardName, card.cardName) && Objects.equals(cardShape, card.cardShape);
}

@Override
public int hashCode() {
return Objects.hash(cardName, cardShape, cardNumber);
}

@Override
public String toString() {
return cardNumber + cardShape;
}
}
56 changes: 56 additions & 0 deletions src/main/java/nextstep/blackjac/card/CardDeck.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package nextstep.blackjac.card;


import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CardDeck {
private SpadeCard spadeCardDeck;
private HeartCard heartCardDeck;
private DiamondCard diamondCardDeck;
private CloverCard cloverCardDeck;
private Stack<Card> cardDeck;

public CardDeck() {
spadeCardDeck = new SpadeCard("spade");
heartCardDeck = new HeartCard("heart");
diamondCardDeck = new DiamondCard("diamond");
cloverCardDeck = new CloverCard("clover");
}

public void shuffle() {
List<Card> cardDeck = concat();
Collections.shuffle(cardDeck);
cardDeck = createDeck(cardDeck);
}

private List<Card> concat() {
cardShuffle();
List<Card> shuffleSpadeCardDeck = spadeCardDeck.getCardList();
List<Card> shuffleHeartCardDeck = heartCardDeck.getCardList();
List<Card> shuffleDiamondCardDeck = diamondCardDeck.getCardList();
List<Card> shuffleCloverCardDeck = cloverCardDeck.getCardList();

return Stream.of(shuffleSpadeCardDeck, shuffleHeartCardDeck, shuffleDiamondCardDeck, shuffleCloverCardDeck)
.flatMap(List::stream)
.collect(Collectors.toList());
}

private void cardShuffle() {
spadeCardDeck.shuffle();
heartCardDeck.shuffle();
diamondCardDeck.shuffle();
cloverCardDeck.shuffle();
}

private Stack<Card> createDeck(List<Card> shuffleCard) {
cardDeck = new Stack<Card>();
cardDeck.addAll(shuffleCard);
return cardDeck;
}

public Stack<Card> getCardDeck() {
return cardDeck;
}
}
12 changes: 12 additions & 0 deletions src/main/java/nextstep/blackjac/card/CloverCard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package nextstep.blackjac.card;

public class CloverCard extends Deck {
public CloverCard(String cardShape) {
super(cardShape);
}

@Override
void addJoker() {

}
}
45 changes: 45 additions & 0 deletions src/main/java/nextstep/blackjac/card/Deck.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package nextstep.blackjac.card;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

public abstract class Deck {

protected List<Card> cardList;
protected int cardCount = 13;
protected String cardShape;

protected Deck(String cardShape) {
this.cardShape = Optional.ofNullable(cardShape)
.orElseThrow(() -> new IllegalArgumentException("카드 모양이 잘 못 되었습니다."));
cardList = new ArrayList<>();
init();
addJoker();
}

void init() {
cardList.add(new Card("A", cardShape, 1));
cardList.add(new Card("2", cardShape, 2));
cardList.add(new Card("3", cardShape, 3));
cardList.add(new Card("4", cardShape, 4));
cardList.add(new Card("5", cardShape, 5));
cardList.add(new Card("6", cardShape, 6));
cardList.add(new Card("7", cardShape, 7));
cardList.add(new Card("8", cardShape, 8));
cardList.add(new Card("9", cardShape, 9));
cardList.add(new Card("10", cardShape, 10));
cardList.add(new Card("Jack", cardShape, 10));
cardList.add(new Card("Queen", cardShape, 10));
cardList.add(new Card("King", cardShape, 10));
}

void shuffle() {
Collections.shuffle(getCardList());
}
abstract void addJoker();
public List<Card> getCardList() {
return cardList;
}
}
12 changes: 12 additions & 0 deletions src/main/java/nextstep/blackjac/card/DiamondCard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package nextstep.blackjac.card;

public class DiamondCard extends Deck {
public DiamondCard(String cardShape) {
super(cardShape);
}

@Override
void addJoker() {

}
}
12 changes: 12 additions & 0 deletions src/main/java/nextstep/blackjac/card/HeartCard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package nextstep.blackjac.card;

public class HeartCard extends Deck {
public HeartCard(String cardShape) {
super(cardShape);
}

@Override
void addJoker() {
cardList.add(new Card("Joker", cardShape, 10));
}
}
13 changes: 13 additions & 0 deletions src/main/java/nextstep/blackjac/card/SpadeCard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package nextstep.blackjac.card;

public class SpadeCard extends Deck {
public SpadeCard(String cardShape) {
super(cardShape);
}

@Override
void addJoker() {
cardList.add(new Card("Joker", cardShape, 10));
}

}
47 changes: 47 additions & 0 deletions src/main/java/nextstep/blackjac/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package nextstep.blackjac.controller;

import nextstep.blackjac.card.Card;
import nextstep.blackjac.card.CardDeck;
import nextstep.blackjac.user.User;
import nextstep.blackjac.user.Users;
import nextstep.blackjac.utils.Utils;
import nextstep.blackjac.view.BlackJacView;

import java.util.List;
import java.util.Stack;

public class UserController {

private BlackJacView blackJacView = new BlackJacView();
private CardDeck cardDeck = new CardDeck();
private Users users;
private Stack<Card> shuffleCardDeck;


public void play() {
while (true) {
String names = blackJacView.joinPeople();
List<String> userNames = Utils.splitName(names);
List<Integer> money = blackJacView.batting(userNames);

users = new Users(userNames, money);
List<User> userList = users.getUsers();

cardDeck.shuffle();
shuffleCardDeck = cardDeck.getCardDeck();

users.givenCards(shuffleCardDeck);
blackJacView.givenCard(names, userList);

blackJacView.givenMoreCard(userList, shuffleCardDeck);
blackJacView.finalPayment(userList);

if (blackJacView.endGame()) {
break;
}
}
}



}
6 changes: 6 additions & 0 deletions src/main/java/nextstep/blackjac/domain/Condition.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package nextstep.blackjac.domain;

@FunctionalInterface
public interface Condition {
boolean condition(int x);
}
14 changes: 14 additions & 0 deletions src/main/java/nextstep/blackjac/user/Chip.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package nextstep.blackjac.user;

public class Chip {
private int chip;

public Chip(int chip) {
this.chip = chip;
}
public Chip chip(int chip) {
this.chip = chip;
return this;
}

}
11 changes: 11 additions & 0 deletions src/main/java/nextstep/blackjac/user/Dealer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package nextstep.blackjac.user;

public class Dealer extends User {
private static final String name = "Dealer";
public static final int AUTO_GIVEN_CARD = 16;

public Dealer() {
super(name, UserRole.DEALER);
}

}
Loading