python tkinter 出牌洗牌

利用Tkinter模块设计出扑克牌发牌窗体程序,要求4名牌手打牌,计算机随机将52张牌(不含大小王)发给4名牌手,在屏幕上显示每位牌手的牌。程序运行结果如图所示。

  • 本程序只是实现一个界面和出牌洗牌的功能,不是斗地主游戏!!!
  • 有两个问题没有解决:洗牌的动画效果不好
  • 每次出牌后不能把新打出的牌放到最顶层

源代码:

from functools import partial
from tkinter import *
import random
import time
from PIL import Image,ImageTk
tk=Tk()
tk.title("洗牌,出牌")
tk.geometry("800x600+250+30")
tk.resizable(0,0)
bu=Button()
buttons=[bu]*52#记录所有选中的按钮
delbuttons=[]#记录所有按钮
sign=[]
imgs=[]
for i in range(1,5):for j in range(1,14):imgs.insert((i-1)*13+(j-1),PhotoImage(file='images\\'+str(i)+'-'+str(j)+'.gif'))#为窗口添加背景图片
can=Canvas(tk,width=800,height=600)
im=Image.open('images\\bg.gif')
img=ImageTk.PhotoImage(im.resize((800,600)))
can.create_image(400,300,image=img)
can.pack()#洗牌后删除所有牌函数
def delbutton():for i in range(0,52):buttons[i]=bubuttons[i].place_forget()for i in range(0,len(delbuttons)):delbuttons[i].place_forget()tk.after(500,washcard1)#洗牌
def washcard1():#打乱图片列表的顺序random.shuffle(imgs)#创建第一行a=230#b=[0]*13for i in range(0,13):l1=Button(tk,image=imgs[i],compound=CENTER)command = partial(downclik, l1,a,i)#command=upclik(l1,a)结果为:打印了13个hellol1.config(command=command)l1.place(x=a,y=60)a+=20delbuttons.append(l1)#创建第二列a=100for i in range(13,26):l1=Button(tk,image=imgs[i],compound=CENTER)command = partial(leftclik, l1,a,i)l1.config(command=command)l1.place(x=630,y=a)a+=20delbuttons.append(l1)#创建第二行a=230for i in range(26,39):l1=Button(tk,image=imgs[i],compound=CENTER)command = partial(upclik, l1,a,i)l1.config(command=command)l1.place(x=a,y=400)a+=20delbuttons.append(l1)#创建第一列a=100for i in range(39,52):l1=Button(tk,image=imgs[i],compound=CENTER)command = partial(rightclik, l1,a,i)l1.config(command=command)l1.place(x=70,y=a)a+=20delbuttons.append(l1)#出牌点击下移事件
def downclik(button,a,i):if buttons[i]==bu:#若是第一次点击选中button.place(x=a,y=80)#b[i]=1buttons[i]=buttonelse:#第二次点击取消选中button.place(x=a,y=60)#b[i]=0buttons[i]=bu
#出牌点击左移事件
def leftclik(button,a,i):if buttons[i]==bu:#若是第一次点击选中button.place(x=600,y=a)#b[i]=1buttons[i]=buttonelse:#第二次点击取消选中button.place(x=630,y=a)#b[i]=0buttons[i]=bu
#出牌点击上移事件
def upclik(button,a,i):if buttons[i]==bu:#若是第一次点击选中button.place(x=a,y=380)#b[i]=1buttons[i]=buttonelse:#第二次点击取消选中button.place(x=a,y=400)#b[i]=0buttons[i]=bu
#出牌点击右移事件
def rightclik(button,a,i):if buttons[i]==bu:#若是第一次点击选中button.place(x=100,y=a)#b[i]=1buttons[i]=buttonelse:#第二次点击取消选中button.place(x=70,y=a)#b[i]=0buttons[i]=bu
#出牌事件
def upcard():'''for j in range(0,len(sign)):#delbuttons[sign[j]].place_forget()buttons[sign[j]].place_forget()sign.pop()print("hello")'''a=300for i in range(0,52):if buttons[i]!=bu:buttons[i].place(x=a,y=225)#sign.append(i)a+=10
#洗牌事件
def washcard():tk.after(100,delbutton)
#出牌功能按钮
def playcard():button=Button(tk,text='出牌',bd=5,bg='red',command=upcard,width=10,height=2)button.place(x=480,y=270)#洗牌功能按钮
def washbutton():#washcard()不能加()button=Button(tk,text='洗牌',bd=5,bg='red',command=washcard,width=10,height=2)button.place(x=200,y=270)
washbutton()
washcard()
playcard()
tk.mainloop()

python tkinter出牌洗牌相关推荐

  1. python斗地主游戏源码_python实现斗地主分牌洗牌

    本文实例为大家分享了python实现斗地主分牌洗牌的具体代码,供大家参考,具体内容如下 1.建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的. 2.编写一段代码完成洗牌功能,即将刚才的序 ...

  2. python联网斗地主_python实现斗地主分牌洗牌

    本文实例为大家分享了python实现斗地主分牌洗牌的具体代码,供大家参考,具体内容如下 1.建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的. 2.编写一段代码完成洗牌功能,即将刚才的序 ...

  3. 斗地主分牌洗牌(python)

    斗地主分牌洗牌(python) 1.建立一个序列,共54个元素,表示一副扑克牌,初始化时是有顺序的. 2.编写一段代码完成洗牌功能,即将刚才的序列从有序的排列变成随机的无序排列. 3.编写一段代码完成 ...

  4. Python学习笔记之洗牌顺牌

    一.系列缘由   作为一名运维工程师,也一直有一个学习开发的想法,值此之际,不知道博客的下一期目标在哪里,在这思考和犹豫的间隙想着学习和充实一下自己,学习一下python语言,python随着大数据和 ...

  5. 用python实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)

    1.namedtuple:命名元组,可以创建一个没有方法只有属性的类 from collections import namedtuple card = namedtuple('card',['ran ...

  6. python打乱顺序的洗牌函数

    numpy.random.shuffle(x) x:序列或者数组 对于多维数组,只对第一维进行洗牌,子数组的顺序改变了,但是它们的内容保持不变. >>> arr = np.arang ...

  7. php 108张牌洗牌,完美洗牌原理大揭秘 手把手图文教程!呕心沥血的超级干货...

    原标题:完美洗牌原理大揭秘 & 手把手图文教程!呕心沥血的超级干货 先感慨一下,昨晚写到半夜,今天又修改了很多遍,我终于把这篇文章写完了. 然后自夸一下,我敢保证,你从来没有看过像这样的完美洗 ...

  8. Java 存牌洗牌发牌看牌

    package www.test1.com;import java.util.*;/*** 思路:* 存牌(HashMap)* 存下标(ArrayList)* 洗牌(洗下标)* 发牌 (TreeSet ...

  9. C语言 模拟扑克牌新牌洗牌与发牌

    题目: 都已经这样了,斗地主还会远吗 计导课群里大佬发了PPT,就忍不住点开看,看了就觉得很有道理,但是我们不能抄作业,于是我就尝试不用二维数组 改了一次,指针也不用了 很多东西还是不懂,比如写随机数 ...

最新文章

  1. 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现
  2. 挑战弱监督学习的三大热门问题 AutoWSL2019挑战赛正式开赛
  3. Selenium3自动化测试——22.使用DDT运行同一测试用例
  4. H5外部浏览器直接调起微信——通过url协议 weixin:// 判断是否安装微信及启动微信...
  5. HBase + SpringBoot分布式文件存储实战(一)-简介
  6. python区域找图命令_python读取图片任意范围区域
  7. JDK源码(14)-Error、Exception
  8. android sdkversion
  9. c11 语言,语言学C11-1.ppt
  10. jQuery调用或获取iframe中的方法或控件值
  11. 使用Navicat导入备份的数据库文件操作流程
  12. 宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统
  13. python设置excel单元格数据类型为文本_Python xlwt设置excel单元格字体及格式
  14. html 播放ogg,HTML5中video 和 ogg
  15. 慎用P值:它让研究结果不可靠
  16. 计算机网络安全讲座心得,学习信息安全心得体会
  17. 米的换算单位和公式_小学数学单位换算公式大全.doc
  18. vnc好用吗,vnc是什么,vnc好用吗
  19. 带空格直角三角形图案的输出-c++
  20. 攻击JavaWeb应用[3]-SQL注入[1]

热门文章

  1. 2022-2028年中国铁合金市场投资分析及前景预测报告
  2. Java多态和实现接口的类的对象赋值给接口引用的方法
  3. Adobe photoshop工具箱工具名称中英文对照
  4. 管理故事216之008-红灯与警察
  5. C语言 最大公约数与素数探求
  6. python光棍节快乐_光棍节快乐的祝福语12条
  7. 开源!!!100多个常用API接口免费分享!建议收藏!
  8. CS5268/CS5265/CS5266 Type-C转HDMI设计方案|替代CS5268/CS5265/CS5266芯片|GSV2201可完全替代兼容CS5268/CS5265/CS5266
  9. [经验分享]破解Word中保护文档密码
  10. Microsoft SQL Server 2000 下载地址汇总