python扫雷游戏课程设计小组任务计划与分配表_python实现扫雷游戏

本文为大家分享了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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间同步服务器java,Windows 配置时间同步服务器以及配置时间同步间隔

如何修改windows下的时间同步间隔操作步骤如下&#xff1a;打开注册表&#xff1a;在“开始”菜单→“运行”项下(或按WinR)输入“Regedit”进入注册表编辑器。2.修改默认时间服务器IP&#xff1a;展开HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Services->W…

房价python爬取_python爬取并解析 重庆2015-2019房价走势

1 #! /usr/bin/env python2 #-*- coding:utf-8 -*-34 5 Created on 2019年11月24日67 author: Admin8 910 importrequests11 from lxml importetree12 importtime13 importcsv1415 16 方法名称&#xff1a;spider17 功能&#xff1a; 爬取目标网站&#xff0c;并以源码文本18 参…

PHP递归删除目录面试题,PHP 递归删除目录中文件

/*** 递归删除目录中文件* param $pathname* return bool*/public static function delDir($pathname)//要删除的目录{if(file_exists($pathname)) {if(is_file($pathname)) {unlink($pathname);} else {$dir opendir($pathname);while($filename readdir($dir)) {if($filena…

python中 12_python编程中常用的12种基础知识总结

1、正则表达式替换目标: 将字符串line中的 overview.gif 替换成其他字符串>>> line >>> more.compile(r(?<SRC)"([\w\.])",re.I)>>> mo.sub(r"\1****",line)>>> mo.sub(rreplace_str_\1,line)< /span>>&…

php smarty分页原理,SMARTY分页详解

<?phprequire_once (include/common.inc.php);//这里是个接口common.inc.php里面包函了一些常用到的函数类库以及SMARTYinclude_once(header.php);//调用头部信息,SESSION的信息全都保存在这里,这样做的好处是几乎所有的页面都不需要在开头输入session_start();$smarty new…

python十个一行_python 如何将一系列数字十个一行输出

展开全部答案如下&#xff1a;代码详解1、使用循环输出列表&#xff0c;利用 计数器控制输出数量&#xff0c;当输出到第十个&#xff0c;62616964757a686964616fe4b893e5b19e31333365663532计数器归零&#xff0c;重新开始计数2、print输出增加end参数可以控制输出后以什么结尾…

sql oracle 递归查询语句,Oracle使用SQL语句进行递归查询

idpid问题描述&#xff1a;102031415262738495取出id为1及其下属的所有的数据,结果为下idpid1031417384SQL> CREATE TABLE TBL_TEST2 (3 ID NUMBER,4 NAME VARCHAR2(100 BYTE),5 PID NUMBER DEFAULT 06 );Table createdS…

python中与0xf2相等的是_python中__str__与__repr__

(1)背景python中&#xff0c;对于类(自定义类)的实例对象的默认显示既没有太大用处&#xff0c;也不美观。比如&#xff1a;1 classadder:2 def __init__(self,value0):3 self.datavalue #初始化数据4 def __add__(self,other):5 self.dataother6>>> xadder()7>>…

oracle清理asm归档日志,【Oracle】 rman 删除归档日志的命令

因为数据仓库上asm的磁盘空间不足&#xff0c;需要删除早期的归档日志&#xff0c;查看资料有以下两种方式&#xff1a;delete archivelog until time sysdate-N;delete archivelog all completed before sysdate-N;这两个命令的差别在哪里呢&#xff1f;使用list 命令来查看一…

求逆矩阵计算器_991CN的矩阵运算

昨天的推文中说了一道二端口的题目&#xff0c;虚线中的大二端口由两个小二端口级联而成&#xff0c;在计算过程中&#xff0c;我们需要使用到矩阵的运算&#xff0c;昨天讲题的时候说会说一下用计算器进行矩阵运算&#xff0c;今天我们就来说一下。其实在算电路的时候&#xf…

去快捷方式小箭头_电脑桌面如何快速去掉快捷方式小箭头

我们使用电脑时会发现在电脑桌面图标上经常有一个小箭头&#xff0c;这是什么原因呢&#xff1f;原来&#xff0c;这个小箭头只存在于快捷方式的软件图标上&#xff0c;就是说通过快捷方式创建的图标就有这个小箭头。那么如何去掉这些小箭头呢&#xff01;不知道也没关系&#…

Oracle里silent,静默方式(silent)安装Oracle软件

有的时候不方便登陆Linux/Unix的图形界面安装数据库&#xff0c;且GUI方式安装让我们无法知道具体是做了什么操作&#xff0c;我们完全可以采用命令模式安装和删除Oracle软件(代替OUI)、建立和删除数据库库(代替dbca)。平台&#xff1a;RHEL4.5&#xff0c;Oracle10.2.0.11、上…

oracle 移动日志文件,Oracle数据库移动数据文件、日志文件和控制文件

1、关闭数据库SQL> shutdown immediate;2、移动数据文件和日志文件到新位置SQL> host mv /u01/olddata.dbf /u02/newdata.dbf;SQL> host mv /u01/oldredo.log /u02/newredo.log;3、以加载模式启动数据库SQL> startup mount;4、在数据库中更改数据文件和日志文件路径…

python3导入_Python3导入相对还是绝对的正确方法?

我正在编写一个python模块。在Python2中一切正常&#xff0c;但在Python3中&#xff0c;导入失败。这是我的代码结构。neuralnet/__init__.pytrain.py # A wrapper to train (does not define new things)neuralnet.py # Defines the workhorse class neuralnetlayers/__init__…

oracle pdb是什么意思,浅谈Oracle数据库12c PDB技术

PDB大致功能描述&#xff1a;创建&#xff1a;用create pluggable database的命令&#xff0c;用file_name_convert的方式拷贝seed pdb的文件到对应的新pdb的路径下。拷贝的是最基本system和sysaux表空间&#xff0c;将新建的pdb从mount的状态打开到read write的状态。建立pdb用…

oracle查询sql时间ain,Oracle SQL 时间查询

一、在使用Oracle的to_date函数来做日期转换时&#xff0c;很多Java程序员也许会和我一样&#xff0c;直觉的采用ldquo;yyyy-MM-dd HH:mm:ssrdquo;的to_date()与24小时制表示法及mm分钟的显示&#xff1a;一、在使用Oracle的to_date函数来做日期转换时&#xff0c;很多Java程序…

室内定位算法_001:室内定位算法技术咨询服务工作室简介(更新)

点击蓝字关注我们团队成员&#xff1a;何博士(中国科学院大学&#xff0c;博士) 杨博士(加拿大多伦多大学&#xff0c;博士后)微信联系号&#xff1a;UWB_cwhe服务模式&#xff1a;1. 为企业提供定位算法技术支持与指导&#xff0c;以提高企业室内定位系统产品的稳定…

双系统还是虚拟机 linux系统时间,你会选择Mac虚拟机还是双系统

在Mac上运行双系统&#xff0c;你是会选择Mac虚拟机呢还是直接双系统&#xff1f;今天我们就这个问题来讨论一下这两之前的区别&#xff0c;究竟是选择Mac最好用的虚拟机 parallels desktop还是Boot Camp&#xff1f;1、安装在pd虚拟机中&#xff0c;安装系统和安装驱动完全自动…

oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...

大家好,今日继续给大家讲解VBA数据库解决方案的第21讲,如何利用VBA代码在已有的数据表中删除&#xff0c;添加&#xff0c;修改字段。这个内容是操作数据库的一项必修的内容&#xff0c;还望大家在实际工作中多利用&#xff0c;所以这节的知识&#xff0c;对于读者提高自己的数…

cs1.5 linux服务端,CS1.5在linux上的配置

CS1.5在linux上的配置作者&#xff1a;作者第一步下载所需要的软件&#xff1a;hlds_l_3110_full.tar.gzhlds_l_3110b_beta.tar.gzcs_15_full.tar.gzmetamod-1.13.tgzcm_cstrike_1_80_19-en_beta.zipsm_cstrike-2.6.15.zip第二步 解压 hlds_l_3110_full.tar.gzhlds_l_3110b_bet…