Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

Poker게임에 사용되는 카드 덱을 OOP로 구현해보다구현해보자


Deck

포커1덱은 모양(4) * 랭크(13) = 52 장의 카드로 구성되어져 있다. 

...

이것은 자료구조중 Stack과 닮아 있다. 한장씩 사용할때마다 POP-POP 하면된다.

물론 모습이 닯은것이고, 큐를 사용하던 리스트를 사용하던 꺼집어 내는것만 있기때문에

FIFO(First in First Out) , LIFO( Last in First Out ) 작동방식과는 아무런 상관이 없다.

이게 무슨말인고하니..

접시쌓기를 생각하면된다.  설겆이가 끝난 여러개의 접시를 차례로 쌓았서 정리했다고 해보자

처리가 먼저 끝난 접시는, 제일 밑에 쌓여있기때문에 뽑기가 어렵다. ( 물론 전체 접시를 든후 빼내면된다 )

마지막에 처리된 접시를 가장 먼저 사용이 가능하며 이것을 스택이라고 하고 LIFO 작동방식이라고 보면된다.

카드도 맨아래에 카드를 빼는것보다 일반적으로 맨위에 카드를 사용하는것이 일반적이기 때문에

모습만 닯았다고 표현을하였다. 

Image Added

내가 빙다리 핫바지로 보이냐? : 타짜중 밑장빼기를 저지하는 아귀 - 스택의 규칙을 어기면 큰일난다~


Stack을 이용하는데 밑장을 빼면 성능상 느려지기도 하지만 ( 자료구조상 성능이 늦어진다.) 

룰에도 어긋난다. 그래서 자료구조를 이해하는것은 성능과도 연관이 있다.

Deck 구현

그럼 이것을 자바코드로 실제 구현을 해보자 

Code Block
languagejava
themeEmacs
package game.poker;
import java.util.Collections;
import java.util.Random;
import java.util.Stack;

import game.poker.Card.Suit;

public class Deck
{

    private Stack<Card> cards;
    private Random rand;

    public Deck()
    {
        rand = new Random();
        init();
    }

    public Deck(Random givenGenerator)
    {
        rand = givenGenerator;
        init();
    }

    public Card pop()
    {
        return cards.pop();
    }

    /**
     * Initializes a new deck of 52 cards.
     */
    private void init()
    {
        cards = new Stack<>();
        int index = 0;
        for (int rank = 1; rank <= 13; ++rank)
        {
            cards.push(new Card(rank, Suit.CLUBS));
            cards.push(new Card(rank, Suit.DIAMONDS));
            cards.push(new Card(rank, Suit.HEARTS));
            cards.push(new Card(rank, Suit.SPADES));
        }

        // Todo : Improve Shuffle Rule...
        Collections.shuffle(cards);
    }
}
  • init : 덱을 초기화할때 초기화후 자동으로 썩어준다. /

  • shuffle : 카드를 썩어주는 기능을 한다. 난수발생기를 고오급화하여 적용할수도 있다. 서비스에 실 사용시 난수검증은 중요한 사항이다. ( 이것만 검증하여 인증마크 달아주고 돈을 버는 기업들도 있다.)


Deck Test

Code Block
languagejava
themeEmacs
@Test
public void deckTest(){
    Deck deck = new Deck();
    System.out.println(deck.pop());
    System.out.println(deck.pop());
    System.out.println(deck.pop());
}

...