扫雷游戏 python实现
借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过。
第一次使用python 的tkinter做gui,从构思到实现,基本1天时间,真是感慨python优越性。
还没考虑可用性问题,UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适。
-
-
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):
-
-
-
-
self
.items[r][c]=value;
-
-
def
checkValue(
self
,r,c,value):
-
-
-
-
if
self
.items[r][c]!=-
1
and
self
.items[r][c]==value:
-
self
.items[r][c]=-
1
-
return
True
-
else
:
-
return
False
-
-
def
countValue(
self
,r,c,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
):
-
-
-
-
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(
'<Button-1>'
,
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):
-
-
-
-
-
-
-
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
):
-
-
-
-
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(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)
-
-
-
m=Mines(model,root)
-
-
root.mainloop()
分享到:
相关推荐
【Python扫雷游戏设计】是计算机科学与工程学院的一次课程设计任务,旨在培养学生面向对象程序设计的能力,提高代码质量和效率。在这个项目中,学生需要使用Python语言来实现经典的游戏——扫雷。通过这个设计,学生...
Python扫雷游戏是一款经典的逻辑推理游戏,通过编程实现可以让我们深入了解Python编程语言的特性以及游戏逻辑的设计。在这款基于Python3.7版本编写的扫雷游戏中,开发者充分展示了Python的面向对象编程思想、条件...
PYTHON 游戏:扫雷游戏(基于python实现的可视化游戏) 解压后直接运行 game 即可,游戏需要安装pygame,可以参考requirements文件 运行 game.py 脚本即可开始游戏 操作方式:通过鼠标点击位置,排除地雷(1:1还原...
而这个Python实现的自动扫雷系统,通过算法设计,能够在一定程度上减少这种尝试,提高解谜效率。附带的Word报告文档很可能会详细介绍系统的实现原理、算法设计、性能评估以及可能遇到的挑战。 【标签】:“扫雷、...
游戏开发_基于Python实现的怀旧游戏之扫雷游戏
Python实现的扫雷游戏源码.pdf
python实现的扫雷游戏项目源码,直接运行main主方法即可。
Python实现自动扫雷游戏的方法源码 扫雷游戏大家再熟悉不过了,原本互联网游戏没有盛行的时候,本机自带的扫雷为我们的业余生活增添了许多乐趣。用Python代码实现自动扫雷,相信一定很好玩。
在本资源包中,我们有一个基于Python实现的简易扫雷游戏。这个项目是初学者学习Python编程和图形用户界面(GUI)设计的一个很好的实践案例。下面将详细解析其中涉及的知识点: 1. **Python基础**:`扫雷.py` 文件是...
Python课程设计开发的一款扫雷小游戏python源码+详细注释.zipPython课程设计开发的一款扫雷小游戏python源码+详细注释.zipPython课程设计开发的一款扫雷小游戏python源码+详细注释.zipPython课程设计开发的一款扫雷...
【Python扫雷游戏项目源码】是一个基于Python编程语言和Pygame库实现的扫雷游戏。这个项目旨在帮助学习者了解如何用Python进行游戏开发,同时熟悉Pygame库的使用。下面将详细介绍该项目中的关键知识点。 1. **...
在扫雷游戏中,主要涉及以下几个Python编程和游戏设计的知识点: 1. **基本结构**:游戏通常包含初始化、主循环和退出三个部分。初始化阶段设置游戏环境,如窗口大小、背景颜色等;主循环处理用户输入、更新游戏...
Python大作业扫雷游戏源代码(高分项目).zip 该项目是个人大作业项目源码,评审分达到95分以上,都经过严格调试,确保可以运行!小白也可实战,放心下载使用。 Python大作业扫雷游戏源代码(高分项目).zip 该...
用python tkinter组件实现扫雷游戏,仅用198条语句。程序用到多项技术:tkinter按钮事件函数实现多个参数,Timer秒表实现,为tkinter按钮绑定多个事件,且每个事件的事件函数有多个参数等等
主要为大家详细介绍了python实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
python+pygame实现扫雷游戏,逐步逐知识点详细讲解。 https://blog.csdn.net/cxhold/article/details/140321857 https://blog.csdn.net/cxhold/article/details/140331472 ...
扫雷是一款单人益智游戏,相信大部分人都在以前上微机课的时候玩过。游戏的目标是借助每个区域中相邻地雷数量的线索,清除包含隐藏的“地雷”或炸弹的...今天我们用 Python 完成这个小程序,并且用AI来学习并实现它。
本项目基于pygame库重写了经典的扫雷游戏,提供了豪华版的游戏体验,拥有精致的界面设计,使得玩家在享受游戏乐趣的同时,也能体验到Python编程的魅力。 首先,让我们深入理解一下pygame库。Pygame是Python的一个...