当前位置:   article > 正文

基于Python/Tkinter的拼图单机小游戏_tk做拼图游戏

tk做拼图游戏

这是很早之前写的拼图游戏,基于Py/Tk,今天翻出来,然后重新整理,并且发布出来,供大家参考学习,自己看CSDN里有很多了类似的游戏代码,虽然代码逻辑上大同小异,但每个开发者都有自己独特的开发个性和习惯,这并无优劣,而且都可以从代码中都可以一窥究竟。下午整理代码的时候才发现之前写Code的时候,居然一句注释也没有加,搞得自己又重新梳理了一遍Code逻辑,才将注释全部添加上,不添加注释实在不是个好的习惯。虽然拼图小游戏虽然只有几百行的代码,但是对于了解Tkinter的模块以及熟悉Py编程却是既有好处,废话少说,直接上代码吧

主界面
主界面

4*3模式

3*3模式

游戏图片选择弹窗

配置文件包

1.类初始化

  1. import random
  2. import os
  3. import Pmw
  4. import time
  5. from Tkinter import *
  6. from PIL import Image,ImageTk
  7. class image_crop():
  8. #拼图游戏
  9. def __init__(self):
  10. self.now_path=os.getcwd()
  11. self.num_page=0

2.设置--图片设置界面--游戏图片的选择

  1. def image_set(self):
  2. #设置界面关于拼图游戏中--游戏图片的选择
  3. path1=[]
  4. path_flod=self.now_path+"\image_\\"
  5. for i in(os.listdir(path_flod)):
  6. path1.append(path_flod+i)
  7. main_frame1=self.root.grid_slaves(row=1,column=0)
  8. main_frame1[0].grid_remove()
  9. self.imageset_toplevel=Frame(self.root)
  10. self.imageset_toplevel.grid(row=1,column=0,columnspan=3,rowspan=3,sticky=NSEW)
  11. frame_titleimage=Frame(self.imageset_toplevel)
  12. frame_titleimage.pack(side=TOP)
  13. label_tag=Label(frame_titleimage,text=u"图片名称:",width=10,font=('Verdana bold',10))
  14. label_tag.grid(row=0,column=0,sticky='ws')
  15. self.image_name=StringVar()
  16. label_name=Label(frame_titleimage,textvariable=self.image_name,width=20,font=('Verdana bold',10))
  17. label_name.grid(row=0,column=1)
  18. self.image_name.set(' ')
  19. but=Button(frame_titleimage,text=u"确定",width=10,font=('Verdana bold',9),command=sure_comd)
  20. but.grid(row=0,column=2)
  21. self.widgets_group=Pmw.ScrolledFrame(self.imageset_toplevel,usehullsize=1,frame_relief="flat",hull_width=500,
  22. hull_height=400,
  23. scrollmargin=0)
  24. self.widgets_group.pack(side=TOP,fill=BOTH,expand=1)
  25. frame_page=Frame(self.imageset_toplevel)
  26. frame_page.pack(side=TOP)
  27. up_page=Button(frame_page,text=u"上一页",width=10,font=('Verdana bold',9),command=test_up)
  28. up_page.pack(side=LEFT)
  29. self.ent=StringVar()
  30. entry_page=Entry(frame_page,width=10,font=('Verdana bold',10),textvariable=self.ent,state='readonly')
  31. entry_page.pack(side=LEFT)
  32. self.ent.set(u"第1页")
  33. down_page=Button(frame_page,text=u"下一页",width=10,font=('Verdana bold',9),command=test_down)
  34. down_page.pack(side=LEFT)
  35. for i in range(3):
  36. for j in range(3):
  37. #生成图片标签Label
  38. img_labelq=Label(self.widgets_group.interior(),borderwidth=2,relief='groove')
  39. img_labelq.grid(row=i,column=j)
  40. #加载图片
  41. image_1(path1[0])
  42. image_2(path1[1])
  43. image_3(path1[2])
  44. image_4(path1[3])
  45. image_5(path1[4])
  46. image_6(path1[5])
  47. image_7(path1[6])
  48. image_8(path1[7])
  49. image_9(path1[8])
  50. #注意:这里需要注意一下,图片文件至少需要大于9张,如果不是,系统报错,因为时间关系这块没有修改

3.设置---图片设置界面--鼠标选中图片后的操作

  1. def comd_show(event,fr_,path_img):
  2. #左键-选中图片后--加载图片名称
  3. fr_.configure(relief='solid')
  4. self.root.update()
  5. time.sleep(0.2)
  6. fr_.configure(relief='groove')
  7. image_path=os.path.basename(path_img)
  8. self.image_name.set(image_path.decode("cp936"))
  9. def doublue_comd(event,path_img):
  10. #右键-选中图片后--弹窗显示选中图片大图
  11. imageshow_toplevel=Toplevel()
  12. imageshow_toplevel.geometry('+400+140')
  13. imageshow_toplevel.overrideredirect(0)
  14. image_show=Image.open(path_img)
  15. if image_show.size[1]>image_show.size[0]:
  16. self.size_img_2=image_show.resize((350, 450))
  17. elif image_show.size[1]<image_show.size[0]:
  18. self.size_img_2=image_show.resize((450, 350))
  19. self.showimage=ImageTk.PhotoImage(self.size_img_2)
  20. img_label_show=Label(imageshow_toplevel,borderwidth=2,relief='groove',image=self.showimage)
  21. img_label_show.grid(row=0,column=0)

4.设置---图片设置界面--所有图片包中图片显示模块

注:这部分代码虽然有些重复,有优化的地方,但逻辑上完备的,这里先将代码贴出来,如果读者有兴趣,可以将此部分优化

  1. def image_1(path_image):
  2. #图片选择器---加载第一张图片
  3. image_set_1=Image.open(path_image)
  4. if image_set_1.size[1]>image_set_1.size[0]:
  5. self.size_img_1=image_set_1.resize((128, 170))
  6. elif image_set_1.size[1]<image_set_1.size[0]:
  7. self.size_img_1=image_set_1.resize((170, 128))
  8. self.setimage_label_1=ImageTk.PhotoImage(self.size_img_1)
  9. qws1=self.widgets_group.interior().grid_slaves(row=0,column=0)
  10. qws1[0].configure(image=self.setimage_label_1,relief='groove')
  11. qws1[0].bind("<Button-1>",lambda e,fr_=qws1[0],path_img=path_image: comd_show(e,fr_,path_img))
  12. qws1[0].bind("<Button-3>",lambda e,path_img=path_image: doublue_comd(e,path_img))
  13. def image_2(path_image):
  14. #图片选择器---加载第二张图片
  15. image_set_2=Image.open(path_image)
  16. if image_set_2.size[1]>image_set_2.size[0]:
  17. self.size_img_2=image_set_2.resize((128, 170))
  18. elif image_set_2.size[1]<image_set_2.size[0]:
  19. self.size_img_2=image_set_2.resize((170, 128))
  20. self.setimage_2=ImageTk.PhotoImage(self.size_img_2)
  21. qws2=self.widgets_group.interior().grid_slaves(row=0,column=1)
  22. qws2[0].configure(image=self.setimage_2,relief='groove')
  23. qws2[0].bind("<Button-1>",lambda e,fr_=qws2[0],path_img=path_image: comd_show(e,fr_,path_img))
  24. qws2[0].bind("<Button-3>",lambda e,path_img=path_image: doublue_comd(e,path_img))
  25. def image_3(path_image):
  26. #图片选择器---加载第二张图片
  27. image_set_3=Image.open(path_image)
  28. if image_set_3.size[1]>image_set_3.size[0]:
  29. self.size_img_3=image_set_3.resize((128, 170))
  30. elif image_set_3.size[1]<image_set_3.size[0]:
  31. self.size_img_3=image_set_3.resize((170, 128))
  32. self.setimage_label_3=ImageTk.PhotoImage(self.size_img_3)
  33. qws3=self.widgets_group.interior().grid_slaves(row=0,column=2)
  34. qws3[0].configure(image=self.setimage_label_3,relief='groove')
  35. qws3[0].bind("<Button-1>",lambda e,fr_=qws3[0],path_img=path_image: comd_show(e,fr_,path_img))
  36. qws3[0].bind(
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/230015
推荐阅读
相关标签
  

闽ICP备14008679号