本文接着上篇的分享继续讲解。
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