728x90
반응형
블랙잭 게임의 코드 작성하기전에 블랙잭의 룰을 먼저 알아보겠다. 간단한 텍스트로 진행되고, 컴퓨터와 1:1 플레이를 할 수 있는 블랙잭 게임이므로 아래의 세가지 룰 정도만 알아두고 적용하면 될 것 같다.
1. 힛(Hit)
- 처음 2장의 상태에서 카드를 더 뽑는 것을 Hit이라고 한다.
- 제스처로는 검지 손가락으로 테이블을 톡 내려주면 된다.
- 21이 되지 않는 한 얼마든지 원하는 만큼 카드를 뽑을 수 있다.
- 반면, 카드의 수 합산이 21이 넘으면 그 즉시 지게 되므로 뽑아서 높은 숫자를 만들되 얼마나 욕심을 부리지 않고 적당한 때에 멈추느냐가 블랙잭의 실력.
- 이 경우는 자신만이 아니라 딜러에게도 해당되어, 자신의 숫자가 낮더라도 딜러는 17 이상이 되기 전까지는 무조건 카드를 더 받아야 하기 때문에(일명 Dealer's hit rule) 21을 넘긴 경우 딜러 버스트가 되어 딜러를 제외한 버스트 되지 않은 모든 플레이어의 승리가 된다.
- 내가 이기지 않아도 딜러가 지면 이기는 게임.
2. 스탠드, 스테이(Stand, Stay)
- 카드를 더 뽑지 않고 차례를 마치는 것을 스탠드, 혹은 스테이라고 부른다.
- 제스처로는 손등이 위로 보이게 해서 손목 스냅을 이용해 테이블을 한번 훑어주는 모션을 취한다.
- 카드의 합이 21을 초과하여 버스트가 되는 상황이 나오지 않는 이상 언제든 멈출 수 있다.
3. 딜러 규칙
- 딜러는 플레이어의 패를 보고 히트할지 스테이할지를 결정할 수 없고, 미리 정해진 규칙에 따라 플레이해야 한다. (딜러가 무조건 기계적으로 플레이하게 만들어, 딜러의 주관적인 게임 개입을 막는 것이 목적이다.)
- 16 이하면 무조건 히트, 17 이상이면 무조건 스테이.
- 플레이어가 15에서 스테이했고, 딜러는 16일 때 : 딜러가 스테이하면 플레이어를 이길 수 있는 상황이지만, 딜러는 의무적으로 버스트의 위험을 감수하고 무조건 히트해야 한다
- 플레이어가 18에서 스테이했고, 딜러는 17일 때 : 딜러가 히트를 해서 A~4 의 카드가 나오면 비기거나 이길 수 있다. 하지만, 딜러는 히트할 수 없고, 스테이해야 한다.
반응형
728x90
위의 규칙을 바탕으로 블랙잭 게임의 코드를 파이썬으로 구현하면,
import random
# 덱 초기화
deck = []
suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
ranks = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
for suit in suits:
for rank in ranks:
deck.append(rank + ' of ' + suit)
# 카드 셔플링 함수
def shuffle_deck():
random.shuffle(deck)
# 카드 한 장 뽑는 함수
def deal_card():
return deck.pop()
# 점수 계산 함수
def calculate_hand(hand):
score = 0
num_aces = 0
for card in hand:
rank = card.split()[0]
if rank == 'Ace':
num_aces += 1
score += 11
elif rank in ['Jack', 'Queen', 'King']:
score += 10
else:
score += int(rank)
while num_aces > 0 and score > 21:
score -= 10
num_aces -= 1
return score
# 게임 실행 함수
def play_game():
print('Welcome to Blackjack!')
shuffle_deck()
player_hand = [deal_card(), deal_card()]
dealer_hand = [deal_card(), deal_card()]
# 플레이어 턴
while True:
print('Player hand:', player_hand)
player_score = calculate_hand(player_hand)
print('Player score:', player_score)
if player_score > 21:
print('Bust! You lose!')
return
elif player_score == 21:
print('Blackjack! You win!')
return
else:
action = input('Do you want to hit or stand? ')
if action == 'hit':
player_hand.append(deal_card())
elif action == 'stand':
break
# 딜러 턴
while True:
print('Dealer hand:', dealer_hand)
dealer_score = calculate_hand(dealer_hand)
print('Dealer score:', dealer_score)
if dealer_score > 21:
print('Dealer bust! You win!')
return
elif dealer_score >= 17:
break
else:
dealer_hand.append(deal_card())
# 결과 비교
if player_score > dealer_score:
print('You win!')
elif player_score == dealer_score:
print('Push!')
else:
print('You lose!')
play_game()
|
아래는 블랙잭 게임코드 실행 화면으로, 딜러 규칙도 잘 적용되어 작동하는 것을 확인할 수 있다.
728x90
반응형
'프로그래밍 > 파이썬' 카테고리의 다른 글
파이썬 - 양력 음력 변환 (입력값 이용) (0) | 2023.03.24 |
---|---|
파이썬 - 양력 음력 변환 (0) | 2023.03.23 |
파이썬 - 슬롯머신 게임 (0) | 2023.03.15 |
파이썬 - 야구게임 (0) | 2023.03.14 |
파이썬 - 음원 MR / Vocal 분리 Spleeter (0) | 2022.11.10 |