基于qt的扫雷游戏_Qt 扫雷小游戏学习分享(完结)

本文接着上篇的分享继续讲解。

1、实现格子翻转

鼠标左键点击格子,实现格子翻转——当格子不是地雷(0~8)的时候,格子会显示其周围的地雷数,并将其周围8个没有地雷的格子翻转;若发现某格子周围地雷数为0时,会递归“点击”其周围的8个格子。当格子是地雷(99)的时候,将会显示游戏结束的界面。实现过程如下——

在头文件mainscene.h添加如下代码

#include 
#include 

在类中添加鼠标按键事件函数以及左键递归函数的定义

void mousePressEvent(QMouseEvent *event);
void LeftPress(int x, int y);
void gameOver();

在mainwindow.cpp实现它们

void MainWindow::mousePressEvent(QMouseEvent *event)
{
   
    int x = event->x();
    int y = event->y();
    if(event->button() == Qt::LeftButton)   //判断是鼠标左键按下
    {
   
        if(y>24)    //格子的y坐标大于24
        {
   
            x /= 20;
            y = (y-40)/20;      //转换成二维格子的坐标
            if(grid[x][y] == 99)   //碰到地雷了
            {
   
                gameOver();
            }
            else
            {
   
                if(grid[x][y]<=8)
                {
   
                    LeftPress(x, y);
                }
            }
        }
    }
}
void MainWindow::LeftPress(int x, int y)    //递归点击周围八个格子
{
   
    for(int m=x-1; m<=x+1; m++)
    {
   
        for(int n=y-1; n<=y+1; n++)
        {
   
            if(m<0 || n<0 || m>=GRID_X || n>=GR
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值