建立遊戲流程函數
將遊戲流程建成一個函數play_blackjack(),依序執行:隨機發兩張牌給玩家和莊家、玩家加牌、莊家加牌、判斷贏家。
首先分別為玩家和莊家建立兩個空的牌組:
user_cards = []
dealer_cards = []
使用for迴圈為玩家和莊家隨機發兩張牌,並顯示玩家的牌和莊家的明牌:
for _ in range(2):
user_cards.append(deal_card())
dealer_cards.append(deal_card())
print(f"玩家的牌:{user_cards}")
print(f"莊家的明牌:{dealer_cards[1]}")
使用while迴圈持續詢問玩家是否加牌,直到玩家停止加牌,或點數超過21點:
ask_for_card = ""
while ask_for_card != "n":
ask_for_card = input("輸入y加牌、輸入n看結果:")
if ask_for_card == "y":
user_cards.append(deal_card())
user_points = calculate_points(user_cards)
if user_points > 21:
ask_for_card = "n"
else:
print(f"玩家的牌:{user_cards}")
elif ask_for_card == "n":
user_points = calculate_points(user_cards)
else:
print("請重新輸入!輸入y加牌、輸入n看結果:")
若莊家的牌點數小於17點,則使用while迴圈持續為莊家加牌:
dealer_points = calculate_points(dealer_cards)
while dealer_points < 17:
dealer_cards.append(deal_card())
dealer_points = calculate_points(dealer_cards)
顯示玩家和莊家最後的牌組:
print(f"玩家的牌:{user_cards},共{user_points}點")
print(f"莊家的牌:{dealer_cards},共{dealer_points}點")
根據「遊戲與程式邏輯」一節的規則判斷最後的贏家:
if user_points > 21:
print("你輸了!")
elif dealer_points > 21:
print("你贏了!")
elif user_points == dealer_points:
print("平手!")
elif user_points > dealer_points:
print("你贏了!")
else:
print("你輸了!")
主程式
到目前為止,我們已經將相同功能的單位包裝成函數。主程式的部分,我們呼叫play_blackjack()函數執行遊戲流程,並使用while迴圈持續詢問玩家是否要重新開始,或是結束遊戲。
play_game = True
print("歡迎來到21點遊戲!")
play_blackjack()
while play_game == True:
print("=======================================")
user_input = input("重新進行遊戲?請輸入y開始、輸入n結束:")
if user_input == "y":
play_blackjack()
elif user_input == "n":
play_game = False
print("Bye~")
else:
continue
遊戲畫面
歡迎來到21點遊戲!
玩家的牌:[10, 8]
莊家的明牌:3
輸入y加牌、輸入n看結果:n
玩家的牌:[10, 8],共18點
莊家的牌:[10, 3, 2, 8],共23點
你贏了!
=======================================
重新進行遊戲?請輸入y開始、輸入n結束:y
玩家的牌:[4, 11]
莊家的明牌:2
輸入y加牌、輸入n看結果:y
玩家的牌:[4, 8, 1]
輸入y加牌、輸入n看結果:y
玩家的牌:[4, 8, 1, 10],共23點
莊家的牌:[10, 2, 7],共19點
你輸了!
=======================================
重新進行遊戲?請輸入y開始、輸入n結束:n
Bye~
程式範例