天天看點

黑傑克blackjack 遊戲的簡化版(第一個遊戲程式)将四種撲克放進撲克集合裡面 并且引入choice方法産生随機數組

學完了python的基礎篇,大概很多東西都是可以做了,不過一般來說第一個項目都是飛機大戰,由于之前學習C 的時候也做過飛機大戰,于是我想嘗試一下别的項目,就從最簡單的黑傑克開始執行吧。感覺德州撲克和黑傑克的運作原理差不多,都可以使用python自帶的随機抽取函數達到随機抽卡的效果,不需要自己再去建立随機數組了,執行代碼如下,目前是簡化版本,有幾個問題:

1 A+花色牌的問題沒有解決(在黑傑克中,A加任意花牌可以直接獲勝),我覺得可以把花色牌和A分别做兩個集合AB,然後用語句

if (i in A and j in B) or (i in B and j in A)

print(“直接獲勝”)

break

來進行判定。

2 fir_value =random.sample(fir_pockers.items(),1) 這個語句中産生随機抽取的方法會将字典類型的變量變為清單類型,是以後面的通路需要用到通路清單的方法,然後強制為int類型進行值的計算。

3 積分版塊的缺失 不過這個倒是挺容易,直接從 10000分開始,分為 10

20 50 100 200 500 1000幾種籌碼然後記性計算就完事了。

4 關于抽牌重複的問題,這個可以使用pop來進行移除,每次開始執行對将card初始化,防止移除以後牌變少

#定義黑紅梅方四種撲克,heart(紅桃),club(梅花),spade(黑桃),diamond(方片),并且指派。

import random

import time

from random import choice

begain = True

while True:

begain = input(“請輸入開始來開始遊戲或者結束來結束遊戲!:”)

if begain == ‘開始’:

def get_card():

pocker_heart={‘紅a’: 1, ‘紅2’: 2, ‘紅3’: 3, ‘紅4’: 4, ‘紅5’: 5, ‘紅6’:

6, ‘紅7’: 7, ‘紅8’: 8, ‘紅9’: 9, ‘紅10’: 10, ‘紅J’: 10, ‘紅Q’: 10,‘紅K’: 10}

pocker_club={‘梅a’: 1, ‘梅2’: 2, ‘梅3’: 3, ‘梅4’: 4, ‘梅5’: 5, ‘梅6’:

6, ‘梅7’: 7, ‘梅8’: 8, ‘梅9’: 9, ‘梅10’: 10, ‘梅J’: 10, ‘梅Q’: 10,‘梅K’: 10}

pocker_spade={‘黑a’: 1, ‘黑2’: 2, ‘黑3’: 3, ‘黑4’: 4, ‘黑5’: 5, ‘黑6’: 6, ‘黑7’

: 7, ‘黑8’: 8, ‘黑9’: 9, ‘黑10’: 10, ‘黑J’: 10, ‘黑Q’: 10,‘黑K’: 10}

pocker_diamond={‘方a’: 1, ‘方2’: 2, ‘方3’: 3, ‘方4’: 4, ‘方5’: 5, ‘方6’: 6, ‘方7’:

7, ‘方8’: 8, ‘方9’: 9, ‘方10’: 10, ‘方J’: 10,‘方Q’: 10, ‘方K’: 10}

将四種撲克放進撲克集合裡面 并且引入choice方法産生随機數組

pockers = [pocker_club,pocker_diamond,pocker_heart,pocker_spade]
           

#随機第一張卡牌

fir_pockers = choice(pockers)

        fir_value =random.sample(fir_pockers.items(),1)

        for key,value in fir_value:
            value = int(value)
        # print(value,end="  ")
            print(key, end="  ")
            return value

    def player():
        first = get_card()
        second = get_card()
        print()
        sum = first + second
        print(sum)
        return sum
           

#定義玩家的牌

def get_more():

print(“你的牌:”,end="")

hand_cards = player()

#hand_cards = hand_cards

while hand_cards <= 21:

message = input(“你還需要更多的牌嗎?yes\ no:”.lower())

if message == ‘yes’:

print(“再來一張!”)

again = get_card()

time.sleep(1)

hand_cards = again + hand_cards

if hand_cards <= 21:

print(“總分” + str(hand_cards))

continue

else:

print( “BOSS:” + str(hand_cards)+ “你已經原地爆炸了,小老弟!”)

else:
                print("你最終的得分是"+ str(hand_cards))
                break
#print( "你輸定了,小老弟!")
        return hand_cards
           

#定義莊家的牌

def dealer():

print(“莊家的牌:”,end="")

dealer_card = player()

play_point = get_more()

if play_point > 21:

print(“BOSS:你就是個弟弟!”)

elif dealer_card >= play_point:

print(“BOSS:我都還沒動手,你就躺下了。”)

else:
            while dealer_card < play_point:
                print("BOSS:逆",end="")
                time.sleep(0.5)
                print("天",end="")
                time.sleep(0.5)
                print("改",end="")
                time.sleep(0.5)
                print("命!",end="")
                time.sleep(0.5)
                again = get_card()
                dealer_card = dealer_card + again
                if dealer_card < play_point:
                    continue
                elif dealer_card > 21:
                    print("BOSS:"+str(dealer_card)+"點,我怎麼可能會輸!")
                    break
                else:
                    print("BOSS:哎,"+str(dealer_card)+"點,人生寂寞,何人可與我一站!")
                    break

    dealer()
elif input == '結束':

    break
else:
    break
           

後記 以後應該會做德州撲克 不過我需要學習一些python的窗體知識,改善一下界面 ,沒有畫面的程式終究是不成的。不過抽卡的代碼倒是可以直接抄過去 就是定義的字典值需要改一改。

繼續閱讀