[Python] 纯文本查看 复制代码import random

from cards import Card

############################################################################################################################################

#函数:初始化

############################################################################################################################################

def init_cards():

global deck, p_hand, c_hand, up_card, nc_kou, np_kou, c_kou, p_kou

deck = []#此为待揭的牌

nc_kou=np_kou=0#电脑和玩家的扣牌数

c_kou=[]#电脑扣的牌

p_kou=[]#玩家扣的牌

for pear in range(2):#pear是“副”的意思,这里要用2副牌

for suit in range(1, 5):#suit是“花色”的意思,扑克牌共有4种花色

for rank in range(1, 14):#rank指牌的符号如“A”、“9”等

next = Card(suit, rank)

deck.append(next)

deck.append(Card(5,14))

deck.append(Card(6,14))#这两行是初始化比较特殊的大王和小王

p_hand = []#此为玩家手中的牌

for cards in range(0, 5):

card = random.choice(deck)

p_hand.append(card)

deck.remove(card)

c_hand = []#此为电脑手中的牌

for cards in range(0, 5):

card = random.choice(deck)

c_hand.append(card)

deck.remove(card)

############################################################################################################################################

#函数:轮到玩家

############################################################################################################################################

def player_turn():

global deck, p_hand, p_blocked, up_card, over, p_kou, np_kou, card1, p_hand1, pkou,cpou, c_hand, nc_kou, p_first_play,win

valid_play1 = False

print "你手中的牌:",

p_hand1 = p_hand[:]

p_hand_sorted = []#这两行将玩家的牌按从大到小的顺序排序

if Blocked:#Blocked为真则牌已被揭完,这种情况下玩家手中的牌会小于5张,因此排序时应特殊处理

for i in range(1,6-p_blocked):

card1 = p_hand1[0]

for card in p_hand1:

if card1.value < card.value:

card1 = card

p_hand_sorted.append(card1)

p_hand1.remove(card1)

else:

for i in range(1,6):

card1 = p_hand1[0]

for card in p_hand1:

if card1.value < card.value:

card1 = card

p_hand_sorted.append(card1)

p_hand1.remove(card1)

for card in p_hand_sorted:

print card.name,#打印出玩家手中的牌

if (p_hand_sorted[0].value==27 and p_hand_sorted[1].value==25 and p_hand_sorted[2].value==23 and p_hand_sorted[3].value==21 and p_hand_sorted[4].value==19)or(p_hand_sorted[0].value==28 and p_hand_sorted[1].value==26 and p_hand_sorted[2].value==24 and p_hand_sorted[3].value==22 and p_hand_sorted[4].value==20):

over+=1

win=1#判断是否为同颜色的七鬼二五三,若为真则本局结束,玩家获胜

else:

print "\n你想要做什么?",

response1 = raw_input ("出牌还是扣牌?" )

while not valid_play1:#valid是“合法”的意思,用while语句判断玩家的每次输入是否合法,若不合法则让玩家重新输入

if response1=="出牌":

pkou=False

valid_play1=True

response2=raw_input("请输入你要出的牌:")

valid_play2=False

while not valid_play2:

selected_card1 = None

while selected_card1 == None:

for card in p_hand:

if response2==card.name:

selected_card1=card

if selected_card1 == None:

response2=raw_input("对不起,你手中没有这张牌,请重新输入:")

if p_first_play==True:#若本局玩家第一个出牌,则不用和明牌比大小

p_first_play=False

valid_play2=True

p_hand.remove(selected_card1)

up_card=selected_card1

print"你出了一张",selected_card1.name

if len(deck)>0:

card=random.choice(deck)

p_hand.append(card)

deck.remove(card)

print"你揭到一张",card.name

else:

p_blocked+=1#p_blocked是牌揭完后轮到玩家的次数,通过这个可以知道玩家手中的牌数,是为了给玩家手中的牌排序用的

if len(p_hand)==0:#玩家的牌出完了但电脑的牌还没出完,电脑只能将手中的牌全部扣掉

for card in c_hand:

c_kou.append(card)

nc_kou=nc_kou+1

over+=1

else:#否则,玩家选择的牌必须大于明牌up_card(也就是电脑刚出的牌),才能出出去

if ckou==True:#如果刚才电脑没有出牌而是扣了一张牌,则将明牌的值设为0

up_card.value=0

if selected_card1.value>up_card.value:

valid_play2=True

p_hand.remove(selected_card1)

up_card=selected_card1

print"你出了一张",selected_card1.name

if len(deck)>0:#牌没被揭完

card=random.choice(deck)

p_hand.append(card)

deck.remove(card)

print"你揭到一张",card.name

else:#牌已被揭完

p_blocked+=1#此处与上面一样

if len(p_hand)==0:

for card in c_hand:

c_kou.append(card)

nc_kou=nc_kou+1

over+=1

if not valid_play2:

response2=raw_input("对不起,你输入的牌没有对方出的牌大,请重新你输入:")

elif response1=="扣牌":

valid_play1=True

pkou=True

response3=raw_input("请输入要扣的牌:")

valid_play3=False

while not valid_play3:

selected_card2=None

while selected_card2==None:

for card in p_hand:

if response3==card.name:

selected_card2=card

valid_play3=True

if selected_card2==None:

response3=raw_input("对不起,你手中没有这张牌,请重新输入:")

p_hand.remove(selected_card2)

np_kou=np_kou+1

p_kou.append(selected_card2)

print"你扣了一张",selected_card2.name

if len(deck)>0:

card=random.choice(deck)

p_hand.append(card)

deck.remove(card)

print"你揭到一张",card.name

else:

p_blocked+=1

if len(p_hand)==0:

over+=1

if not valid_play3:

response3=raw_input("对不起,你的输入不合法,请重新你输入:")

if not valid_play1:

response1=raw_input("对不起,你的输入不合法,请重新你输入:")

############################################################################################################################################

#函数:轮到电脑

############################################################################################################################################

def computer_turn():#与player_turn类似,只是不用判断输入是否合法,默认出比明牌大的最小的牌,扣最小的牌

global c_hand, deck, up_card, over, c_blocked, c_kou, nc_kou, pkou,ckou, p_hand, np_kou,c_first_play

suit_cards=[]

ckou=False

c_hand1 = c_hand[:]

c_hand_sorted = []

if Blocked:

for i in range(1,6-c_blocked):

card1 = c_hand1[0]

for card in c_hand1:

if card1.value < card.value:

card1 = card

c_hand_sorted.append(card1)

c_hand1.remove(card1)

else:

for i in range(1,6):

card1 = c_hand1[0]

for card in c_hand1:

if card1.value < card.value:

card1 = card

c_hand_sorted.append(card1)

c_hand1.remove(card1)

if (c_hand_sorted[0].value==27 and c_hand_sorted[1].value==25 and c_hand_sorted[2].value==23 and c_hand_sorted[3].value==21 and c_hand_sorted[4].value==19)or(c_hand_sorted[0].value==28 and c_hand_sorted[1].value==26 and c_hand_sorted[2].value==24 and c_hand_sorted[3].value==22 and c_hand_sorted[4].value==20):

over+=1

win=2

else:

if pkou==True or c_first_play==True:

best_play = c_hand[0]

for card in c_hand:

if card.value < best_play.value:

best_play = card

c_hand.remove(best_play)

up_card = best_play

print "电脑出了一张", best_play.name

if Blocked==True:

nc_hand=0

for card in c_hand:

nc_hand=nc_hand+1

print"电脑还剩下%i张牌"%nc_hand

if len(deck) >0:

next_card = random.choice(deck)

c_hand.append(next_card)

deck.remove(next_card)

else:

c_blocked+=1

if len(c_hand)==0:

for card in p_hand:

p_kou.append(card)

np_kou=np_kou+1

over+=1

else:

for card in c_hand:

if card.value>up_card.value:

suit_cards.append(card)

if len(suit_cards) > 0:

best_play = suit_cards[0]

for card in suit_cards:

if card.value < best_play.value:

best_play = card

c_hand.remove(best_play)

up_card = best_play

print "电脑出了一张", best_play.name

if len(deck) >0:

next_card = random.choice(deck)

c_hand.append(next_card)

deck.remove(next_card)

else:

c_blocked+=1

if len(c_hand)==0:

over+=1

else:

if len(c_hand)>0:

selected_card=c_hand[0]

for card in c_hand:

if card.value

selected_card=card

c_hand.remove(selected_card)

nc_kou=nc_kou+1

c_kou.append(selected_card)

print"电脑扣了一张牌"

ckou=True

if len(deck) >0:

next_card = random.choice(deck)

c_hand.append(next_card)

deck.remove(next_card)

else:

c_blocked+=1

else:

print"电脑的牌出完了"

over+=1

############################################################################################################################################

#主循环

############################################################################################################################################

done=False#done指的是整个游戏结束,退出程序

p_total=c_total=0#玩家和电脑的大比分

game_time=1#游戏局数

while not done:

game_done=False#game_done指的是本局游戏结束

c_blocked=0#牌揭完后轮到电脑的次数

p_blocked=0#牌揭完后轮到玩家的次数

Blocked=False#牌被揭完

over=0#over>0时game_done

win=0#此为关于集齐同种颜色的七鬼二五三获胜的判断,win==1时玩家胜,win==2时电脑胜

init_cards()#初始化扑克牌

n=random.randint(0,2)#随机确定谁第一个出牌

if n==0:

p_first_play=True

c_first_play=False

else:

p_first_play=False

c_first_play=True

pkou=False

ckou=False

print"第%i局"%game_time

while not game_done:

if n==0:#此为玩家第一个出牌

player_turn()

if c_blocked+p_blocked >= 1:#判断牌是否揭完

Blocked=True

if over>=1:#判断本局是否结束

game_done=True

if not game_done:

computer_turn()

if c_blocked+p_blocked >= 1:

Blocked=True

if over>=1:

game_done=True

else:#此为电脑第一个出牌

computer_turn()

if c_blocked+p_blocked >= 1:

Blocked=True

if over>=1:

game_done=True

if not game_done:

player_turn()

if c_blocked+p_blocked>=1:

Blocked=True

if over>=1:

game_done=True

if Blocked:

print"牌已经被揭完了"

if game_done:

game_time+=1

if win==1:

print"你因集齐了同花色的七鬼二五三而赢得了本局的胜利!"

print"你扣了%i张牌,而电脑扣了%i张牌"%(np_kou,nc_kou)

p_total+=1

elif win==2:

print"你输了!电脑因集齐了同花色的七鬼二五三而赢得了本局的胜利!"

print"你扣了%i张牌,而电脑扣了%i张牌"%(np_kou,nc_kou)

c_total+=1

else:

if np_kou

print"你赢了!"

print"你扣了%i张牌,而电脑扣了%i张牌"%(np_kou,nc_kou)

p_total+=1

elif np_kou>nc_kou:

print"你输了!"

print"你扣了%i张牌,而电脑扣了%i张牌"%(np_kou,nc_kou)

c_total+=1

else:

c_kou_p=p_kou_p=0

for card in c_kou:

c_kou_p+=card_value

for card in p_kou:

p_kou_p+=card_value

if c_kou_p>p_kou_p:

print"你赢了!"

print"你和电脑都扣了%i张牌,但你扣的牌价值更小,所以你赢了。"%np_kou

p_total+=1

elif c_kou_p

print"你输了!"

print"你和电脑都扣了%i张牌,但电脑扣的牌价值更小,所以电脑赢了。"%np_kou

c_total+=1

else:

print"你和电脑战平了!"

print"千年一遇啊!你和电脑都扣了%i张牌,而且所扣的牌的价值也相等!但由于该游戏的程序设计者偏心人类,所以这一局算你赢了!"%nc_kou

p_total+=1

play_again=raw_input("再玩一局(Y/N)?")

if play_again.lower().startswith('y'):#这句让你无论是输入“Y”还是“y”,甚至是“yes”都等价于“y”

done=False

print"到目前为止,你和电脑的比分为%i:%i"%(p_total,c_total)

else:

done=True

print"最终比分:"

print"你","\t","电脑"

print p_total,"\t",c_total

"""变量名命名规律:除扣牌的“扣”字用的是拼音“kou”外,其余变量皆用英文,如电脑简称“c”,玩家简称“p”"""

纸牌游戏10点半c语言,python10点半纸牌游戏_【Python】Python编的纸牌游戏相关推荐

  1. python语言特点以下错误的是_关于Python语言的特点,以下选项中描述错误的是( )。_学小易找答案...

    [其它]制作空间感雨幕效果 素材图如下: [单选题]1332 .定向井分为常规定向井.大斜度定向井和( A )三种类型. [填空题]用来设置表格边线粗细的属性是( ) [单选题]1320 .井下动力钻 ...

  2. python基础语言与应用第五章_《Python基础教程》 读书笔记 第五章(下)循环语句...

    5.5.1while循环 x=1 while x<=100: print x x+=1 确保用户输入了名字: name="" while not name: name=raw ...

  3. python基础语言与应用第五章_《Python基础教程》 读书笔记 第五章(下)条件语句...

    5.5.1while循环 1234x=1while x<=100: print x x+=1 确保用户输入了名字: 1234name=""while not name: na ...

  4. python语言的两种注释方法_【Python】python注释的方法

    不管使用哪一种语言编程,学会注释以及写好注释是特别特别重要的一点!详细的注释,不仅对自己日后的回归有益,对后来之人尽快上手业务更是有益. python里面三种注释方法: 一.单行注释 # 常被用作单行 ...

  5. 关于python语言下列说法错误的是_在Python中下列说法错误的是()

    在Python中下列说法错误的是() 答:Python语言只能用4个空格的缩进来实现程序的强制可读性 比赛中,运动员击出的球压在端线上,则判该运动员失分 答:× 虚证的症状表现是( ) 答:神疲乏力 ...

  6. 下列选项中不符合python语言变量命名规则的是_学习Python第二日--基本概念和类型...

    编程语言分类:解释型语言和编译型语言.解释型语言不会产生额外的文件,运行时一行一行的翻译.编译型语言需要产生一个额外的文件,是电脑能够识别的内容,运行后将产生额外的文件. 变量是可变的量,是它的值可以 ...

  7. python10点半纸牌游戏_扑克11点游戏(python代码)

    扑克11点游戏(python代码)import random'''纸牌11点游戏 规则: 1. 3个人参与,默认先给用户发一张牌,其中 J.Q.K.小王.大王代表的值为0.5,其他就是则就是当前的牌面 ...

  8. 纸牌游戏设计制作(C语言)

    纸牌游戏设计制作 (C语言) 我是编程爱好者.早期使用windows时就被扫雷游戏,钻石棋游戏,红心大战游戏迷住.相信大家也都玩过吧.在学习VB6编程时就编制过钻石棋和红心大战那样的纸牌游戏.都是标准 ...

  9. c语言小游戏10例,C语言的应用 小游戏为例.doc

    C语言的应用 小游戏为例 贪吃蛇游戏设计 姓 名: 学 号: 班 级: 103511 指导老师: 张 印 2012年05月29日 <c语言程序设计>课程期末论文 PAGE I 目 录 TO ...

最新文章

  1. 计算机信息系统安全管理制度
  2. 如何调试 Android 上 HTTP(S) 流量
  3. Day11多态部分-6 【1.3 对象的向上转型和向下转型】
  4. 如何找到 SAP 电商云 Spartacus UI 导航 navigation 的驱动器 - NavigationEntryItemEffects
  5. vuex最简单、最详细的入门文档
  6. Jeecg 文件上传漏洞补丁说明
  7. Android 使用 DownloadManager 管理系统下载任务的方法,android管理系统
  8. android第十二步Pull解析器解析和生成XML内容
  9. 黑月MySQL_易语言黑月编译器插件
  10. 三相PWM整流器滞环电流控制仿真
  11. Chrome浏览器模拟微信客户端访问网址,方法图文讲解模拟微信
  12. Outlook-VBA-05-自动获取邮件附件
  13. 最全Pycharm教程(40)——Pycharm扩展功能之捆绑插件TextMate
  14. Spring Boot-入门
  15. 页面优化之懒加载与预加载
  16. 手机为什么手机里的计算机没在桌面,为什么桌面图标不见了
  17. 简单好用的图片取色器【可取RGB数值】
  18. 透过案例看清API接口的作用——演示1688商品详情接口
  19. 超详细分析Windows变慢原因及解决方法
  20. MySQL联合索引原理解析

热门文章

  1. python求13号是星期几的次数_Python简单计算给定某一年的某一天是星期几示例
  2. java question_Core Java Question List No3
  3. 遵义春季招生计算机学校,遵义计算机学校招生
  4. linux安装redis教程yum,linux下yum安装redis以及使用
  5. 皮一皮:男女的不同...
  6. 皮一皮:一直情绪不稳的原因终于找到了!
  7. 涨姿势:另类的表情域名赚钱大法!!
  8. 每日一皮:这题作的没毛病...
  9. 赠书:一本书揭开 Spring Boot 技术内幕
  10. 每日一皮:后来…后来…他得到了永生...