使用python的tkinter做gui,由于没考虑可用性问题,因此UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适。

python扫雷游戏的完整代码: 代码示例:

#!/usr/bin/python

#

# -*- coding: utf-8 -*-

import random

import sys

from Tkinter import *

class Model:

"""

核心数据类,维护一个矩阵

"""

def __init__(self,row,col):

self.width=col

self.height=row

self.items=[[0 for c in range(col)] for r in range(row)]

def setItemValue(self,r,c,value):

"""

设置某个位置的值为value

"""

self.items[r][c]=value;

def checkValue(self,r,c,value):

"""

检测某个位置的值是否为value

"""

if self.items[r][c]!=-1 and self.items[r][c]==value:

self.items[r][c]=-1 #已经检测过

return True

else:

return False

# www.#

def countValue(self,r,c,value):

"""

统计某个位置周围8个位置中,值为value的个数

"""

count=0

if r-1>=0 and c-1>=0:

if self.items[r-1][c-1]==1:count+=1

if r-1>=0 and c>=0:

if self.items[r-1][c]==1:count+=1

if r-1>=0 and c+1<=self.width-1:

if self.items[r-1][c+1]==1:count+=1

if c-1>=0:

if self.items[r][c-1]==1:count+=1

if c+1<=self.width-1 :

if self.items[r][c+1]==1:count+=1

if r+1<=self.height-1 and c-1>=0:

if self.items[r+1][c-1]==1:count+=1

if r+1<=self.height-1 :

if self.items[r+1][c]==1:count+=1

if r+1<=self.height-1 and c+1<=self.width-1:

if self.items[r+1][c+1]==1:count+=1

return count

class Mines(Frame):

def __init__(self,m,master=None):

Frame.__init__(self,master)

self.model=m

self.initmine()

self.grid()

self.createWidgets()

def createWidgets(self):

#top=self.winfo_toplevel()

#top.rowconfigure(self.model.height*2,weight=1)

#top.columnconfigure(self.model.width*2,weight=1)

self.rowconfigure(self.model.height,weight=1)

self.columnconfigure(self.model.width,weight=1)

self.buttongroups=[[Button(self,height=1,width=2) for i in range(self.model.width)]

for j in range(self.model.height)]

for r in range(self.model.width):

for c in range(self.model.height):

self.buttongroups[r][c].grid(row=r,column=c)

self.buttongroups[r][c].bind('',self.clickevent)

self.buttongroups[r][c]['padx']=r

self.buttongroups[r][c]['pady']=c

def showall(self):

for r in range(model.height):

for c in range(model.width):

self.showone(r,c)

def showone(self,r,c):

if model.checkValue(r,c,0):

self.buttongroups[r][c]['text']=model.countValue(r,c,1)

else:

self.buttongroups[r][c]['text']='Mines'

def recureshow(self,r,c):

if 0<=r<=self.model.height-1 and 0<=c<=self.model.width-1:

if model.checkValue(r,c,0) and model.countValue(r,c,1)==0:

self.buttongroups[r][c]['text']=''

self.recureshow(r-1,c-1)

self.recureshow(r-1,c)

self.recureshow(r-1,c+1)

self.recureshow(r,c-1)

self.recureshow(r,c+1)

self.recureshow(r+1,c-1)

self.recureshow(r+1,c)

self.recureshow(r+1,c+1)

elif model.countValue(r,c,1)!=0:

self.buttongroups[r][c]['text']=model.countValue(r,c,1)

else:

pass

def clickevent(self,event):

"""

点击事件

case 1:是雷,所有都显示出来,游戏结束

case 2:是周围雷数为0的,递归触发周围8个button的点击事件

case 3:周围雷数不为0的,显示周围雷数

"""

r=int(str(event.widget['padx']))

c=int(str(event.widget['pady']))

if model.checkValue(r,c,1):#是雷

self.showall()

else:#不是雷

self.recureshow(r,c)

def initmine(self):

"""

埋雷,每行埋height/width+2个暂定

"""

r=random.randint(1,model.height/model.width+2)

for r in range(model.height):

for i in range(2):

rancol=random.randint(0,model.width-1)

model.setItemValue(r,rancol,1)

def printf(self):

"""

打印

"""

for r in range(model.height):

for c in range(model.width):

print model.items[r][c],

print '/n'

def new(self):

"""

重新开始游戏

"""

pass

if __name__=='__main__':

model=Model(10,10)

root=Tk()

#menu

menu = Menu(root)

root.config(menu=menu)

filemenu = Menu(menu)

menu.add_cascade(label="File", menu=filemenu)

filemenu.add_command(label="New",command=new)

filemenu.add_separator()

filemenu.add_command(label="Exit", command=root.quit)

#Mines

m=Mines(model,root)

#m.printf()

root.mainloop()

python二维游戏示例_Python 扫雷游戏的简单例子相关推荐

  1. python二维数组操作_Python二维数组应用与操作

    课课家将会在这里为大家详细的介绍一下Python二维数组的相关应用方法以及定义方式,相信朋友们可以从中学习到更多的知识. Python数组的应用中在实际编程中是一个非常重要的应用技术,作为Python ...

  2. python二维数组表示_python中二维数组中的数如何表达

    python二维数组如何挑选出一定范围的数值? 比如说有一个二维数组 13.1 13.2 13.3 13.4 15.5 15.0 45.2 22.3 22.3 3 [j for i in a for ...

  3. python扫雷游戏设计_Python 扫雷游戏 完整源代码+图片素材

    设计需求 基础功能 实现windows扫雷游戏初级的全部功能 扫雷尺寸99 方格 每一个方格尺寸3030 游戏初始化时,随机分布10个地雷 当左键点击雷区任意方格时,则游戏开始 鼠标左键点击为翻开方格 ...

  4. python 二维数组赋值_python日常注意小知识集锦

    python日常注意小知识集锦 @toc sort()和sorted() 以列表结果为例 - sort()没有结果返回,但对列表进行了排序(列表本身被改变) - sorted(),全局函数,有结果返回 ...

  5. python二维列表添加_Python二维数组

    二维数组是数组中的数组. 它是一个数组的数组. 在这种类型的数组中,数据元素的位置由两个索引,而不是一个索引来引用. 所以它表示了一个包含行和列的数据的表. 在下面的二维数组的例子中,每个数组元素本身 ...

  6. python 二维列表相加_python怎么对列表求和

    Python如何让一个列表的前几个数字相加CSS布局HTML小编今天和大家分享和 如[1,2这样行不行 A=[1,2,3,4,5] suma=0 for i in range(3): suma += ...

  7. python 二维数组 长度_Python创建二维数组的正确姿势

    ↑↑↑点击上方"蓝字",关注"极客猴" 如果你喜欢极客猴,可以把我置顶或加为星标 题图:by watercolor.illustrations from Ins ...

  8. python 二维数组赋值_Python中多个变量的灵活处理

    我们都知道Python是一个非常灵活的语言,以至于如果它不是你的第一门语言,你会发现它总能给你各种各样的惊喜,让你忍不住惊叹:woc,还有这种操作.尤其我在系统地学习Python之前是Java后端出身 ...

  9. python 二维列表切片_Python中mutable与immutable和二维列表的初始化问题

    初始化一个shape为(3,3)的二维列表,正确的写法是这样的: 但是,如果写成这样: a = [[None] * 3] * 3print(a) # 输出 : [[None, None, None], ...

最新文章

  1. Cocos2d-x3.2 重力感应
  2. 全局变量引起的BUG
  3. 系统故事 --- 让系统讲故事
  4. adaboost算法java_Adaboost 算法实例解析
  5. 经典C语言程序100例之八一
  6. Oracle 的一些语句
  7. html5 canvas文字颜色,我可以通过HTML5 Canvas中的字符文本颜色来做吗?
  8. 解锁秋天\秋季借势的海波设计密码!
  9. docker 厂商 容器_疫情期间,Docker让运维人员雪上加霜
  10. Iphone获取本地ip地址
  11. TCP\IP协议实践:wireshark抓包分析之链路层与网络层
  12. Atitit. 解释器模式框架选型 and应用场景attilax总结 oao
  13. 获取原始NMEA 0183语句的方法
  14. 【微信登录】APP/网站应用的微信扫码登录
  15. SLAM导航机器人零基础实战系列:(七)语音交互与自然语言处理——2.机器人语音交互实现...
  16. cad没有命令输入框_cad2017命令输入框没了
  17. 安卓手机获取root权限---修补面具root步骤解析
  18. 如何在EF中实现left join(左联接)查询
  19. es - elasticsearch - search - DSL - specialized - pinned
  20. html css齿轮滚动特效,CSS_纯CSS3实现滚动的齿轮动画效果,纯CSS写的齿轮效果。支持chrome - phpStudy...

热门文章

  1. 谷歌浏览器Chrome闪退
  2. 储能控制器,风光储、风光储并网直流微电网simulink仿真模型
  3. 火溶CEO王伟峰:Unity3D手机网游开发
  4. 现在买房子,傻瓜才掏钱
  5. H.264中的NAL技术
  6. 在微型计算机系统组成中 把微处理器cpu,计算机基础知识及答案(二)
  7. can--saj1000设计总结(转)
  8. 经典24点游戏(简单易懂的回溯法)
  9. erp服务器安装Linux,在Ubuntu 18.04系统中安装Dolibarr ERP/CRM的步骤
  10. Xlinx异步FIFO的注意点