
正文
python函数发牌程序 python函数编程200例
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
red dog这个游戏怎么用python编
# coding:utf8
import rule, config
import random, time, os
class Card(object):
"""docstring for Univalse"""
def __init__(self):
# 牌面对应点数(A代表14)
self.points = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'J':11, 'Q':12, 'K':13, 'A':14}
# 一副52张牌(去大小王)
self.cards = {1:'黑桃A', 2:'黑桃2', 3:'黑桃3', 4:'黑桃4', 5:'黑桃5', 6:'黑桃6', 7:'黑桃7', 8:'黑桃8', 9:'黑桃9',10:'黑桃10',11:'黑桃J',12:'黑桃Q',13:'黑桃K'
,14:'红桃A',15:'红桃2',16:'红桃3',17:'红桃4',18:'红桃5',19:'红桃6',20:'红桃7',21:'红桃8',22:'红桃9',23:'红桃10',24:'红桃J',25:'红桃Q',26:'红桃K'
,27:'梅花A',28:'梅花2',29:'梅花3',30:'梅花4',31:'梅花5',32:'梅花6',33:'梅花7',34:'梅花8',35:'梅花9',36:'梅花10',37:'梅花J',38:'梅花Q',39:'梅花K'
,40:'方块A',41:'方块2',42:'方块3',43:'方块4',44:'方块5',45:'方块6',46:'方块7',47:'方块8',48:'方块9',49:'方块10',50:'方块J',51:'方块Q',52:'方块K'}
self.keys = list(self.cards.keys()) # 列表化Cards字典key,便于处理
self.newkeys = [] # 洗过牌后的cards.key的新顺序
# 按牌面返回点数
def retPoint(self, card):
return self.points[card[6:]] # 牌对应的点数,切片时注意汉字的len
# 洗牌
def shuffle(self):
random.shuffle(self.keys) # 打乱key的顺序,尽量随机化
# 切牌
def cutCard(self):
startKey = random.randint(0,51) # 从52张牌数中随机一个数(为什么不是1-52,是因为要从list中取对应数)
self.newkeys = self.keys[startKey:]+self.keys[0:startKey] # 从第startKey开始腰牌
# 发牌
def perflop(self):
card1 = self.cards[self.newkeys[0]] # 第一张牌
card2 = self.cards[self.newkeys[1]] # 第二张牌
card3 = self.cards[self.newkeys[2]] # 第三张牌
point1 = self.retPoint(card1) # 第一张牌点数
point2 = self.retPoint(card2) # 第二张牌点数
point3 = self.retPoint(card3) # 第三张牌点数
# 先亮出点数小的牌,后亮出点数大的牌
if point1 point2:
return [card2,card1,point2,point1,point1-point2-1,card3,point3]
else:
return [card1,card2,point1,point2,point2-point1-1,card3,point3]
class Banker(object):
"""docstring for Banker"""
def __init__(self):
self.card = Card()
self.getCards=[]
self.money = Money()
# 开局准备
def ready(self):
print '庄家: 准备开局,请各位玩家准备进入!'
print '庄家: 下注规则:各位玩家投注金额需是$5的倍数(如,$5/$50/$100等),多少我都能赔起!'
# 开局
def start(self):
self.card.shuffle()
self.card.cutCard()
self.getCards = self.card.perflop()
print '庄家: 前两张开牌: %s %s' % (self.getCards[0], self.getCards[1])
span = self.getCards[4] # 跨度
if span == 0: # 点数相连
print '庄家: 两张牌点数相连,平局!'
return False # 直接准备下一局
else:
if span 0: # 点数不相连
print '庄家: 跨度: %d' % span
return True # 交给第三张牌的处理
else: # 一对
print '庄家: 两张一对,停止加注!'
return False # 直接交给第三张牌的处理
# 第三张牌
def thirdCard(self):
card3 = self.getCards[5]
point3 = self.getCards[6]
span = self.getCards[4] # 跨度
if span == 0: # 点数相连
print '系统: 玩家余额 $%d' % self.money.jin(self.money.zongjiazhu())
pass
else:
print '庄家: 第三张开牌: %s' % card3
zongzhue = self.money.zongjiazhu() # 总下注金额
if span 0: # 点数不相连
if point3 = self.getCards[2] or point3 = self.getCards[3]:
print '系统: 抱歉!这局庄家赢!'
print '系统: 玩家余额 $%d' % self.money.chu()
elif point3 self.getCards[2] or point3 self.getCards[3]:
print '系统: 恭喜玩家!',
if span == 1:
print '赢得5:1的赔率金额: $%d!' % (zongzhue * 6)
print '系统: 玩家余额 $%d' % self.money.jin(zongzhue * 6) # 跨度1,5倍赔率+1倍总下注金额
elif span == 2:
print '赢得4:1的赔率金额: $%d!' % (zongzhue * 5)
print '系统: 玩家余额 $%d' % self.money.jin(zongzhue * 5) # 跨度2,4倍赔率+1倍总下注金额
elif span == 3:
print '赢得2:1的赔率金额: $%d!' % (zongzhue * 3)
print '系统: 玩家余额 $%d' % self.money.jin(zongzhue * 3) # 跨度3,2倍赔率+1倍总下注金额
else:
print '赢得1:1的赔率金额: $%d!' % (zongzhue * 2) # 加上括号,防止被认为是把前面的文字打印2遍
print '系统: 玩家余额 $%d' % self.money.jin(zongzhue * 2) # 其余跨度,5倍赔率+1倍总下注金额
else:
pass
else: # 一对 span 0
if point3 == self.getCards[2]:
print '系统: 恭喜玩家!赢得11:1的赔率金额: $%d!' % zongzhue * 12
print '系统: 玩家余额 $%d' % self.money.jin(zongzhue * 12) # 11倍赔率,加上之前的总下注,即为总下注的12倍
else:
print '系统: 第三张牌点数不同,平局!'
print '系统: 玩家余额 $%d' % self.money.jin(zongzhue)
self.end()
# 结束
def end(self):
print '系统: 玩家总下注金额清零 $%d' % self.money.zongjiazhu(-(self.money.zongjiazhu())) # 总下注额清零(10-10)
print '系统: 请等待下一局开局.'
print '--------------------------------------------------------------------------------'
time.sleep(1)
class Player(object):
"""docstring for Player"""
def __init__(self):
self.card = Card()
self.money = Money()
def joinGame(self):
while True:
comd = raw_input('系统: 是否加入这局(y/n,回车默认y,5秒后默认n,退出输入q)?: ')
if comd == 'y' or comd == '':
balance = self.money.chkBalance()
if balance == 0:
print '系统: 抱歉!您的余额为$0,无法下注,正在退出游戏!'
print '系统: 请修改money文件中余额数量后,再进入游戏!'
return 'q'
else:
print '系统: 玩家余额 $%d' % balance
print '系统: 玩家总下注金额 $%d' % self.money.zongjiazhu() # 总下注金额已清零
time.sleep(0.5)
return True
elif comd == 'n':
print '玩家: 我不想加入这局!'
return False
elif comd == 'q':
print '系统: 玩家退出游戏!'
return 'q'
else:
print '系统: 命令错误,只能输入字母y或n或q或直接回车!'
time.sleep(0.5)
continue
# 直接回车或输入的是0,放弃此局 / 放弃加注
def giveUp(self, input):
if input == '' or input == '0':
return True
# 下注
def bet(self):
while True:
firstBet = raw_input('系统: 各位玩家请请下注(需是$%s的倍数,PASS请直接回车!): ' % self.money.base)
# 放弃此局
if self.giveUp(firstBet):
print '玩家: PASS!'
time.sleep(0.5)
return False
# 检查输入的金额
input = self.money.chkInput(firstBet)
if input == 'lack':
continue
elif input == 'beyond':
continue
elif input:
print '玩家: 下注 $%s' % firstBet
print '系统: 玩家余额 $%d' % self.money.chu(int(firstBet))
print '系统: 玩家总下注金额 $%d' % self.money.zongjiazhu(int(firstBet))
time.sleep(0.5)
return True
else:
continue
# 加注(再下注)
def againBet(self):
while True:
secondBet = raw_input('系统: 各位玩家请加注(需是$%s的倍数,STAND请直接回车!): ' % self.money.base)
# 放弃加注
if self.giveUp(secondBet):
print '玩家: STAND!'
print '系统: 玩家余额 $%d' % self.money.chkBalance()
print '系统: 玩家总下注金额 $%d' % self.money.zongjiazhu()
time.sleep(0.5)
return True # 放弃加注也开第三张
# 检查输入的金额
againInput = self.money.chkInput(secondBet)
if againInput == 'lack':
continue
elif againInput == 'beyond':
continue
elif againInput:
print '玩家: 加注 $%s' % secondBet
print '系统: 玩家余额 $%d' % self.money.chu(int(secondBet))
print '系统: 玩家总下注金额 $%d' % self.money.zongjiazhu(int(secondBet))
time.sleep(0.5)
return True
else:
continue
class Money(object):
"""docstring for Money"""
def __init__(self):
self.base = config.base # 下注金额基数
self.rwFile = RWFile()
# 数钱出账
def chu(self, money=0):
lose = self.rwFile.readFile(self.rwFile.moneyFilePath)-money
self.rwFile.writeFile(self.rwFile.moneyFilePath, lose)
return lose
# 赢钱进账
def jin(self, money=0):
win = self.rwFile.readFile(self.rwFile.moneyFilePath)+money
self.rwFile.writeFile(self.rwFile.moneyFilePath, win)
return win
# 总下注金额
def zongjiazhu(self, money=0):
zongzhue = self.rwFile.readFile(self.rwFile.amountFilePath)+money
self.rwFile.writeFile(self.rwFile.amountFilePath, zongzhue)
return zongzhue
# 检查输入的金额
def chkInput(self, number):
if number.isdigit(): # 数字
if self.chkBalance() == 0:
print '提醒: 您当前余额为$0,无法加注!' # 此处是"加注",为什么不是"下注"?,因为玩家加入游戏后就对玩家余额进行检查,如果是$0,则直接提示无法继续游戏,要求退出!都不给下注的机会,故不会存在余额为$0的情况下还可以下注的,但可以加注,因为第一次下注时全下了!
time.sleep(0.5)
return 'lack'
elif int(number) = self.chkBalance(): # 输入的金额在玩家余额之内
if int(number) % self.base == 0: # 输入的金额是base的倍数
return True
else:
print '提醒: 输入的金额必须是$%s的倍数,请重新输入!' % self.base
time.sleep(0.5)
return False
else:
print '提醒: 输入的金额$%s已超出您当前余额$%d,请重新输入!' % (number,self.chkBalance())
time.sleep(0.5)
return 'beyond'
else:
print '提醒: 抱歉,你输入的不是金额数字,请重新输入!'
time.sleep(0.5)
return False
# 查询余额
def chkBalance(self):
balance = self.rwFile.readFile(self.rwFile.moneyFilePath)
return balance
class RWFile(object):
"""读写金钱和总下注金额文本文件"""
def __init__(self):
self.moneyFilePath = 'money.txt' # 必须utf8格式的txt文本
self.amountFilePath = 'amount.txt' # 必须utf8格式的txt文本
# 读(返回读到的数)
def readFile(self, filePath):
f = open(filePath,'r')
money = f.read()
if money == '' and not money.isdigit():
print '存储玩家金钱的文件: "%s" 的内容不是一个金额数字,系统已恢复成初始值!'
money = config.money # 恢复为config中的money数
f.close
return int(money)
# 写
def writeFile(self, filePath, money = 0):
f = open(filePath,'w')
f.write(str(money))
f.close()
# 检查配置文件,money文件,amount文件
def chkFile(self):
# 检查配置文件
if not str(config.base).isdigit() or not str(config.money).isdigit():
print '配置文件config.py不正确!必须是数字,且其中前后无空格!'
return False
# money文件是否存在
if not os.path.isfile(self.moneyFilePath) or not os.path.isfile(self.amountFilePath):
f1 = open(self.moneyFilePath,'w')
f1.write(config.money)
f1.close()
f2 = open(self.amountFilePath,'w')
f2.write('0')
f2.close()
return True
return True
def main():
# 显示游戏规则
print rule.gameRule
# a=[]
# for i in range(2,15):
# a.append(i)
# print a
banker = Banker()
player = Player()
rwFile = RWFile()
if not rwFile.chkFile():
return
while True:
banker.ready() # 庄家准备
playComd = player.joinGame() # 系统提示玩家是否加入这局
if playComd == 'q':
break
elif playComd:
# 加入
if player.bet(): # 玩家下注
# 下注
if banker.start(): # 庄家开局,发前两张牌
if player.againBet(): # 玩家加注
banker.thirdCard() # 庄家发第三张牌
else:
banker.thirdCard() # 庄家发第三张牌
else:
# 没下注
banker.end() # 庄家结束这局
else:
# PASS
banker.end() # 庄家结束这局
continue
if __name__ == '__main__':
main()
运行结果
--------------------------------------------------------------------------------
庄家: 准备开局,请各位玩家准备进入!
庄家: 下注规则:各位玩家投注金额需是$5的倍数(如,$5/$50/$100等),多少我都能赔起!
系统: 是否加入这局(y/n,回车默认y,5秒后默认n,退出输入q)?:
系统: 玩家余额 $18705
系统: 玩家总下注金额 $0
系统: 各位玩家请请下注(需是$5的倍数,PASS请直接回车!): 55
玩家: 下注 $55
系统: 玩家余额 $18650
系统: 玩家总下注金额 $55
庄家: 前两张开牌: 梅花J 红桃A
庄家: 跨度: 2
系统: 各位玩家请加注(需是$5的倍数,STAND请直接回车!): 55
玩家: 加注 $55
系统: 玩家余额 $18595
系统: 玩家总下注金额 $110
庄家: 第三张开牌: 方块9
系统: 抱歉!这局庄家赢!
系统: 玩家余额 $18595
系统: 玩家总下注金额清零 $0
系统: 请等待下一局开局.
--------------------------------------------------------------------------------
庄家: 准备开局,请各位玩家准备进入!
庄家: 下注规则:各位玩家投注金额需是$5的倍数(如,$5/$50/$100等),多少我都能赔起!
系统: 是否加入这局(y/n,回车默认y,5秒后默认n,退出输入q)?: q
系统: 玩家退出游戏!
相关问答
Q1: 【python】魔法方法 :__getitem__ 、 __len__、__setitem__等的使用
在Python中,如果我们想实现创建类似于序列和映射的类(可以迭代以及通过[下标]返回元素),可以通过重写魔法方法 __getitem__、__setitem__、__delitem__、__len__ 方法去模拟。
__getitem__(self,key): 返回键对应的值。
__setitem__(self,key,value): 设置给定键的值
__delitem__(self,key): 删除给定键对应的元素。
__len__(): 返回元素的数量
【注释】只要实现了 __getitem__ 和 __len__ 方法,就会被认为是序列。
这些魔术方法的原理就是:当我们对类的属性item进行下标的操作时,首先会被 __getitem__()、__setitem__()、__delitem__() 拦截,从而执行我们在方法中设定的操作,如赋值,修改内容,删除内容等等。
这个方法应该以与键相关联的方式存储值,以便之后能够使用 __setitem__ 来获取。当然,这个对象可变时才需要实现这个方法。
举个栗子:
定义一副扑克牌(不包括大小王),对牌进行洗牌,然后发牌。
Output:
【注意】 :我们会发现output中,输出了: slice(1, 3, None) ,下面给出解释。
语法:
参数说明:
slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。
举两个栗子来看看:
Output:
切片原理
output
(程序员必会的 hhhhh.....)
看看slice在python3.7中是怎么描述的:
Q2: python可以开发游戏吗?有对应的第三方库可以利用吗?
总结一下,python不是不能开发游戏,只是并不合适。每种语言都有各自python函数发牌程序的优缺点,开发游戏这一块或许就是pythonpython函数发牌程序的缺点吧。 python游戏实例补充: 发牌游戏 1. 游戏介绍...
Q3: 用python编了个纸牌,但是怎么发牌呀,完全随
1. 找到一些有解的必要条件python函数发牌程序,然后在满足这些条件的前提下,随机生成牌局。可降低无解的可能性。
2. 倒推法python函数发牌程序:从4色牌都排好开始,(有指导的)随机进行反向的操作,最后得到牌局。倒推的步数多则难,反之则易。
3. 随机生成+机器检查。先自动检查生成的牌局,知道所有牌的情况下应该不难。做这个的时候,说不定python函数发牌程序你还能得到有解的充分/必要条件,然后就容易python函数发牌程序了。
Q4: Python发牌案例几个问题求解答
1、__str__,只有打印单个对象有效,比如:print(对象1),
__repr__() ,打印列表中的对象也有效,比如:print([对象1,对象2,对象3])
2、就是一个嵌套的推导式
3、84-90合并一下,更容易理解
就是一个列表的排序
Q5: python 随机排序(.random.shuffle)后发生的错误
def main():
import random
items = ['红桃A', '黑桃A',........,]
x = random.shuffle(items)
#########################################################################
请注意python函数发牌程序你这里的用法python函数发牌程序, random.shuffle(items)是直接操作items的,相当于把items传址调用python函数发牌程序了,改变python函数发牌程序了items的元素顺序,shuffle跟sorted等是一样的直接操作传进去的参数,没有返回 值(或者说返回值是None)。
你用 x = random.shuffle(items)那么x永远是None了,你这里可以这样用啊:
def main():
import random
items = ['红桃A', '黑桃A',........,]
x = items[:] # 得到一个items的深拷贝
random.shuffle(x)
# 下面你再用这个打乱的x就可以了,如果你的items后面没什么用的话,可以下面直接用items了像下面这样:
def main():
import random
items = ['红桃A', '黑桃A',........,]
random.shuffle(items)
# 下面用到x的地方用items替换掉。
关于python函数发牌程序和python函数编程200例的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

![【电子书】[科学技术] 《杀人游戏之皮下注射》[孙浩元][epub+mobi+azw3] 【电子书】[科学技术] 《杀人游戏之皮下注射》[孙浩元][epub+mobi+azw3]](https://www.04ip.com/template/qe/style/noimg/6.jpg)





