블랙잭 게임

김주언·2022년 6월 26일
0

Python

목록 보기
3/3

블랙잭 게임의 룰

딜러가 자신을 포함한 참가자 전원에게 카드 두 장을 나누어주는데, 딜러의 카드 한 장은 상대에게 보이지 않는다. 카드의 합이 딜러보다 먼저 21이 되거나 딜러보다 21에 가깝게 되면 이기고, 카드를 더 받았는데 21을 초과하면 버스트(Bust)된다.

레츠기릿


Blackjack Game

기본값 설정

  • 덱은 무제한
  • 조커는 없음
  • 잭 / 퀸 / 킹은 전부 10으로 계산
  • 에이스는 11이나 1으로 계산
  • cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] 순서는 에이스 ~ 잭, 퀸, 킹
  • 딜러는 컴퓨터

요구사항

  1. 플레이어와 컴퓨터 둘 다 2개의 랜덤 카드를 가지고 시작

  2. 플레이어나 유저가 블랙잭이 되면 이를 감지해야 한다.

  3. 컴퓨터가 블랙잭이면 플레이어 패배 (플레이어도 블랙잭이더라도 패배). 플레이어가 블랙잭이면 플레이어 승리 (컴퓨터가 블랙잭이 아니어야한다.)

  4. 플레이어와 컴퓨터의 카드 값 계산

  5. 에이스를 뽑으면 11로 계산한다. 하지만 11로 계산 시 총합이 21을 초과하는 경우 에이스를 1로 계산한다

  6. 컴퓨터의 첫번째 카드 한장을 플레이어에게 공개

  7. 플레이어의 점수가 21을 초과하거나, 플레이어 또는 컴퓨터가 블랙잭 달성 시 즉시 게임 종료

  8. 플레이어에게 카드를 한장 더 뽑을지 묻기

  9. 플레이어가 카드를 더 이상 뽑지 않는다고 할 경우 컴퓨터가 플레이한다. 컴퓨터는 점수가 16이 넘을 때까지 계속해서 카드를 뽑는다

  10. 플레이어와 컴퓨터의 점수를 비교하여 결과를 판별한다.

  11. 결과 출력

  12. 재시작 여부 묻기

흐름도

이렇게 해줄거시다


구현

import random

cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
user_cards = []
computer_cards = []
isGameOver = False

def deal_card():
  rcard = random.choice(cards)
  return rcard


for _ in range(2) : 
  user_cards.append(deal_card())
  computer_cards.append(deal_card())


def calculate_score(cards):
  total = sum(cards)
  if total == 21:
    return 0
  elif total > 21 :
    for card in cards:
      if card == 11:
        card = 1
    total = sum(cards)
    if total > 21 :
      return total
    return total
  elif total < 21:
    return total
  

def stopGame():
  if user_score == 0:
    print(f"You got a blackjack, YOU WIN!")
    return True
  elif computer_score == 0:
    print(f"Computer got a blackjack, YOU LOSE...")
    return True  
  elif  user_score > 21:
    print("you got over 21, LOSE")
    return True
    
  elif computer_score > 21 :
    print("computer got over 21, YOU WIN")
    return True
  return False 

def compare(user, com):
  print(f"user cards: {user_cards}, computer's cards : {computer_cards}")  
  print(f"user score : {calculate_score(user_cards)}, com score : {calculate_score(computer_cards)}")
  if user > com:
    print("WIN")
  else : 
    print("LOSE")
  return True

  
from art import logo
print(f"{logo}")
print("WELCOME TO THE BLACKJACK GAME!\n\n")


while not isGameOver :
  print(f"your cards: {user_cards}, computer's first card : [{computer_cards[0]}]")
  user_score = calculate_score(user_cards)
  computer_score = calculate_score(computer_cards)
  print(f"user score : {calculate_score(user_cards)}")
  
  if stopGame():
    break;
  
  doDraw = str(input("wanna draw a card from a deck? Type 'y' or 'n' : "))
  
  if doDraw == 'y' :
    user_cards.append(deal_card())

  elif doDraw == 'n' : 
    while computer_score < 17 :
      print("computer is drawing a card...")
      computer_cards.append(deal_card())
      computer_score = calculate_score(computer_cards)
      
    isGameOver = compare(user_score, computer_score)

간단하긔

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글