python-21點小遊戲(簡單版,不需要random函式)

雅人-喪士發表於2020-10-06

利用set集合的無序性替代random隨機,只是簡單的實現,可以在這個基礎上升級成多人版本,Python還是剛剛學習階段,主要參考實現就好,不要介意我的板書(程式碼很亂)。

#牌面列表
paimian = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
#花色列表
huase = ['♦','♣','♥','♠']
#玩家1和玩家2的空列表
play1 = list()
play2 = list()
#利用set集合的字串無序不重複代替random
paiset = set()
#牌的順序的空列表
pailist = list()
#初始化set集合將元素追加到list列表中
for i in range(52):
    paiset.add(str(i))
for i in paiset:
    pailist.append(i)
#先給玩家1和玩家2的列表追加兩張牌
play1.append(int(pailist[0]))
play1.append(int(pailist[1]))
play2.append(int(pailist[2]))
play2.append(int(pailist[3]))
'''
printpai函式用於列印當前玩家的牌的資訊
'''
def printpai(play1,play2):
    print("play1:",end="  ")
    for i in play1:
        pm = int(i % 12)
        hs = int((i+1) % 4)
        print(paimian[pm] + huase[hs],end=" ")
    print("\nplay2:",end="  ")
    for i in play2:
        pm = int(i % 12)
        hs = int((i+1) % 4)
        print(paimian[pm] + huase[hs], end=" ")
'''
judge函式用於結算最終玩家的點數
'''
def judge():
    print("\n______________________")
    jp1 = [0,0]
    flag1 = False
    jp2 = [0,0]
    flag2 = False
    #判斷玩家1是否含有A,若含有A則有兩種點數
    for i in play1:
        if i % 12 == 0:
            jp1[0]+=1
            jp1[1]+=11
            flag1 = True
        else:
            jp1[0]+=((i%12)+1)
            jp1[1]+=((i%12)+1)
    #用python的三元運算子新增是否爆點的字串
    x1 = "(爆點)" if jp1[0]>21 else ""
    x2 = "(爆點)" if jp1[1]>21 else ""
    #如果有A則列印兩個點數,若沒有,列印一個
    if flag1:
        print("玩家1的點數為"+str(jp1[0])+"點"+x1+"或"+str(jp1[1])+"點"+x2)
    else:
        print("玩家1的點數為"+str(jp1[0])+"點"+x1)
    #判斷玩家2是否含有A,若含有A則有兩種點數
    for i in play2:
        if i % 12 == 0:
            jp2[0]+=1
            jp2[1]+=11
            flag2 = True
        else:
            jp2[0]+=((i%12)+1)
            jp2[1]+=((i%12)+1)
    #用python的三元運算子新增是否爆點的字串
    y1 = "(爆點)" if jp2[0]>21 else ""
    y2 = "(爆點)" if jp2[1]>21 else ""
     #如果有A則列印兩個點數,若沒有,列印一個
    if flag2:
        print("玩家2的點數為"+str(jp2[0])+"點"+y1+"或"+str(jp2[1])+"點"+y2)
    else:
        print("玩家2的點數為"+str(jp2[0])+"點"+y1)
'''
init函式用於進行遊戲的邏輯判斷,是主方法
'''
def init():
    #列印規則
    print("-------遊戲規則-------")
    print("---A可看做1點或11點---")
    print("--------21點---------")
    #列印當前玩家手牌資訊
    printpai(play1, play2)
    #遊戲進行,詢問玩家是否還要新增牌
    flag1 = True
    flag2 = True
    index = 4
    print("\n------------------")
    while flag1:
        iscon = input("\nplay1--是否還要牌(Y or N):")
        if iscon == "Y" or iscon == "y":
            play1.append(int(pailist[index]))
            index += 1
            printpai(play1,play2)
        else:
            printpai(play1,play2)
            flag1 = False
    print("\n----------------")
    while flag2:
        iscon = input("\nplay2--是否還要牌(Y or N):")
        if iscon == "Y" or iscon == "y":
            play2.append(int(pailist[index]))
            index += 1
            printpai(play1,play2)
        else:
            printpai(play1,play2)
            flag2 = False
init()
#若init函式執行完畢,呼叫judge判斷最終結果
judge()

執行結果:
在這裡插入圖片描述
在這裡插入圖片描述

相關文章