그동안 배운 것들 응용해서 게임 만들기

메시지 찾기 게임

대략 짜본 Flow chart..

서방 생일이 얼마 남지 않아 만들어본 생일축하”코드”ㅋㅋ
더럽고 치사해도 생일축하 메시지 보려면 승리해야 한다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

1


예외처리

2


숫자맞추기 게임 코드

3


블랙잭 디버깅

유저 리스트 값을 계산하지 않는 문제가 있었음

수정

4

5


드디어 Win..

테스트한다고 돌려보는데 왜 내가 열받지????????ㅠㅠㅋㅋㅋ

5

이제 메시지만 쓰면 끗..!


Final Code

import random

import ascii


def rcp_game():
  #가위, 바위, 보 게임
  game_images = [ascii.scissors, ascii.rock, ascii.paper]
  
  while True:  
      while True:  
          try:
              user_choice = int(input("가위는 0, 바위는 1, 보는 2를 누르세용~ : "))
  
              if user_choice >= 3 or user_choice < 0:
                  print("누르라는 것만 누르세욧!")
                  continue
              else:
                  break  
          except ValueError:  
              print("누르라는 것만 누르세욧!")
              continue
  
      print(game_images[user_choice])
  
      computer_choice = random.randint(0, 2)
      print("DAHNA : 나도 가위,바위,보!")
      print(game_images[computer_choice])
  
      if user_choice == 0 and computer_choice == 2:
          print("축하합니다! 첫번째 관문 통과🥳")
          break
      elif computer_choice == 0 and user_choice == 2:
          print("지셨네용🤪 이길 때까지~")
          
      elif computer_choice > user_choice:
          print("저런, 지셨네용🥺 다시~")
          
      elif user_choice > computer_choice:
          print("축하합니다! 첫번째 관문 통과🥳")
          break
      elif computer_choice == user_choice:
          print("어머 비겼내 함 더?🤭")



def guess_num():
    #숫자 맞추기 게임
  game_over = False
  while not game_over:
    
    correct_number = random.randint(1, 100)
    attempts = 10 
  
    print("제가 1부터 100까지 어떤 숫자를 생각하고 있는지 10번 안으로 맞춰 보세용~ 🤔")
  
    for attempt in range(attempts):
        try:
            guess = int(input(f" {attempts - attempt}번의 기회가 있습니다. 숫자를 입력하세용 : "))
  
            if guess < correct_number:
                print("더 높은 숫자예요 😏")
            elif guess > correct_number:
                print("더 낮은 숫자예요 😜")
            else:
                print(f"오 😮 {attempt + 1}번만에 숫자를 맞추셨군요. 두번째 관문도 통과 🥳")
                game_over = True
                break
  
        except ValueError:  # 숫자가 아닌 다른 것을 입력했을 때의 예외 처리
            print("1부터 100까지의 숫자만 입력하셔야 해용!🥺")
          
    # 10번의 기회를 모두 사용한 후
    if not game_over:
      print(f"10번의 기회가 끝났어요 😭 정답은 {correct_number}였습니다. 다시 고고~")


#블랙잭

def deal_card():
  cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
  card = random.choice(cards)
  return card

def calculate_score(cards):
  if sum(cards) == 21 and len(cards) == 2:
    return 0
  if 11 in cards and sum(cards) > 21:
    cards.remove(11)
    cards.append(1)
  
  return sum(cards)


def compare(user_score, computer_score):
  if user_score == computer_score:
    return "비겼당🤗 비겼는데 처음으로 돌아가는 건 좀 너무하죠? 그래도 어쩔 수 엄서요 🥺 "
  elif computer_score == 0:
    return "제가 블랙잭입니다! 지셨네유ㅠ"
  elif user_score == 0:
    return "블랙잭이군요! 축하합니당 뿌뿌 🥳"
  elif user_score > 21:
    return "버스트네요~ You lose! 다시 처음으로 흙흙"
  elif computer_score > 21:
    return "제가 버스트네요ㅠ 이기셨습니다 축하해용 🥹 🥳"
  elif user_score > computer_score:
    return "저보다 21에 근접하셨네요 추카추카츄 🥳"
  else:
    return "제가 21에 더 근접했어요 아쉽지만 첨으루 빠빠~👋"

def play_game():

  print(ascii.logo)
  
  user_cards = []
  computer_cards = []
  is_game_over = False
  
  for _ in range(2):
    user_cards.append(deal_card())
    computer_cards.append(deal_card())
  
  while not is_game_over:    
    user_score = calculate_score(user_cards)
    computer_score = calculate_score(computer_cards)
    print(f" 당신의 카드 : {user_cards}, 현재 점수는: {user_score}")
    print(f" 힌트로 내 첫번째 카드 보여줄게욥 👀 : {computer_cards[0]}")
    
    if user_score == 0 or computer_score == 0 or user_score > 21:
      is_game_over = True
    else:
      while True:
        user_should_deal = input("카드를 더 뽑으실 거면 'y', 아니면 'n'를 입력해주세용 ").lower()
        
        if user_should_deal == "y":
          user_cards.append(deal_card())
          user_score = calculate_score(user_cards)
          break
        elif user_should_deal == "n":
          is_game_over = True
          break
        else:
          print("y나 n만 써요!")
        
  while computer_score != 0 and computer_score < 17:
    if len(computer_cards) < len(user_cards):
      computer_cards.append(deal_card())
      computer_score = calculate_score(computer_cards)
    else:
      break
  
  print(f" 당신의 마지막 덱: {user_cards}, 카드 총 합은: {user_score}")
  print(f" 내 마지막 덱: {computer_cards}, 카드 총 합은: {computer_score}")
  result = compare(user_score, computer_score)
  print(result)
  return result


answer_1 = input("당신의 생일축하메시지는 어딘가 숨겨져 있습니다. 찾아보시겠어용?🤪 Yes or No : ").lower()

if answer_1 == "no":
  print("흥. 그럼 이만 빠잉 😠")
  
elif answer_1 == "yes":
  print(ascii.treasure)
  print("환영합니다 🤗\n어떻게든 축하받기 위해 번거롭지만 세가지 게임을 통과해야 합니다.")
  while True:
    print("첫번째 게임! 가위✌️ 바위✊ 보🖐️")
    rcp_game()
    print("두번째 게임으로 넘어갑니다.")
    guess_num()
    print("다음은 최고 난이도인 블랙잭 게임에서 승리하셔야 합니다. \n룰을 모르신다고요? 구글링하고 오세요!ㅋㅋ \n마지막 관문이자 최고 난이도인 만큼 실패시 처음으로 돌아가게 됩니다. \n굿럭🍀")
    input("준비되셨으면 엔터키를 누르세요 😎")
    result = play_game()

    if result in ["비겼당🤗 비겼는데 처음으로 돌아가는 건 좀 너무하죠? 그래도 어쩔 수 엄서요 🥺 ","제가 블랙잭입니다! 지셨네유ㅠ","버스트네요~ You lose! 다시 처음으로 흙흙","제가 21에 더 근접했어요 아쉽지만 첨으루 빠빠~👋"]:
      continue
    else:
      break
  
  input("축하합니다!🥳😍 모든 관문을 통과하고 드디어 메시지를 확인할 수 있어요!ㅋㅋ 엔터키를 눌러주세요~")
  print(ascii.birthday)
  
else:
  print("Yes나 No로만 대답하세욧!")