python⼗点半游戏代码_⼗点半游戏完整代码及详细注释.py # -*- coding: utf-8 -*-
#此版本,于2018年12⽉9⽇
#游戏类
class Game:
#⼀般游戏进程,从读取存档开始
def Process(self):
#初始回合数为0
#初始Continue标记为True
self.Continue = True
#读取游戏
self.Read(self)
#当Continue标记为True时循环进⾏游戏
while self.Continue:
#创建⼀个玩家集合
self.player_set = set()
#初始化扑克牌
self.Card.InitCard(self)
#每轮的开始都将重置每名玩家的部分信息
for i in range(self.player_amount):
self.player_set.add(i)
self.player_list[i].banker = False
self.player_list[i].want = True
self.player_list[i].inboom = True
self.player_list[i].bet = 0
#下⾯两句是加牌操作,每名玩家1张
self.player_list[i].hand = [self.cards[0]]
del self.cards[0]
#进⼊叫庄环节
self.Banker(self,self.player_amount,self.player_set)
#游戏进程,从零开始
def Start(self):
#初始化扑克牌
self.Card.InitCard(self)
#初始化玩家
self.PlayerInit(self)
#牌点计算器,⽤于在创建扑克牌对象时提供每张牌的点数
#输⼊参数:{牌号}
def Calculate(rank):
#字典,数据来源
dictionary = {"A":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"10":10,"J":0.5,"Q":0.5,"K":0.5}
#约定点数并返回
value = dictionary[rank]
return value
#玩家初始化
def PlayerInit(self):
while True:
try:
#输⼊玩家数量
self.player_amount = int(input(">>>欢迎来到全新的⼗点半Lite!\n>>>请您设定玩家数量,最低2⼈,最⾼4⼈:")) #当玩家数量正确时执⾏⼦程序
if self.player_amount in (2,3,4):
self.__PlayerInit(self,self.player_amount)
break
#否则提⽰错误
else:
print("\n>>>不⽀持该数量的玩家哟,换个数试试吧!<<
#输⼊⾮数字时报错
except:
print("\n>>>系统监测到了错误,但是系统不知道怎么解决")
#玩家初始化⼦程序
#输⼊参数:{玩家数量}
def __PlayerInit(self,player_amount):
#创建空列表,⽤于放置玩家名
player_name = []
print("\n>>>本局游戏共有{}名玩家~!<<
#输⼊玩家名并添加到列表
for i in range(self.player_amount):
player_name.append(input("您好,{}号玩家!\n-请输⼊您的⼤名:".format(i + 1)))
#初始化游戏
self.InitGame(self,player_name,self.player_amount,2)
#初始化游戏,有三种初始化⽅法
#输⼊参数:{玩家名称列表,玩家数量,初始化⽅式}
def InitGame(self,player_name,player_amount,Action):
#Action参数⼩于3时执⾏游戏初始化
if Action < 3:
#创建玩家列表,玩家集合
self.player_list = []
self.player_set = set()
#给每位玩家添加初始数据
for i in range(self.player_amount):
self.player_list.append(self.Players(i,player_name[i],[self.cards[0]],False,True,True,0,100,0))
self.player_set.add(i)
#因为中间涉及到了发牌,所以要从牌堆删除发给玩家的牌
del self.cards[0]
#若Action等于2追加执⾏,进⼊叫庄环节
if Action == 2:
self.Banker(self,self.player_amount,self.player_set)
#Action参数等于3时不进⾏初始化,直接进⼊叫庄环节(成功读取到游戏数据)
if Action == 3:
self.Banker(self,self.player_amount,self.player_set)
#叫庄环节
#输⼊参数:{玩家数量,玩家集合}
def Banker(self,player_amount,player_set):
#进⼊叫庄意味着游戏正式开始,回合数将加1
while True:
try:
#输⼊庄家的玩家序号
banker_number = int(input("第{}局游戏开始,请您选出⼀名庄家,庄家不需要下注哟!\n>>>请指定庄家的序号,1-{}号都可以:".unds,self.player_amount))) - 1
#若玩家序号没有错误将执⾏⼦程序
if banker_number in range(self.player_amount):
self.__Banker(self,self.player_amount,banker_number,self.player_set)
break
#玩家序号输⼊错误则报错
else:
print(">>>请输⼊正确的玩家序号哟,再试⼀次吧!<<
#若输⼊⾮数字将报出此错
except:
print("\n>>>系统监测到了错误,但是系统不知道怎么解决")
#叫庄⼦程序
#输⼊参数:{玩家数量,庄家编号,玩家集合}
def __Banker(self,player_amount,banker_number,player_set):
#修改该名玩家的庄家标识符
self.player_list[banker_number].banker = True
#从玩家集合中除去这名庄家,将其变为闲家集合
self.player_set -= {banker_number}
print("\n>>>{}号玩家:[{}]通过选举成为了庄家!".format(banker_number + 1,self.player_list[banker_number].name)) #进⼊下注环节
self.Bet(self,self.player_amount,banker_number,self.player_set)
#下注环节
#输⼊参数:{玩家数量,庄家编号,闲家集合}
def Bet(self,player_amount,banker_number,player_set):
#对于每名闲家
for i in self.player_set:
while True:
try:
python新手代码及作用#输⼊下注值
bet = int(input("-闲家{}:[{}],轮到你下注了!\n>>>最低下1$,最⾼可以下20$:".format(i + 1,self.player_list[i].name))) #限制下注值在1-20范围之间
if bet in range(1,21):
#进⼊下注⼦程序
if self.__Bet(self,i,bet):
break
#若下注不符合范围规定则报错
else:
print(">>>下注区间是1-20$,请注意下呢!<<
#若输⼊⾮整数将报此错
except:
print("\n>>>系统监测到了错误,但是系统不知道怎么解决")
#进⼊补牌环节
self.AugmentCard(self,self.player_amount,banker_number,self.player_set)
#补牌环节
#输⼊参数:{玩家数量,庄家编号,闲家集合}
def AugmentCard(self,player_amount,banker_number,player_set):
#初始化补牌轮数为0
count = 0
#完成补牌的玩家数为0
success = 0
#设定补牌未完成标识为True
insuccess = True
print("\n>>>补牌阶段开始,闲家优先!<<
#若补牌未完成标识为True
while insuccess:
#补牌轮数加1
count += 1
print("-第{}轮补牌开始!".format(count))
#对于每名闲家
for i in self.player_set:
#若该名闲家的要牌标记为True且不爆牌标记为True
if self.player_list[i].want and self.player_list[i].inboom:
#玩家可决定是否补牌,若输⼊为Y、y将进⼊补牌⼦程序
if input(">>>闲家{}:[{}]轮到你选择了!\n-⽬前牌点为{},若要补牌请输⼊y:".format(i + 1,self.player_list[i].name,self.__calculate(self,i))) in ("Y","y"):
self.__AugmentCard(self,i)
#玩家选择不补牌则将玩家的要牌标记设为False
else:
print("\n>闲家{}不敢补了。".format(i + 1))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。