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. JS中的offsetWidth, clientWidth, scrollWidth, innerWidth, outerWidth, pageXOffset
  2. (最新合集)计算机网络谢希仁第七版 第三章课后答案
  3. 信息系统 项目十大管理和五大过程
  4. 深度分析 Java 的 ClassLoader 机制(源码级别)(转)
  5. VS2013 使用QCustomPlot等三方库如何配置
  6. 前端学习(2215):认识react(2)
  7. 运行后闪退_好消息好消息,王者荣耀闪退问题苹果也修复啦
  8. CPU飙高 解决方法
  9. 【CIKM2020】如何更为合适地评测推荐算法? Top-N物品推荐算法评测设置回顾
  10. 【网络基础编程】第三节 C/S
  11. 激光雕刻机——广告制作新利器
  12. Android Studio一键汉化,分享一个自己写的小工具
  13. 谷歌浏览器常用的搜索语法
  14. 大田第一次和「 IDO 老徐 」连麦:诊断个人 IP
  15. 提升技术领导力实操指南
  16. 3DMAX在三维GIS建模中的应用与优化
  17. (十八)自动装配-@Autowired-构造器,参数,方法,属性
  18. iOS 动态字体设置
  19. Labview学习之俄罗斯方块
  20. 微信小程序(一)基础知识

热门文章

  1. 视频传输解决方案,让视频会议更高效
  2. springcloud适配mysql和oracle数据库
  3. 百度人脸识别搜索是怎么实现的
  4. python智能语音识别_Python 智能语音识别-Speech搭建和使用
  5. 【左程云Java算法】Chapter1-5:用一个栈实现另一个栈的排序
  6. 无线网络的用户隔离功能
  7. adreno性能天梯图_深度学习之GPU显卡性能天梯图
  8. 【技术分享】一封伪造邮件引发的研究
  9. zabbix接合grafana画图
  10. 关于动漫《昨日青空》的网页