欢乐斗牛这个游戏应该大多数人都不陌生,而python这个最近一两年比较热门的编程语言,相信点击我这篇文章的朋友一定了解ta。而斗牛和python这一老一新的事物又会碰撞出什么样的火花呢?这篇文章就是利用python写的一个关于斗牛的小程序。
斗牛分为庄家闲家,而游戏的主题就是庄家闲家拼点。所以我就创建了这两个对象,在这之前把牌面总点数的计算、倍率的计算和牌面中最大牌等方法封装成player类。在main函数中进行游戏,加上了判断庄家闲家点数的功能,判断游戏结束的条件,主动改变赌注和主动退出游戏的功能。
斗牛计算点数的规则:如果5张牌中任意3张牌之和为10的倍数,剩下两张牌加起来的点数就是牌面点数,反之牌面的点数为0.
而计算倍率的规则和牌面点数有关,点数为10(即牛牛)时,倍率为3倍;点数为7~9时,2倍的倍率;点数为0~6时,1倍的倍率。而庄闲的点数相同时,需要继续比较各自牌面中最大的牌,一般黑桃K最大,方片A最小。
import itertools
import random
# 牌的总数
def poker_list():
color = ['\u2665', '\u2663', '\u2666', '\u2660']
num_poker = ['A', '2', '3', '4', '5', '6',
'7', '8', '9', '10', 'J', 'Q', 'K']
# Joker=['big_Joker','small_Joker']
sum_poker = [i+j for i in num_poker for j in color]
return sum_poker
class player(object):
"""docstring for player"""
def __init__(self, poker,bet_on):
super(player, self).__init__()
self.poker = poker
self.bet_on=bet_on
def sum_value(self):
L = []
for i in self.poker:
# if i[0] == 'J' or i[0] == 'Q' or i[0] == 'K' or i[:2] == '10':
if i[:-1] in ['10','J','Q','K']:
num = 10
elif i[0] == 'A':
num = 1
else:
num = int(i[0])
L.append(num)
return L
# 算出五张牌的总点数
def poker_point(self):
lst = self.sum_value()
# 排列组合:3张牌的点数之和为10的倍数
for j in itertools.combinations(lst, 3):
if sum(j) % 10 == 0:
if sum(lst) % 10 == 0:
return 10
return sum(lst) % 10
else:
return 0
# 比较双方的点数相同时,比较牌面中最大的牌,按照索引来排序,并找出牌中最大的索引值
def sorted_index(self):
L = []
for i in self.poker:
index = poker_list().index(i)
L.append(index)
return max(L)
# 点数的大小对应的倍率
def level_rate(self):
point = self.poker_point()
if point == 10:
self.bet_on *=3
elif 7 <= point < 10:
self.bet_on *= 2
elif point < 7:
self.bet_on *= 1
return self.bet_on
def main():
print("游戏开始")
value=int(input('请输入玩家的欢乐豆:'))
# 统计玩家游戏局数
i=1
while True:
print('第%s局游戏开始!'%i)
bet_on=input('请玩家输入赌注:')
try:
bet_on=int(bet_on)
# 如果输入的赌注小于等于0或者不为整数时,游戏结束(这样可以主动退出游戏)
except Exception:
print('游戏结束')
print('您剩下的欢乐豆为:',value)
return
if bet_on<=0:
print('游戏结束')
print('您剩下的欢乐豆为:',value)
return
else:
L = poker_list()
# 把牌随机洗好
random.shuffle(L)
# 按顺序发牌(因为牌已经打乱顺序,所以顺序发牌)
hostpoker = L[:5]
# 创建庄家对象,把牌面和赌注作为传参
host_value=player(hostpoker,bet_on)
# 庄家牌面的点数
host_sumPoint=host_value.poker_point()
print("庄家的牌为:", hostpoker)
print("庄家的点数:", host_sumPoint)
poker=L[5:10]
# 创建玩家对象,把牌面和赌注作为传参
player_value=player(poker,bet_on)
# 玩家牌面的点数
player_sumPoint=player_value.poker_point()
print("玩家的牌为:", poker)
print("玩家的点数:", player_sumPoint)
# 比较双方的点数,然后按照情况更改赌注和欢乐豆
# 点数相同时,比较牌面中最大的牌,按照索引来排序,并找出牌中最大的索引值
if player_sumPoint == host_sumPoint:
if player_value.sorted_index() >host_value.sorted_index():
print("这把您赢了")
value+=player_value.level_rate()
else :
print("这把您输了")
value-=host_value.level_rate()
elif player_sumPoint > host_sumPoint:
print("这把您赢了")
value+=player_value.level_rate()
else:
print("这把您输了")
value-=host_value.level_rate()
# 判断游戏结束的条件
if value>0:
print('您的赌资还剩下:',value)
print('游戏继续\r\n')
else:
print('您已经输光了欢乐豆,游戏结束!!!')
return
i+=1
if __name__ == '__main__':
main()
版权声明:本文为weixin_42499361原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。