如何用python编写一个简单的扑克游戏

 一、前言:

在我们生活中,平时经常会玩到一些扑克牌游戏,这里就不说名字了。。大家都知道出去大小鬼,一共就四种花色,梅花、方块、红桃、黑桃。然后依次数字从2~10,然后J,Q,K,A。而计算机在专门处理这种有规律的事情方面,就显得得心应手,不管你学的语言是python,java,C还是其他,关键在于发现它的规律与节奏。

细心一点的同学已经发现,这里是没有0和1的。而作为一款游戏,比大小或者最终的胜利当然是要有分数这种机制。这里我们的分数count当然就是从2开始计数(你能保证不把自己绕进去,也可以选择其他数字。。)

说干就干下面上代码

二、生成一副牌

 先创建一个空列表poke_list,随后用for遍历,将各个花色对应的号牌,对应的分数加入这个列表,从而形成一副排除大小鬼的扑克

def yin():
    poke_types= ["♠","♤","♣","♢"]
    poke_nums=[2,3,4,5,6,7,8,9,10,'J','Q','K','A']
    poke_list=[]
    for p_type in poke_types:
        count=2
        for p_num in poke_nums:
            card=[f"{p_type}{p_num}",count]
            count+=1
            poke_list.append(card)
    return poke_list
    #print (poke_list)
#yin() 可删除#号部分调试运行 

三、发牌环节 

 好了,牌已经生成完毕,下面有请我们参与的嘉宾,已经为每个嘉宾进行分配

players=['海马哥哥','汪汪','杭架',"华子","伟哥","老表"]
def blackgirl(pl,pk,pn):
    
    player_dic={}
    for pl in players:
        p_cards=random.sample(pk,pn)

        for card in p_cards:
            pk.remove(card)
        player_dic[pl]=p_cards
        #print(f"为玩家{pl}生成了牌:{p_cards}")
    return player_dic

player_dic=blackgirl(players,pokelist,3)
#print (playdic)

 四、冒泡排序

算法,不多说

def sortlist(datalist):
    length=len(datalist)
    for i in range(length):
        for j in range (length-i-1):
            if datalist[j][1]> datalist[j+1][1]:
                datalist[j],datalist[j+1]=datalist[j+1],datalist[j]
    return datalist

五、完整代码

下面的各个游戏规则,完整代码自己看吧

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'炸金花'

_author_='yinhuarong'

import random

#生成一副牌
def yin():
    poke_types= ["♠","♤","♣","♢"]
    poke_nums=[2,3,4,5,6,7,8,9,10,'J','Q','K','A']
    poke_list=[]
    for p_type in poke_types:
        count=2
        for p_num in poke_nums:
            card=[f"{p_type}{p_num}",count]
            count+=1
            poke_list.append(card)
    return poke_list
    #print (poke_list)
#yin()  

pokelist=yin()
#print (pokelist)
#发牌
players=['海马哥哥','汪汪','杭架',"华子","伟哥","老表"]
def blackgirl(pl,pk,pn):
    
    player_dic={}
    for pl in players:
        p_cards=random.sample(pk,pn)

        for card in p_cards:
            pk.remove(card)
        player_dic[pl]=p_cards
        #print(f"为玩家{pl}生成了牌:{p_cards}")
    return player_dic

player_dic=blackgirl(players,pokelist,3)
#print (playdic)

#游戏规则
#冒泡排序
def sortlist(datalist):
    length=len(datalist)
    for i in range(length):
        for j in range (length-i-1):
            if datalist[j][1]> datalist[j+1][1]:
                datalist[j],datalist[j+1]=datalist[j+1],datalist[j]
    return datalist

#单张
def cal_single(p_cards,score):
    #score=0#初始化得分
    p_cards=sortlist(p_cards)
    weightval=[0.1,1,10]
    count=0
    for card in p_cards:
        score +=card[1]*weightval[count]
        count+=1
    #print (f"计算单牌的结果是:{score}")
    return score

#对子
def cal_pair(p_cards,score):
    p_cards=sortlist(p_cards)
    card_val=[i[1] for i in p_cards]
    if len(set(card_val))==2:
        if card_val[0]==card_val[1]:
            score=(card_val[0]+card_val[1])*50+card_val[2]
        else:
            score=(card_val[1]+card_val[2])*50+card_val[0]
    #print(f"计算对子的结果是:{score}")
    return score

#顺子
def cal_str(p_cards,score):
    p_cards=sortlist(p_cards)
    card_val=[i[1] for i in p_cards]
    a,b,c =card_val
    if b-a==1 and c-b ==1:
        score*=100
    #print (f"计算顺子的结果是:{score}")
    return score

#同花
def cal_color(p_cards,score):
    color_val=[i[0][0] for i in p_cards]

    if len(set(color_val))==1:
        score*=1000
    #print (f"计算同花的结果是:{score}")
    return score

#同花顺
def cal_color_str(p_cards,score):
    #判断同花
    color_val=[i[0][0] for i in p_cards]
    if len(set(color_val))==1:
    #判断顺子
        p_cards=sortlist(p_cards)
        card_val=[i[1] for i in p_cards]
        a,b,c = card_val
        if b-a==1 and c-b ==1:
            score*=1000
    #print (f"计算同花顺的结果是:{score}")
    return score


#豹子
def cal_leo(p_cards,score):
    card_val={i[1] for i in p_cards}

    if len(card_val)==1:
        score*=100000
    #print(f"计算豹子的结果是:{score}")
    return score

#比对
calc_func_order=[
    cal_single,
    cal_pair,
    cal_str,
    cal_color,
    cal_color_str,
    cal_leo
    ]
playerScore=[]
for pl,p_cards in player_dic.items():
    print (f"开始计算玩家{pl}的牌:{p_cards}")
    score=0
    for calc_func in calc_func_order:
        score=calc_func(p_cards,score)
    
        playerScore.append([pl,score])
 
playerScore=sortlist(playerScore)     
winner=sortlist(playerScore)[-1]
print (f"恭喜!玩家{winner[0]}获得最终胜利,得分是:{winner[1]}")

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅谷奇才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值