• 大小: 8KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-08
  • 语言: Python
  • 标签:

资源简介

简易的9*9扫雷,程序使用python3.x实现,使用tkinter库实现图形化

资源截图

代码片段和文件信息

# author:zwj
# date:2018-1-30
# 扫雷 v1.0

import random
import tkinter

# 创建程序窗口
root = tkinter.Tk()
# 窗口标题
root.title(“扫雷v1.0“)
# 窗口大小和显示位置
root.geometry(‘470x425+500+150‘)

btns = []  # 存储生成的按钮
mines = []  # 存储地雷


# 按钮类
class MyButton(tkinter.Button):
    # 剩余安全按钮的个数
    left = 71

    def __init__(self obj string wid hei):
        self.flag = True
        # 按钮上显示的字符
        self.strvar = tkinter.StringVar()
        # 调用父类的__init__方法
        super(MyButton self).__init__(obj textvariable=self.strvar width=wid height=hei command=self.check)
        self.index = int(string)

    # 设置按钮上要显示的字符
    def settext(self text):
        self.strvar.set(text)

    # 判断是否为雷
    def check(self):
        # 判断所有安全的按钮是否全部别点击了
        if MyButton.left == 0:
            # 游戏胜利
            win()
        # 判断点击的按钮是否为雷
        else:
            index_x = 0
            if self.index < 10:
                index_y = self.index - 1
            else:
                tmp = int(self.index / 9)
                index_y = self.index - tmp * 9
                if index_y == 0:
                    index_x = tmp - 1
                    index_y = 8
                else:
                    index_x = tmp
                    index_y = index_y - 1

            if mines[index_x][index_y] == -99:
                # 游戏失败,游戏结束
                gameover()
            # 按钮上显示周围雷的数量
            else:
                self.strvar.set(str(mines[index_x][index_y]))
                # 安全按钮的个数减一
                if self.flag:
                    MyButton.left -= 1
                    self.flag = False


def init(x=9 y=9):
    # 按钮的序号
    count = 1
    for index in range(x):
        for index2 in range(y):
            # 生成新的按钮
            btn = MyButton(root str(count) 6 2)
            count += 1
            # 将生成的按钮加入按钮列表中
            btns.append(btn)
    for i in range(x):
        for j in range(y):
            # 按钮布置到窗口中
            btns[i * 9 + j].grid(row=i column=j)


# 设置雷
def set_mine():
    for rand in range(9):
        # 每个位置的初始值设为0,-99代表雷
        mines.append([0 0 0 0 0 0 0 0 0])
    # 随机生成1~81中的十个数,用来设置雷
    random_list = []
    for i in range(10):
        tmp = random.randint(1 81)
        if tmp not in random_list:
            random_list.append(tmp)
    # 在相应的位置设置-99表示雷
    for each in random_list:
        if each < 10:
            mines[0][each - 1] = -99
        else:
            tmp = int(each / 9)
            index = each - tmp * 9
            if index == 0:
                mines[tmp - 1][8] = -99
            else:
                mines[tmp][(each - tmp * 9) - 1] = -99

    # 计算mines[0][0]周围地雷的数量
    if mines[0][0] != -99:
        if mines[0][1] == -99:
            mines[0][0] += 1
        if mines[1][0] == -99:
            mines[0][0] += 1
        if mines[1][1] == -99:
            mines[0][0] += 1

    # 计算mines[0][8]周围地雷的数量
    if mines[0][8

评论

共有 条评论

相关资源