本文为大家分享了python实现扫雷游戏的具体代码,供大家参考,具体内容如下

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

本例使用python的tkinter做gui,由于没考虑可用性问题,因此UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适,感兴趣的读者可以尝试一下!

具体的功能代码如下:

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

import random

import sys

from Tkinter import *

'''

想要学习Python?

'''

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实现扫雷游戏相关推荐

  1. python扫雷游戏课程设计小组任务计划与分配表_Python开源扫雷游戏由网瘾少年制作,转手后月入18K,附赠所有源文件...

    原标题:Python开源扫雷游戏由网瘾少年制作,转手后月入18K,附赠所有源文件 最近入手一款Python扫雷游戏,迫不及待的打开源文件试玩几次之后,颇感惭愧-惭愧这么经典的游戏居然不是由我这种&qu ...

  2. 课程设计小组报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏是一个娱乐性的游戏开发,可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的欢迎.本次游戏 ...

  3. python贪吃蛇的实验报告_贪吃蛇游戏课程设计实验报告

    DOC 可编辑修改 -------- 为你整理各种最新最全办公范文 -------- 双击可以删除 爱心 --- 用心 --- 恒心 贪吃蛇游戏课程设计实验报告 辽 宁 科 技 大 学 课程设计说明书 ...

  4. 【Python飞机大战课程设计及源代码】

    摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能.Python是一 ...

  5. java游戏课程设计报告_java课程设计报告游戏_相关文章专题_写写帮文库

    时间:2019-05-14 00:00:44 作者:admin 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 ...

  6. 猜数字小c语言游戏课程任务书,猜数字游戏课程设计.doc

    猜数字游戏课程设计.doc 1(c/c程序设计课程设计)设 计 说 明 书猜数字游戏的设计与实现学 生 姓 名学 号班 级成 绩指 导 教 师计算机科学与技术系2010 年 7 月 9 日C/C程序设 ...

  7. Java拼图游戏总结,Java拼图游戏课程设计报告

    Java拼图游戏课程设计报告 JavaJava 程序设计与应用开发 课程设计报告程序设计与应用开发 课程设计报告 设计题目 拼图大作战 学生姓名 学生班级 学生学号 指导教师 完成时间2016 年 0 ...

  8. c语言经典案例 俄罗斯方块,C语言实现俄罗斯方块经典游戏课程设计

    C语言实现俄罗斯方块经典游戏课程设计 计算机实习报告 一.功能说明 1.1总体功能说明 本工程用C++语言实现了俄罗斯方块经典游戏. 俄罗斯方块游戏特点:俄罗斯方块的基本规则是通过键盘控制移动.旋转和 ...

  9. java课程设计拼图_java拼图游戏课程设计报告

    java拼图游戏课程设计报告 砾寸椒涩藕矾糯陋捕炬洁困喘港划舟逃豺涌锤芳喜胺递龚乏埔跺摩实阿信颊立蹲稿船纽臃瘪自康嘱脖究绢术拱虑犹犀棉宜炙转鸦半甘哨疗墓暑蛊渤幽峭咀豺虫拘召饭莽畜穗篷姿钟逻捞跨瀑拿丈土 ...

最新文章

  1. 简议使用业务模型驱动进行软件的设计
  2. mac idea用自带的maven还是_苹果电脑自带截图工具怎么用?mac自带截屏工具使用技巧分享
  3. Unity Shader 屏幕后效果——高斯模糊
  4. 简单的XML和JSON数据的处理
  5. 静态资源java 配置文件_java web 静态资源访问配置三种方式
  6. 统计学怎么求加权指数_我要自学生信之统计学:统计学概述(一)
  7. 火了!16岁高中生做的 Python 3.9 八大新特性图
  8. 基于Rails的blog: typo
  9. jquery生成一个li_jquery-创建元素和添加子元素
  10. xfce4终端的字体颜色修改
  11. [COCI] Zamjena
  12. java获取keyvault_ARM Template 结合key vault存储机密信息 (一)
  13. mysql是开放源代码_但这可能是很因难的,因为MySQL是开放源代码的,所以任何人...
  14. ubuntu安装nginx-1.11.7
  15. 为什么黑客都用python-为什么如此多的黑客都用python?
  16. 不当 95% 的劣质勤奋者
  17. Java 编码规范11(安全规约)
  18. 高速公路综合信息管理系统
  19. spyder python调试查看类信息_Python调试工具-Spyder
  20. 关于信息检索(IR)、搜索引擎的学与思

热门文章

  1. Git Windows安装手册
  2. SonarQube开机自启动
  3. mysql in 按顺序排序_mysql in 排序 也可以按in里面的顺序来排序
  4. php写linux应用程序,Linux应用程序使用写文件调试程序的方法
  5. 银河麒麟通过命令行安装软件没有安装上
  6. QtCreate由MinGW编译的项目,换为MSVC编译器后编译无法通过
  7. 土木转计算机 但计算机学院不好,土木妹子转计算机,较高三维水科研,求指导!...
  8. mysql免安装如何改密码_mysql免安装版配置与修改密码的教程
  9. python 函数进度条怎么_刷新你对进度条的认识,用python写出不一样的进度条
  10. matlab节点导纳阵求逆,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程