You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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


Deck

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


Stack

카드를 썩은후 맨위부터 한장씩 꺼낸다고 해보자


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

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

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

Deck 구현

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

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

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

Nine of HEARTS
King of DIAMONDS
Two of CLUBS


위 테스트 코드는 무작위의 카드중 맨윗부터 3장을 꺼내기때문에

덱에 포함된 무작위 카드 3장을 뽑는것과 동일하다





  • No labels