classPlayer(object):def__init__(self,type):
self.type=type
self.pokers =[]
self.point =0defshow_poker(self, index=0):return"%s%s"%(self.pokers[index].type, self.pokers[index].value)defshow_pokers(self):
ret =""
index =0while index <len(self.pokers):
ret = ret + self.show_poker(index)+" "
index +=1return ret
#获取一张扑克牌的点数defget_poker_point(self, poker, Aflag=False):if poker.value =="A":if Aflag:return11else:return1elif poker.value in["J","Q","K"]:return10else:returnint(poker.value)#计算所有扑克牌的点数defget_pokers_point(self):
self.point =0
Alist =[]for poker in self.pokers:if poker.value =="A":
Alist.append(poker)else:
self.point += self.get_poker_point(poker)for poker in Alist:# A A# 21 0
subPoint =21- self.point
if self.get_poker_point(poker,True)<= subPoint:
self.point +=11else:
self.point +=1defisboom(self):
point =0for poker in self.pokers:
point += self.get_poker_point(poker)if point >21:return-1
poker.py
classPoker(object):def__init__(self,type, value):
self.type=type
self.value = value
def__str__(self):return"%s%s"%(self.type, self.value)
poker_manager.py
import random
from poker import Poker
classPokerManager(object):def__init__(self):# 创建54扑克
self.pokers =[]fortypein["♠","♦","♥","♣"]:for value in["A","2","3","4","5","6","7","8","9","10","J","Q","K"]:#创建扑克对象
poker = Poker(type, value)#管理扑克对象
self.pokers.append(poker)
self.pokers.append(Poker("?","D"))
self.pokers.append(Poker("?","X"))def__str__(self):
ret =""for poker in self.pokers:
pokerStr ="%s%s"%(poker.type, poker.value)
ret = ret + pokerStr +" "return ret
defshuffle_21dian(self):# 去掉大小王
self.pokers.pop()
self.pokers.pop()
random.shuffle(self.pokers)# 从一副扑克中抽取一张牌defsend_poker(self):return self.pokers.pop()# 给某个玩家发num张牌defsend_pokers(self, player, num):for index inrange(num):
poker = self.send_poker()
player.pokers.append(poker)
main.py
from poker_manager import PokerManager
from player import Player
defmain():#创建扑克牌管理对象
pm = PokerManager()#洗牌
pm.shuffle_21dian()#创建游戏者并发牌
player = Player(True)
pm.send_pokers(player,2)
computer = Player(False)
pm.send_pokers(computer,2)#亮牌print("庄家首张扑克牌为:%s"%(computer.show_poker()))# print(computer.show_pokers())# print(player.show_pokers())#玩家的时间print("------------玩家时刻------------")while1:print("玩家:%s"%(player.show_pokers()))
flag =input("是否继续要牌?y/n")if flag.upper()=="Y":#发一张牌
pm.send_pokers(player,1)#判断是否爆牌if player.isboom():#自爆,结束程序print("玩家:%s"%(player.show_pokers()))print("玩家输了")returnelif flag.upper()=="N":# 计算点数并保存
player.get_pokers_point()print("玩家点数:%d"%(player.point))breakelse:print("输入错误,请重新选择!")print("------------庄家时刻------------")while1:# print("1庄家:%s" % (computer.show_pokers()))#计算庄家的点数
computer.get_pokers_point()# print(computer.point)if computer.point <17:#发牌
pm.send_pokers(computer,1)# print("2庄家:%s" % (computer.show_pokers()))# print(computer.point)if computer.isboom():print("庄家输了")returnelse:# 停牌# 计算庄家点数并保存
computer.get_pokers_point()print("庄家点数:%d"%(computer.point))breakif computer.point > player.point:print("庄家赢(庄家:%d-玩家:%d)"%(computer.point, player.point))elif computer.point == player.point:print("平局(庄家:%d-玩家:%d)"%(computer.point, player.point))else:print("玩家赢(庄家:%d-玩家:%d)"%(computer.point, player.point))if __name__ =="__main__":
main()