扫雷小游戏TK+Pygame结合

起初没看老师要求用Pygame写扫雷,后来发现要用tk写,就简单加了一个tk菜单,设置了三个级别难度,希望有所帮助

其中关于tk和pygame的下载仅对于VS

Ctrl+Alt+L打开解决方案资源管理器+右击Python环境+点击查看所有Python环境+下划线换成PYPI搜索pygame或tkinter,点击运行命令:pip install pygame就可以了

 可参照下图:

                

运行截图:

            

源代码如下:

import sys
import random
import time
from tkinter import  *
import tkinter as tk
import tkinter.messagebox 
import pygame

SIZE = 20
def do_job():
    s='左击方块为雷游戏结束,否则显示相邻8块地雷数,为空相邻无雷\n'+\
    '右击方块标记红旗表示有雷,再右击变?,再右击无标记\n'+\
    '方块显示为n,相邻8块有n块为雷'+\
    '\n标记红旗排除所有雷即胜利。'
    tkinter.messagebox.showinfo(title="帮助",message=s)


def create_random_board(row, col, mine_num):
    """
    得到一个随机的棋盘
    """
    # 随机布雷
    nums = [{"opened": False, "opened_num": 0, 'closed_num': "空"} for _ in range(row * col - mine_num)]  # 16x30-99 表示的是生成381个0
    nums += [{"opened": False, "opened_num": "雷", 'closed_num': "空"} for _ in range(mine_num)]  # 99颗地雷
    random.shuffle(nums)  # 乱序,此时nums是乱的
    return [list(x) for x in zip(*[iter(nums)] * col)]

def click_block(x, y, board_list):
    """
    检测点击的是哪个方格(即第x行,第y列)
    """
    # 计算出点击的空格的行、列
    for row, line in enumerate(board_list):
        for col, _ in enumerate(line):
            if col * SIZE <= x <= (col + 1) * SIZE and (row + 2) * SIZE <= y <= (row + 2 + 1) * SIZE:
                print("点击的空格的位置是:", row, col)
                return row, col

def left_click_block(row, col, board_list,BLOCK_ROW_NUM ,BLOCK_COL_NUM):
    """
    左击空格后的处理
    """
    if board_list[row][col].get("opened") is False and board_list[row][col].get("opened_num") != "雷":
        # 如果不是雷,那么就计算当前位置数字
        mine_num = get_mine_num(row, col, board_list,BLOCK_ROW_NUM,BLOCK_COL_NUM)
        print("地雷数:", mine_num)
        board_list[row][col]["opened_num"] = mine_num
        board_list[row][col]["opened"] = True  # 标记为"打开"状态
        board_list[row][col]["closed_num"] = "空"  # 标记为"未打开时的状态为空格",防止显示剩余雷数错误
        if mine_num == 0:
            # 如果方格周边没有雷此时,判断是否有连续空位置
            set_nums_blank(row, col, board_list,BLOCK_ROW_NUM ,BLOCK_COL_NUM)
    elif board_list[row][col].get("opened") is False and
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值