ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] 파이썬으로 홀덤게임 만들기
    Programing 2023. 12. 11. 20:30

    앞으로 시간이 날 때마다 파이썬으로 홀덤 게임을 구현해보고자 합니다.

     

    파이썬은 처음 쓰는거라 완성이 안 될수도 있을것 같네요 ㅎㅎ 일부 코드는 빙의 Copilot AI에 도움을 받았습니다.

    # 카드 클래스 정의
    class Card:
        # 카드의 숫자와 무늬를 속성으로 가짐
        def __init__(self, number, suit):
            self.number = number
            self.suit = suit
    
        # 카드의 정보를 문자열로 반환하는 메소드
        def __str__(self):
            return f"{self.number}{self.suit}"
    
        # 카드의 숫자를 정수로 반환하는 메소드
        def get_number(self):
            if self.number == "A":
                return 14
            elif self.number == "K":
                return 13
            elif self.number == "Q":
                return 12
            elif self.number == "J":
                return 11
            else:
                return int(self.number)

    카드 클래스를 정의 해봅니다.

    from Card import Card 
    
    class Deck:
        def __init__(self): 
            self.cards = [] # 숫자와 무늬의 조합으로 카드를 생성하고 덱에 추가 
            
            for number in ["A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2"]: 
                for suit in ["C", "H", "D", "S"]: 
                    card = Card(number, suit) 
                    self.cards.append(card)
            
    
    
        # 덱을 섞는 메소드
        def shuffle(self):
            # 랜덤 모듈을 임포트
            import random
            # 덱의 카드를 랜덤하게 섞음
            print("카드를 섞는중...")
            random.shuffle(self.cards)
    
        # 덱에서 카드를 나눠주는 메소드
        def deal(self):
            # 덱의 맨 위에 있는 카드를 빼고 반환
            return self.cards.pop()

    이번엔 Deck 클래스를 정의합니다.

     

    from Deck import Deck
    
    deck = Deck()
    mycard = deck.deal()
    print(mycard)

     

    pokergame\holdem> python test.py
    2S
    pokergame\holdem> python test.py
    2S

    정상적으로 카드가 잘 배포됐네요 하지만 계속 똑같은 카드가 나오니까 한번 잘 섞이는지도 테스트 해보겠습니다.

     

    from Deck import Deck
    
    deck = Deck()
    deck.shuffle()
    mycard = deck.deal()
    print(mycard)
    $ python test.py
    카드를 섞는중...
    6S
    $ python test.py
    카드를 섞는중...
    2D

    잘 섞이는 군요

     

    그러면 이번엔 플레이어 클래스를 만들어보겠습니다.

     

    class Player:
        def __init__(self, name): 
            self.name = name 
            self.cards = [] 
            self.bet = 0 
            self.best_hand = None
            self.stack = 100
    
        # 플레이어의 정보를 문자열로 반환하는 메소드
        def __str__(self):
            return f"{self.name}: {self.cards[0]}, {self.cards[1]}, (가진스택 {self.stack})"
    
        # 플레이어가 카드를 받는 메소드
        def receive_card(self, card):
            # 플레이어의 카드 리스트에 카드를 추가
            if len(self.cards) > 2 : 
                return f"{self.name}: (이)가 카드를 2장 이상 받았습니다."
            
            self.cards.append(card)
    
        # 플레이어가 베팅하는 메소드
        def betting(self, amount):
            if self.stack > amount :
                print("가진 스택보다 큰 금액을 배팅할 수 없습니다. 올인합니다.")
                self.bet = self.stack
            else:
                # 플레이어의 베팅 금액을 업데이트
                print("bet size : " + str(amount))
                self.bet += amount
                # 플레이어의 베팅 금액을 반환
            return self.bet
    
        # 플레이어의 최고의 조합을 설정하는 메소드
        def set_best_hand(self, hand):
            # 플레이어의 최고의 조합을 업데이트
            self.best_hand = hand

    메소드는 카드 딜링받는것 배팅 그리고 베스트핸드를 구하는 메소드를 구현했습니다.

    from Deck import Deck
    from Player import Player
    
    player1 = Player("포발자")
    
    deck = Deck()
    deck.shuffle()
    
    for i in range(2):
        player1.receive_card( deck.deal() )
    
    print(str(player1))

     

    $ python test.py
    카드를 섞는중...
    포발자: JC, 10C, (가진스택 100)
    $ python test.py
    카드를 섞는중...
    포발자: 9S, 3S, (가진스택 100)
    $ python test.py
    카드를 섞는중...
    포발자: 7S, AC, (가진스택 100)
    $ python test.py
    카드를 섞는중...
    포발자: 6S, 9H, (가진스택 100)
    $ python test.py
    카드를 섞는중...
    포발자: KC, QC, (가진스택 100)

     카드 딜링 받는것 까지 잘 됐네요

     

    플레이어를 자리에 앉혀야하니 다음장에서는 테이블 클래스 만드는것부터 해보겠습니다.

     

     

     

Designed by Tistory.