`
acen.chen
  • 浏览: 157401 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

扫雷游戏 python实现

阅读更多

扫雷游戏 python实现

借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过。

第一次使用python 的tkinter做gui,从构思到实现,基本1天时间,真是感慨python优越性。

还没考虑可用性问题,UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适。


  1. # -*- coding: utf-8 -*-   
  2. import  random  
  3. import  sys  
  4. from  Tkinter  import  *  
  5.   
  6. class  Model:  
  7.     """  
  8.     核心数据类,维护一个矩阵  
  9.     """   
  10.     def  __init__( self ,row,col):  
  11.         self .width=col  
  12.         self .height=row  
  13.         self .items=[[ 0   for  c  in  range(col)]  for  r  in  range(row)]  
  14.   
  15.     def  setItemValue( self ,r,c,value):  
  16.         """  
  17.         设置某个位置的值为value  
  18.         """   
  19.         self .items[r][c]=value;  
  20.   
  21.     def  checkValue( self ,r,c,value):  
  22.         """  
  23.         检测某个位置的值是否为value  
  24.         """   
  25.         if   self .items[r][c]!=- 1   and   self .items[r][c]==value:  
  26.             self .items[r][c]=- 1   #已经检测过   
  27.             return   True   
  28.         else :  
  29.             return   False   
  30.           
  31.     def  countValue( self ,r,c,value):  
  32.         """  
  33.         统计某个位置周围8个位置中,值为value的个数  
  34.         """   
  35.         count=0   
  36.         if  r- 1 >= 0   and  c- 1 >= 0 :  
  37.             if   self .items[r- 1 ][c- 1 ]== 1 :count+= 1   
  38.         if  r- 1 >= 0   and  c>= 0 :  
  39.             if   self .items[r- 1 ][c]== 1 :count+= 1   
  40.         if  r- 1 >= 0   and  c+ 1 <= self .width- 1 :  
  41.             if   self .items[r- 1 ][c+ 1 ]== 1 :count+= 1   
  42.         if  c- 1 >= 0 :  
  43.             if   self .items[r][c- 1 ]== 1 :count+= 1   
  44.         if  c+ 1 <= self .width- 1  :  
  45.             if   self .items[r][c+ 1 ]== 1 :count+= 1   
  46.         if  r+ 1 <= self .height- 1   and  c- 1 >= 0 :  
  47.             if   self .items[r+ 1 ][c- 1 ]== 1 :count+= 1   
  48.         if  r+ 1 <= self .height- 1  :  
  49.             if   self .items[r+ 1 ][c]== 1 :count+= 1   
  50.         if  r+ 1 <= self .height- 1   and  c+ 1 <= self .width- 1 :  
  51.             if   self .items[r+ 1 ][c+ 1 ]== 1 :count+= 1   
  52.         return  count  
  53.   
  54.       
  55. class  Mines(Frame):  
  56.     def  __init__( self ,m,master= None ):  
  57.         Frame.__init__(self ,master)  
  58.         self .model=m  
  59.         self .initmine()  
  60.         self .grid()  
  61.         self .createWidgets()  
  62.   
  63.    
  64.       
  65.     def  createWidgets( self ):  
  66.         #top=self.winfo_toplevel()   
  67.         #top.rowconfigure(self.model.height*2,weight=1)   
  68.         #top.columnconfigure(self.model.width*2,weight=1)   
  69.         self .rowconfigure( self .model.height,weight= 1 )  
  70.         self .columnconfigure( self .model.width,weight= 1 )  
  71.         self .buttongroups=[[Button( self ,height= 1 ,width= 2 for  i  in  range( self .model.width)]  
  72.                            for  j  in  range( self .model.height)]  
  73.         for  r  in  range( self .model.width):  
  74.             for  c  in  range( self .model.height):  
  75.                 self .buttongroups[r][c].grid(row=r,column=c)  
  76.                 self .buttongroups[r][c].bind( '<Button-1>' , self .clickevent)  
  77.                 self .buttongroups[r][c][ 'padx' ]=r  
  78.                 self .buttongroups[r][c][ 'pady' ]=c  
  79.   
  80.     def  showall( self ):  
  81.         for  r  in  range(model.height):  
  82.             for  c  in  range(model.width):  
  83.                 self .showone(r,c)  
  84.   
  85.     def  showone( self ,r,c):  
  86.         if  model.checkValue(r,c, 0 ):  
  87.             self .buttongroups[r][c][ 'text' ]=model.countValue(r,c, 1 )  
  88.         else :  
  89.             self .buttongroups[r][c][ 'text' ]= 'Mines'   
  90.   
  91.     def  recureshow( self ,r,c):  
  92.         if   0 <=r<= self .model.height- 1   and   0 <=c<= self .model.width- 1 :  
  93.             if  model.checkValue(r,c, 0 and  model.countValue(r,c, 1 )== 0 :  
  94.                 self .buttongroups[r][c][ 'text' ]= ''   
  95.                 self .recureshow(r- 1 ,c- 1 )  
  96.                 self .recureshow(r- 1 ,c)  
  97.                 self .recureshow(r- 1 ,c+ 1 )  
  98.                 self .recureshow(r,c- 1 )  
  99.                 self .recureshow(r,c+ 1 )  
  100.                 self .recureshow(r+ 1 ,c- 1 )  
  101.                 self .recureshow(r+ 1 ,c)  
  102.                 self .recureshow(r+ 1 ,c+ 1 )  
  103.             elif  model.countValue(r,c, 1 )!= 0 :  
  104.                 self .buttongroups[r][c][ 'text' ]=model.countValue(r,c, 1 )  
  105.         else :  
  106.             pass   
  107.                   
  108.               
  109.     def  clickevent( self ,event):  
  110.         """  
  111.         点击事件  
  112.         case 1:是雷,所有都显示出来,游戏结束  
  113.         case 2:是周围雷数为0的,递归触发周围8个button的点击事件  
  114.         case 3:周围雷数不为0的,显示周围雷数  
  115.         """   
  116.         r=int(str(event.widget['padx' ]))  
  117.         c=int(str(event.widget['pady' ]))  
  118.         if  model.checkValue(r,c, 1 ): #是雷   
  119.             self .showall()  
  120.         else : #不是雷   
  121.             self .recureshow(r,c)  
  122.           
  123.           
  124.     def  initmine( self ):  
  125.         """  
  126.         埋雷,每行埋height/width+2个暂定  
  127.         """   
  128.         r=random.randint(1 ,model.height/model.width+ 2 )  
  129.         for  r  in  range(model.height):  
  130.             for  i  in  range( 2 ):  
  131.                 rancol=random.randint(0 ,model.width- 1 )  
  132.                 model.setItemValue(r,rancol,1 )  
  133.   
  134.       
  135.     def  printf( self ):  
  136.         """  
  137.         打印  
  138.         """   
  139.         for  r  in  range(model.height):  
  140.             for  c  in  range(model.width):  
  141.                 print  model.items[r][c],  
  142.             print   '\n'   
  143.              
  144.   
  145. def  new( self ):  
  146.     """  
  147.     重新开始游戏  
  148.     """   
  149.     pass   
  150.   
  151. if  __name__== '__main__' :  
  152.     model=Model(10 , 10 )  
  153.     root=Tk()  
  154.       
  155.     #menu   
  156.     menu = Menu(root)  
  157.     root.config(menu=menu)  
  158.     filemenu = Menu(menu)  
  159.     menu.add_cascade(label="File" , menu=filemenu)  
  160.     filemenu.add_command(label="New" ,command=new)  
  161.     filemenu.add_separator()  
  162.     filemenu.add_command(label="Exit" , command=root.quit)  
  163.   
  164.     #Mines   
  165.     m=Mines(model,root)  
  166.     #m.printf()   
  167.     root.mainloop()  

 

分享到:
评论

相关推荐

    python扫雷游戏设计(课程设计版)

    【Python扫雷游戏设计】是计算机科学与工程学院的一次课程设计任务,旨在培养学生面向对象程序设计的能力,提高代码质量和效率。在这个项目中,学生需要使用Python语言来实现经典的游戏——扫雷。通过这个设计,学生...

    Python 扫雷游戏 完整源代码+图片素材

    Python扫雷游戏是一款经典的逻辑推理游戏,通过编程实现可以让我们深入了解Python编程语言的特性以及游戏逻辑的设计。在这款基于Python3.7版本编写的扫雷游戏中,开发者充分展示了Python的面向对象编程思想、条件...

    PYTHON 游戏:扫雷游戏(基于python实现的可视化游戏)

    PYTHON 游戏:扫雷游戏(基于python实现的可视化游戏) 解压后直接运行 game 即可,游戏需要安装pygame,可以参考requirements文件 运行 game.py 脚本即可开始游戏 操作方式:通过鼠标点击位置,排除地雷(1:1还原...

    自动扫雷系统+(Python)

    而这个Python实现的自动扫雷系统,通过算法设计,能够在一定程度上减少这种尝试,提高解谜效率。附带的Word报告文档很可能会详细介绍系统的实现原理、算法设计、性能评估以及可能遇到的挑战。 【标签】:“扫雷、...

    游戏开发-基于Python实现的怀旧游戏之扫雷游戏.zip

    游戏开发_基于Python实现的怀旧游戏之扫雷游戏

    Python实现的扫雷游戏源码.pdf

    Python实现的扫雷游戏源码.pdf

    python实现的扫雷游戏项目源码

    python实现的扫雷游戏项目源码,直接运行main主方法即可。

    Python实现自动扫雷游戏的方法源码

    Python实现自动扫雷游戏的方法源码 扫雷游戏大家再熟悉不过了,原本互联网游戏没有盛行的时候,本机自带的扫雷为我们的业余生活增添了许多乐趣。用Python代码实现自动扫雷,相信一定很好玩。

    Python简易扫雷素材包(图片+代码)

    在本资源包中,我们有一个基于Python实现的简易扫雷游戏。这个项目是初学者学习Python编程和图形用户界面(GUI)设计的一个很好的实践案例。下面将详细解析其中涉及的知识点: 1. **Python基础**:`扫雷.py` 文件是...

    Python课程设计开发的一款扫雷小游戏python源码+详细注释.zip

    Python课程设计开发的一款扫雷小游戏python源码+详细注释.zipPython课程设计开发的一款扫雷小游戏python源码+详细注释.zipPython课程设计开发的一款扫雷小游戏python源码+详细注释.zipPython课程设计开发的一款扫雷...

    python扫雷游戏项目源码.rar

    【Python扫雷游戏项目源码】是一个基于Python编程语言和Pygame库实现的扫雷游戏。这个项目旨在帮助学习者了解如何用Python进行游戏开发,同时熟悉Pygame库的使用。下面将详细介绍该项目中的关键知识点。 1. **...

    python扫雷小游戏

    在扫雷游戏中,主要涉及以下几个Python编程和游戏设计的知识点: 1. **基本结构**:游戏通常包含初始化、主循环和退出三个部分。初始化阶段设置游戏环境,如窗口大小、背景颜色等;主循环处理用户输入、更新游戏...

    Python大作业扫雷游戏源代码(高分项目).zip

    Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。 Python大作业扫雷游戏源代码(高分项目).zip 该...

    博文"用python tkinter组件实现扫雷游戏"源程序

    用python tkinter组件实现扫雷游戏,仅用198条语句。程序用到多项技术:tkinter按钮事件函数实现多个参数,Timer秒表实现,为tkinter按钮绑定多个事件,且每个事件的事件函数有多个参数等等

    python实现扫雷游戏

    主要为大家详细介绍了python实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    python+pygame实现扫雷游戏

    python+pygame实现扫雷游戏,逐步逐知识点详细讲解。 https://blog.csdn.net/cxhold/article/details/140321857 https://blog.csdn.net/cxhold/article/details/140331472 ...

    使用Python的扫雷游戏

    扫雷是一款单人益智游戏,相信大部分人都在以前上微机课的时候玩过。游戏的目标是借助每个区域中相邻地雷数量的线索,清除包含隐藏的“地雷”或炸弹的...今天我们用 Python 完成这个小程序,并且用AI来学习并实现它。

    Python pygame 重写经典扫雷游戏,豪华版,漂亮界面

    本项目基于pygame库重写了经典的扫雷游戏,提供了豪华版的游戏体验,拥有精致的界面设计,使得玩家在享受游戏乐趣的同时,也能体验到Python编程的魅力。 首先,让我们深入理解一下pygame库。Pygame是Python的一个...

Global site tag (gtag.js) - Google Analytics