관련 순서도, 알고리즘은 아래의 게시글을 참고하면 된다.
https://olivia-blackcherry.tistory.com/89
1단계 알고리즘은
블랙잭 게임에서 아래의 두 가지 규칙을 제외했다.
5번 에이스의 역할 (1,11)
6번 블랙잭 외치기 (21)
<게임 규칙>
1. 베팅을 한 후 모든 플레이어와 딜러는 두 장의 카드를 받습니다.
2. 딜러는 자신의 카드 중 한 장을 오픈합니다.
3. 딜러는 카드의 합이 17이 될 때까지 반드시 추가 카드를 뽑아야 합니다.
4. 플레이어는 카드의 합이 21을 넘지 않는 범위 내에서 추가 카드를 받을 수도(Hit),받지 않을 수도(Stand)있습니다.
5. 새로 받은 카드가 에이스라면 1, 11 중 딜러와 플레이어에게 유리하게 자동으로 선택되어 계산된다.
6. 이긴 사람의 점수가 21이거나, 비겼을 때 점수가 21이라면 "블랙잭"을 외친다.
# 정보 포함
# 카드 뽑기
import random
list = [ 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
my_pick = random.sample(list, 2)
dealer_pick = random.sample(list, 2)
dealer_show_card = random.choice(dealer_pick)
print(f"나의 카드는 {my_pick}입니다")
print("#딜러 카드는:", dealer_pick)
print(f"#딜러 카드 중 한 장은 {dealer_show_card}입니다")
# 내 점수, 딜러 점수
def score_sum(card_pick):
sum=0
for card in card_pick:
sum +=card
return sum
my_score = score_sum(my_pick)
dealer_score = score_sum(dealer_pick)
print(f"내 점수는 {my_score}입니다")
print("#딜러 점수는:", dealer_score)
# 딜러 점수[1~16] < 17이면 카드 한장 더 받고 합계 다시 계산하기
if dealer_score < 17:
a = True
while a:
one_more_card = random.sample(list, 1)
dealer_pick.extend(one_more_card)
dealer_score = score_sum(dealer_pick)
print("#새로운 딜러의 카드:", dealer_pick)
print("#새로운 딜러 점수:", dealer_score)
if dealer_score >16:
a = False
# 승자 뽑기
def winner(my_score, dealer_score):
if my_score > dealer_score:
print("이김")
elif my_score == dealer_score:
print("비김")
else:
print("짐")
# stand? or hit?
def decision(my_score, dealer_score):
stand_hit = input("stand 할 것인가? hit 할 것인가?")
keep_going = True
while keep_going:
if stand_hit == "stand":
if dealer_score >21:
print("이김")
keep_going = False
else:
winner(my_score, dealer_score)
keep_going= False
elif stand_hit == "hit":
one_more_card = random.sample(list, 1)
my_pick.extend(one_more_card)
my_score = score_sum(my_pick)
print(f"내가 가진 카드 리스트는 {my_pick}입니다")
print(f"내 점수는 {my_score}입니다")
if my_score > 21:
print("짐")
keep_going = False
else:
stand_hit = input("stand 할 것인가? hit 할 것인가?")
decision(my_score, dealer_score)
2단계 알고리즘은
에이스의 역할과
블랙잭 외치기를 포함했다.
<게임 규칙>
1. 베팅을 한 후 모든 플레이어와 딜러는 두 장의 카드를 받습니다.
2. 딜러는 자신의 카드 중 한 장을 오픈합니다.
3. 딜러는 카드의 합이 17이 될 때까지 반드시 추가 카드를 뽑아야 합니다.
4. 플레이어는 카드의 합이 21을 넘지 않는 범위 내에서 추가 카드를 받을 수도(Hit),받지 않을 수도(Stand)있습니다.
5. 새로 받은 카드가 에이스라면 1, 11 중 딜러와 플레이어에게 유리하게 자동으로 선택되어 계산된다.
6. 이긴 사람의 점수가 21이거나, 비겼을 때 점수가 21이라면 "블랙잭"을 외친다.
# 정보 포함
# 에이스를 뽑는 경우 포함
# 블랙잭 포함
# 카드 뽑기
import random
list = [ 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10,11,11,11,11,11]
my_pick = random.sample(list, 2)
dealer_pick = random.sample(list, 2)
dealer_show_card = random.choice(dealer_pick)
print(f"나의 카드는 {my_pick}입니다")
print("#딜러 카드는:", dealer_pick)
print(f"#딜러 카드 중 한 장은 {dealer_show_card}입니다")
# 내 점수, 딜러 점수
def score_sum(card_pick):
sum=0
for card in card_pick:
sum +=card
return sum
my_score = score_sum(my_pick)
dealer_score = score_sum(dealer_pick)
print(f"내 점수는 {my_score}입니다")
print("#딜러 점수는:", dealer_score)
# 딜러 점수[1~16] < 17이면 카드 한 장 더 받고 합계 다시 계산하기
# 딜러 점수 >21이면, 만약 새로 받은 한 장이 에이스일 경우에는 에이스 점수를 1로 바꾸고 점수에 따라 와일문 돌리기!
if dealer_score < 17:
a = True
while a:
one_more_card = random.sample(list, 1)
dealer_pick.extend(one_more_card)
dealer_score = score_sum(dealer_pick)
print("#새로운 딜러의 카드:", dealer_pick)
print("#새로운 딜러 점수:", dealer_score)
if dealer_score >16:
if dealer_score >21:
if one_more_card[0] == 11:
dealer_pick.remove(11)
dealer_pick.append(1)
dealer_score = score_sum(dealer_pick)
print("#새로운 딜러의 카드:", dealer_pick)
print("#새로운 딜러 점수:", dealer_score)
if dealer_score > 16:
a = False
else:
a = False
else:
a = False
# 승자 뽑기
def winner(my_score, dealer_score):
if my_score > dealer_score:
if my_score == 21:
print("블랙잭입니다.")
print("이김")
elif my_score == dealer_score:
if my_score == 21:
print("블랙잭입니다.")
print("비김")
else:
if dealer_score == 21:
print("블랙잭입니다.")
print("짐")
# stand? or hit?
def decision(my_score, dealer_score):
stand_hit = input("stand 할 것인가? hit 할 것인가?")
keep_going = True
while keep_going:
if stand_hit == "stand":
if dealer_score >21:
print("이김")
if my_score == 21:
print("블랙잭입니다")
keep_going = False
else:
winner(my_score, dealer_score)
keep_going= False
elif stand_hit == "hit":
one_more_card = random.sample(list, 1)
my_pick.extend(one_more_card)
my_score = score_sum(my_pick)
print(f"내가 가진 카드 리스트는 {my_pick}입니다")
print(f"내 점수는 {my_score}입니다")
if my_score > 21:
if one_more_card[0] == 11:
my_pick.remove(11)
my_pick.append(1)
my_score = score_sum(my_pick)
print(f"내가 가진 카드 리스트는 {my_pick}입니다")
print(f"내 점수는 {my_score}입니다")
stand_hit = input("stand 할 것인가? hit 할 것인가?")
else:
print("짐")
if dealer_score == 21:
print("블랙잭입니다")
keep_going = False
else:
stand_hit = input("stand 할 것인가? hit 할 것인가?")
decision(my_score, dealer_score)
3단계 알고리즘은
사용자에게 게임을 할 것인가를 묻고,
연속적으로 게임을 하거나,
게임을 종료할 수 있는 문구를 넣었다.
이를 위해 전체 코드를 하나의 함수로 묶었다.
# 정보 포함
# 에이스를 뽑는 경우 포함
# 블랙잭 포함
# 사용자에게 게임을 할 것인가 묻는 경우
def blackjack_game():
# 카드 뽑기
import random
list = [ 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
my_pick = random.sample(list, 2)
dealer_pick = random.sample(list, 2)
dealer_show_card = random.choice(dealer_pick)
print(f"나의 카드는 {my_pick}입니다")
print("#딜러 카드는:", dealer_pick)
print(f"#딜러 카드 중 한 장은 {dealer_show_card}입니다")
# 내 점수, 딜러 점수
def score_sum(card_pick):
sum=0
for card in card_pick:
sum +=card
return sum
my_score = score_sum(my_pick)
dealer_score = score_sum(dealer_pick)
print(f"내 점수는 {my_score}입니다")
print("#딜러 점수는:", dealer_score)
# 딜러 점수[1~16] < 17이면 카드 한 장 더 받고 합계 다시 계산하기
# 딜러 점수 >21이면, 만약 새로 받은 한 장이 에이스일 경우에는 에이스 점수를 1로 바꾸고 점수에 따라 와일문 돌리기!
if dealer_score < 17:
a = True
while a:
one_more_card = random.sample(list, 1)
dealer_pick.extend(one_more_card)
dealer_score = score_sum(dealer_pick)
print("#새로운 딜러의 카드:", dealer_pick)
print("#새로운 딜러 점수:", dealer_score)
if dealer_score >16:
if dealer_score >21:
if one_more_card[0] == 11:
dealer_pick.remove(11)
dealer_pick.append(1)
dealer_score = score_sum(dealer_pick)
print("#새로운 딜러의 카드:", dealer_pick)
print("#새로운 딜러 점수:", dealer_score)
if dealer_score > 16:
a = False
else:
a = False
else:
a = False
# 승자 뽑기
def winner(my_score, dealer_score):
if my_score > dealer_score:
if my_score == 21:
print("블랙잭입니다.")
print("이김")
elif my_score == dealer_score:
if my_score == 21:
print("블랙잭입니다.")
print("비김")
else:
if dealer_score == 21:
print("블랙잭입니다.")
print("짐")
# stand? or hit?
def decision(my_score, dealer_score):
stand_hit = input("stand 할 것인가? hit 할 것인가?")
keep_going = True
while keep_going:
if stand_hit == "stand":
if dealer_score >21:
print("이김")
if my_score == 21:
print("블랙잭입니다")
keep_going = False
else:
winner(my_score, dealer_score)
keep_going= False
elif stand_hit == "hit":
one_more_card = random.sample(list, 1)
my_pick.extend(one_more_card)
my_score = score_sum(my_pick)
print(f"내가 가진 카드 리스트는 {my_pick}입니다")
print(f"내 점수는 {my_score}입니다")
if my_score > 21:
if one_more_card[0] == 11:
my_pick.remove(11)
my_pick.append(1)
my_score = score_sum(my_pick)
print(f"내가 가진 카드 리스트는 {my_pick}입니다")
print(f"내 점수는 {my_score}입니다")
stand_hit = input("stand 할 것인가? hit 할 것인가?")
else:
print("짐")
if dealer_score == 21:
print("블랙잭입니다")
keep_going = False
else:
stand_hit = input("stand 할 것인가? hit 할 것인가?")
decision(my_score, dealer_score)
game_going = True
while game_going:
want_game = input("게임을 시작하시겠습니까? Y 아니면 N")
if want_game == "Y":
print("게임을 시작합니다! 행운을 빕니다")
blackjack_game()
else:
print("게임을 종료합니다.")
game_going = False
아래의 재생버튼 ▶을 눌러서 최종 결과를 실행해보세요
+ 추가
새로운 게임을 시작한다면 이전의 화면은 콘솔창에서 삭제되도록 할 수도 있다.
관련 코드는 아래의 게시글을 참고하기를 바란다.
https://olivia-blackcherry.tistory.com/77