-
[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)
카드 딜링 받는것 까지 잘 됐네요
플레이어를 자리에 앉혀야하니 다음장에서는 테이블 클래스 만드는것부터 해보겠습니다.