相信大家都玩过或者看别人玩过一个纸牌游戏斗牛,或者也叫牛牛的吧,我们进行就来使用python来实现一下简单的模仿.
请你写一个模拟纸牌斗牛(或者也叫做牛牛)的程序,用以模拟纸牌的生成,洗牌,发牌,点数计算,牌的显示等过程。
附:先完成基本功能,(同花顺 ,五小牛 , 金牛 , 炸弹 , 葫芦 ,同花 ,顺子,倍数)等情况可以先不考虑.
如果牌型大小一样的话,假设算庄家胜,比如同样牛9的牌,算庄家胜。在1庄家3个闲家,每家都押注10块的情况下,试计算连玩10局庄家的输赢值
至于相关的规则我这里简要的讲述一下:
就是每人五张牌,自己进行分堆,分成3,2两堆.三张牌的点数要是10的倍数,然后剩下两张牌的点数之和取个位就是你的牛数,当然如果没有任何三张牌可以凑成10的倍数,那么就是没牛.(JKQ都是按照10来计算,A按照1来计算)
举个例子:
♥2 ♠5 ♦8 ♣J ♥A
我们可以分成
♥2 ♦8 ♣J一堆,♠5 ♥A一堆
那么这幅牌就是牛六
(是不是非常好理解~)
如果还不能理解的,建议自行去百度(没有看不起你的意思hh)
思路讲解:
代码:
import random
import itertools
def initCards():
poker = []
pokers = []
for i in {"梅花", "方块", "红桃", "黑桃"}:
for j in {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "K", "Q"}:
poker.append(i)
poker.append(j)
pokers.append(poker)
poker = []
return pokers
def shuffleCards(pokers):
for i in range(100):
c = random.randint(0, 100)
for j in range(c):
random.shuffle(pokers)
return pokers
player1 = []
player2 = []
player3 = []
playerZhuang = []
def deal(pokers):
for i in range(5):
playerZhuang.append(pokers[0])
player1.append(pokers[1])
player2.append(pokers[2])
player3.append(pokers[3])
pokers = pokers[4:]
def showCards():
print(player1)
print(player2)
print(player3)
print(playerZhuang)
def fmtCards(player):
points = []
for card in player:
if card[-1] == "A":
points.append(1)
elif card[-1] == "J" or card[-1] == "K" or card[-1] == "Q":
points.append(10)
else:
points.append(int(card[-1]))
return points
def calCards(points):
maxN = 0
for i in itertools.combinations(points, 3):
niu = 0
if sum(i) % 10 == 0:
if sum(points) % 10 == 0:
niu = 10
else:
niu = sum(points) % 10
if niu > maxN:
maxN = niu
return maxN
def judge(zhuang, p1, p2, p3):
if zhuang == max(zhuang, p1, p2, p3):
return "庄家获胜"
elif p1 == max(p1, p2, p3):
return "player1获胜"
elif p2 == max(p2, p3):
return "player2获胜"
else:
return "player3获胜"
def clearCards():
player1 = []
player2 = []
player3 = []
playerZhuang = []
def gameStart(time):
cnt = 0
for i in range(time):
clearCards()
cards = initCards()
cards = shuffleCards(cards)
deal(cards)
if judge(calCards(fmtCards(playerZhuang)), calCards(fmtCards(player1)), calCards(fmtCards(player2)), calCards(fmtCards(player3))) == "庄家获胜":
cnt = cnt + 1
gailv = cnt / time * 100
print(f"庄家{time}场获胜概率为{gailv}%")
cards = initCards()
cards = shuffleCards(cards)
deal(cards)
showCards()
p1 = calCards(fmtCards(player1))
p2 = calCards(fmtCards(player2))
p3 = calCards(fmtCards(player3))
zhuang = calCards(fmtCards(playerZhuang))
print(f"玩家1 牛{p1}")
print(f"玩家2 牛{p2}")
print(f"玩家3 牛{p3}")
print(f"庄家 牛{zhuang}")
print(judge(zhuang, p1, p2, p3))
gameStart(10)
新手上路,有错请指正;