简单想法学习写21点游戏(三)
再就需要制造两个牌手:一个是电脑(庄家),一个是玩家。庄家和玩家的主要区别是:庄家在起手两张牌超过17点便不能要牌;要等玩家停牌后才能要牌等等。玩家是否要牌可以凭感觉,电脑是否要牌还得给它制定规则。那就还需要写两个类:庄家类、玩家类,有点麻烦啊。
简单想法:就写一个类吧,用不同的功能方法来实现二者区别,思维还连贯一些。电脑点数小于17点是否要牌可以简单想法处理:把剩下的牌一一匹配给手牌(反正电脑算的快,记性好),计算点数,超过21点爆牌计次,可以得到个爆牌率,爆牌率大于多少就不要牌。
class Player:
def __init__(self, name):
self.name = name
self.point = 0
self.handcards = []
self.hit = 1 #是否要牌标记
def name(self):
return self.name
def _point(self):
self.point = Judge(self.handcards).counting() #用Judge类方法算点数
return self.point
def player_bust(self):
if self.point > 21: #玩家爆牌不能要牌
self.hit = 0
else:
self.hit = 1
return self.hit
@staticmethod
def get_point(handcards): #要多次算点,简单点弄个静态
point = Judge(handcards).counting()
return point
def computer_bust(self, cards, current, role2_point):
_point = Judge(self.handcards).counting()
_bust = 0
if role2_point > 21: #玩家爆牌就不要牌
_chance = float(1)
else:
if _point < 17:
for _ in cards[current:]: #剩下的牌一一匹配算点计爆牌次数
_a = self.handcards[:]
_a.append(_)
if Judge(_a).counting() > 21:
_bust += 1
else:
continue
_chance = float('%.2f' % (_bust / (len(cards) - current))) #爆牌率
else:
_chance = float(1)
if _chance <= 0.53:
self.hit = 1
else:
self.hit = 0
return self.hit
def stand(self): #停牌
self.hit = 0
return self.hit
几个主要的类写出来了,也不知道效果如何?感觉写类并不复杂,关键还是类之间的相互关系、互相调用、接口,有点伤脑筋。