백엔드/Java

Java로 카드 게임 만들기

짱뚱짱 2024. 10. 1. 17:40

- 카드 클래스를 생성하여 카드 한 장 만들기

- 52장의 카드를 포함하는 카드 묶음 만들기

- 카드를 섞고 나누는 기능

 

📢 개별 카드(card)를 생성하는 클래스

 

숫자 (num): 1부터 13까지의 값. 1은 A, 11은 J, 12는 Q, 13은 K로 표시

모양 (shape): ♦, ♥, ♣, ♠

public class Card {
    private int num;
    private String shape;

    public Card() {
        this.num = 1; // 기본 숫자 A
        this.shape = "♥"; // 기본 모양 ♥
    }

    public void print() {
        System.out.print(shape);
        switch (num) {
            case 1: System.out.print("A "); break;
            case 11: System.out.print("J "); break;
            case 12: System.out.print("Q "); break;
            case 13: System.out.print("K "); break;
            default: System.out.print(num + " "); 
        }
    }

    public void setNum(int num) {
        if (num < 1 || num > 13) {
            this.num = 1;
        } else {
            this.num = num;
        }
    }

    public void setShape(String shape) {
        if ("♦ ♥ ♣ ♠".contains(shape)) {
            this.shape = shape;
        } else {
            this.shape = "♥";
        }
    }
}

 

 

📢 카드 묶음(Card Pack)을 생성하는 클래스

 

- 52장의 카드로 구성.

- 카드 섞기, 카드 나누기, 초기화

public class CardPack {
    private Card[] pack = new Card[52];
    private int cnt = 0;

    public CardPack() {
        String[] shapes = {"♦", "♥", "♣", "♠"};
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <= 13; j++) {
                Card c = new Card();
                c.setShape(shapes[i]);
                c.setNum(j);
                pack[cnt] = c;
                cnt++;
            }
        }
    }

    public void shuffle() {
        for (int i = 0; i < pack.length; i++) {
            int random = (int) (Math.random() * pack.length);
            Card tmp = pack[i];
            pack[i] = pack[random];
            pack[random] = tmp;
        }
    }

    public Card pick() {
        if (cnt == 0) {
            return null;
        }
        cnt--;
        return pack[cnt];
    }

    public void init() {
        cnt = 52;
    }

    public void printCardPack() {
        for (int i = 0; i < pack.length; i++) {
            pack[i].print();
            if ((i + 1) % 13 == 0) {
                System.out.println();
            }
        }
    }
}

 

 

📢 메인 클래스

- 앞서 구현한 Card 클래스와 CardPack 클래스를 활용하여 기본 기능 실행

public class CardMain {
    public static void main(String[] args) {
        // 카드 묶음을 생성하고 섞기
        CardPack cp = new CardPack();
        cp.shuffle();
        cp.printCardPack(); // 섞인 카드 출력

        System.out.println("-----------------");
        System.out.println("딜러가 카드를 나누고 있습니다.");
        
        // 플레이어에게 카드 나누기
        for (int i = 1; i <= 5; i++) {
            System.out.print("player" + i + ": ");
            Card playerCard = cp.pick();
            playerCard.print(); // 나눠준 카드 출력
            System.out.println();
        }
        
        // 카드 초기화 및 다시 섞기
        cp.init();
        cp.shuffle();
        System.out.println("-----------------");
        System.out.println("딜러가 카드를 나누고 있습니다.");
        
        // 다시 플레이어에게 카드 나누기
        for (int i = 1; i <= 5; i++) {
            System.out.print("player" + i + ": ");
            Card playerCard = cp.pick();
            playerCard.print();
            System.out.println();
        }
    }
}

 

 

결과

♦2 ♦J ♦K ♦6 ♦5 ♦3 ♦10 ♣7 ♠A ♥Q ♠6 ♥K ♦8 ♣10 
♥4 ♣5 ♦9 ♥A ♦3 ♠J ♠7 ♣9 ♥9 ♠8 ♣3 ♣8 ♦4 
♠Q ♣2 ♣4 ♦A ♥8 ♥7 ♦5 ♣6 ♥2 ♦2 ♥6 ♠5 ♠4 
♦K ♠2 ♥5 ♥3 ♣A ♠10 ♦Q ♠9 ♦11 ♣J ♦12 ♥Q 

-----------------
딜러가 카드를 나누고 있습니다.
player1: ♥8 
player2: ♦5 
player3: ♠K 
player4: ♣3 
player5: ♥9 

카드를 초기화하고 다시 섞습니다.
-----------------
딜러가 카드를 나누고 있습니다.
player1: ♣10 
player2: ♥2 
player3: ♦Q 
player4: ♠3 
player5: ♥J