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('<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):
 """
 点击事件
 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()

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

(0)

相关推荐

  • python实战教程之自动扫雷

    前言 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 1.扫雷游戏 我是win10,没有默认的扫雷,所以去扫雷网下载 http://www.saolei.net/BBS/ 2.python 3 我的版本是 python 3.6.1 3.python的第三方库 win32api,win32gui,win32con,Pillow,numpy,opencv 可通过 pip install --upgrade Some

  • 如何基于Python实现自动扫雷

    这篇文章主要介绍了如何基于Python实现自动扫雷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1 python的第三方库: win32api win32gui win32con Pillow numpy opencv 可通过 pip install --upgrade Som

  • 用python写扫雷游戏实例代码分享

    扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码: #!/usr/bin/python #coding:utf-8 #python 写的扫雷游戏 import sys import random class MineSweeping(): #扫雷主程序 def __init__(self,row = 8 ,line= 8,mineNum = 15): self.row = row self.line = line self.score = 0 #分

  • 基于Python实现的扫雷游戏实例代码

    本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过. 本例使用python的tkinter做gui,由于没考虑可用性问题,因此UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适,感兴趣的读者可以尝试一下! 具体的功能代码如下: # -*- coding: utf-8 -*- import random import sys from Tkinter import * class Model: """ 核心数据类,维护一

  • Python自动扫雷实现方法

    本文实例讲述了Python自动扫雷实现方法.分享给大家供大家参考.具体如下: #pyWinmineCrack.py # coding: utf-8 import win32gui import win32process import win32con import win32api from ctypes import * #雷区最大行列数 MAX_ROWS = 24 MAX_COLUMNS = 30 #雷区格子在窗体上的起始坐标及每个格子的宽度 MINE_BEGIN_X = 0xC MINE_

  • python实现扫雷游戏

    本文为大家分享了python实现扫雷游戏的具体代码,供大家参考,具体内容如下 本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过. 本例使用python的tkinter做gui,由于没考虑可用性问题,因此UI比较难看,pygame更有趣更强大更好看,做这些小游戏更合适,感兴趣的读者可以尝试一下! 具体的功能代码如下: # -*- coding: utf-8 -*- import random import sys from Tkinter import

  • python实现扫雷游戏的示例

    扫雷是一款益智类小游戏,最早于 1992 年由微软在 Windows 上发行,游戏适合于全年龄段,规则简单,即在最短的时间内找出所有非雷格子且在中间过程中不能踩到雷, 踩到雷则失败,需重新开始. 本文我们使用 Python 来实现扫雷游戏,主要用的 Python 库是 pygame. 实现 游戏组成比较简单,主要包括:小方格.计时器.地雷等. 首先,我们初始化一些常量,比如:横竖方块数.地雷数.鼠标点击情况等,如下所示: BLOCK_WIDTH = 30 BLOCK_HEIGHT = 16 #

  • python实现扫雷小游戏

    前面我们用python实现了贪吃蛇.坦克大战.飞船大战.五子棋等游戏 今天我们用python来实现一下扫雷游戏 本游戏代码量和源文件较多 可以从我的GitHub地址中获取 构建地雷区 import random from enum import Enum BLOCK_WIDTH = 30 BLOCK_HEIGHT = 16 SIZE = 20 # 块大小 MINE_COUNT = 99 # 地雷数 class BlockStatus(Enum): normal = 1 # 未点击 opened

  • python用tkinter开发的扫雷游戏

    1.实现效果 2.实现代码 # 导入所需库 from tkinter import * import random class main: # 定义一个类,继承 tkinter 的 Button # 用来保存按钮的状态和在网格布局中的位置 class minebtn(Button): def __init__(self,master,xy,**kw): Button.__init__(self,master,**kw) self.xy = xy self._state = 0 # 状态 # 0:

  • 使用 python 实现单人AI 扫雷游戏

    AI玩扫雷 很高兴又见面了!

  • python实战游戏之史上最难最虐的扫雷游戏没有之一

    导语 每日游戏更新系列--今天带大家来看看扫雷小游戏! 它是许多人接触到的第一款游戏,大概也是广大办公族和无网学生无聊时消遣的最佳游戏. 在那些还没有网(被切断网)的岁月,扫雷曾陪伴无数人度过了他们的童年.你的最佳纪录是多少了? 对于许多90后.00后来说,扫雷这个电脑上自带的小游戏早就变成古早的历史,再一次提到扫雷这个名字的时候,对许多人来说,仿佛就是上世纪的事情了. ​ 就像是偶尔点开微信的跳一跳小游戏,发现排行榜上还有人在孤独的霸榜一样.已经2021年了,还有许多90后.00后坚守在扫雷这

  • Python实现简单扫雷游戏

    本文实例为大家分享了Python实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 #coding: utf-8 __note__ = """ * 扫雷小游戏 * 需要python3.x以上 * 需要安装PyQt5 * pip install PyQt5 """   import sys   try:     import PyQt5 except ImportError:     import tkinter     from tkinter

  • C语言实现扫雷游戏(初级版)

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 game.h #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY 10 //初始化棋盘 void InitBoard(char board[ROWS][COLS], int rows,

  • 基于C语言代码实现扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 扫雷(第一次多文件应用) 扫雷的思路 game.h #ifndef _GAME_H_ #define _GAME_H_ #include<stdio.h> #include <time.h> #include<string.h> #include<windows.h> #pragma warning(disable:4996) #define ROW 12 #define COL 1

随机推荐