python游戏脚本实例-基于Python实现的扫雷游戏实例代码
本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过。
本例使用python的tkinter做gui,由于没考虑可用性问题,因此UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适,感兴趣的读者可以尝试一下!
具体的功能代码如下:
# -*- 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
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实现的扫雷游戏实例代码相关推荐
- python嵌入式脚本_基于Python的嵌入式脚本研究
基于Python的嵌入式脚本研究 王国强;张贝克 [期刊名称]<计算机应用与软件> [年(卷),期]2010(027)003 [摘要]嵌入脚本语言到应用程序当中在用户自动化和个性化定制方面 ...
- python软件测试脚本_基于Python的实时嵌入式软件测试脚本
摘 要:计算机技术应用的不断普及,使得实时嵌入式软件在航空.航天.工业控制.交通.医疗和军事安全等诸多领域发挥着愈来愈重要的作用.不难看出,这些领域对软件的可靠性有很严格的要求,因为该领域的软件一旦失 ...
- python签到脚本_基于Python实现签到脚本过程解析
无聊刷日剧,看到签到断了好久,简单写了个脚本,通过模拟抓包的方式实现 1.先登录到字幕组网站获取token 2.用获取到的token登录到人人活动页面获取cookie 3.用获取到的cookie进行签 ...
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...
- Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)
Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...
- Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%
Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...
- python sql脚本_使用Python SQL脚本进行数据采样
python sql脚本 介绍 (Introduction) The Python programming language is object oriented, easy to use and, ...
- Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)
Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...
- 扫雷java程序算法设计_基于Java的Windows扫雷游戏的设计与实现毕业论文+任务书+翻译及原文+源码+辅导视频...
基于Java的Windows扫雷游戏的设计与实现 摘 要 扫雷这款游戏有着很长的历史,从扫雷被开发出来到现在进行了无数次的优化,这款游戏变得越来越让人爱不释手了,简单的玩法在加上一个好看的游戏界面,每 ...
- python装饰器实例-基于Python 装饰器装饰类中的方法实例
title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...
最新文章
- 一个基于webrick 的简单web服务器
- 章节七、4-Sets
- DebootstrapChroot
- 阿里专家分享:企业级大数据轻量云实践
- sql中实现取得某字段中数字值
- java自动依照日期建表,脚本根据一个表中的日期字段填充每月汇总表
- spring容器bean的作用域 spring容器是否是单例的一些问题
- 【牛客 - 181D】小叶的巡查(树的直径,数学)
- 网段和子网的区别_石笼网袋和石笼网的区别
- 【嵌入式Linux】嵌入式项目实战之七步从零编写带GUI的应用之显示系统、输入系统、文字系统
- ubuntu14.04中mysql的安裝及utf8编码集配置
- hltm连接css的link,CSS 链接(link)
- ubuntu linux 14.04 apache,在 Ubuntu 14.04 中Apache从2.2迁移到2.4的问题
- QComboBox代理
- 免费快递查询API接口
- 数据分析入门篇(一)
- 小猿圈Java学习分享2019Java面试题
- jmeter安装(jmeter安装配置)
- 4G物联网卡的几点优势
- 关于左右布局,一边高度不定,另一边和不定高度等高的CSS布局