一、前言:
在我们生活中,平时经常会玩到一些扑克牌游戏,这里就不说名字了。。大家都知道出去大小鬼,一共就四种花色,梅花、方块、红桃、黑桃。然后依次数字从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]}")