• 大小: 88KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: QT  扫雷  

资源简介

QT 扫雷程序源码,QT Create 5.11编写,防系统扫雷程序,高,中,低级。

资源截图

代码片段和文件信息

#include 
#include 
#include “game_model.h“

GameModel::GameModel()
    : mRow(kRow)
      mCol(kCol)
      totalMineNumber(kMineCount)
      timerSeconds(kTime)
      gameState(PLAYING)
{
    // 在构造函数里面不做具体初始化,因为构造函数的调用时间不确定
}

GameModel::~GameModel()
{

}

void GameModel::createGame(int row int col int mineCount GameLevel level)
{
    // 先清空已经有的游戏地图
    gameMap.clear();
    // 设置成员变量
    mRow = row;
    mCol = col;
    totalMineNumber = mineCount;
    curMineNumber = mineCount;
    gameState = PLAYING;
    gameLevel = level;
    timerSeconds = 0;

    // 初始化雷方块
    for(int i = 0; i < mRow; i++)
    {
        //添加每行的block
        std::vector lineBlocks;
        for(int j = 0; j < mCol; j++)
        {
            MineBlock mineBlock;
            mineBlock.curState = UN_DIG; // 默认都是未挖掘
            mineBlock.valueFlag = 0; // 默认都是0
            lineBlocks.push_back(mineBlock);
        }
        gameMap.push_back(lineBlocks);
    }

    // 随机布雷
    srand((unsigned int)time(0));
    int k = totalMineNumber;
    while(k > 0)
    {
        // 埋雷并防止重叠
        int pRow = rand() % mRow;
        int pCol = rand() % mCol;
        if(gameMap[pRow][pCol].valueFlag != -1)
        {
             gameMap[pRow][pCol].valueFlag = -1;
             k--; // 如果原来就有雷重新循环
        }
    }

    // 计算雷周围的方块数字
    for(int i = 0; i < mRow; i++)
    {
        for(int j = 0; j < mCol; j++)
        {
            // 周围八个方块(排除自己,在地图范围内)的数字根据雷的数目叠加
            // y为行偏移量,x为列偏移量
            // 前提条件是本方块不是雷
            if(gameMap[i][j].valueFlag != -1)
            {
                for(int y = -1; y <= 1; y++)
                {
                    for(int x = -1; x <= 1; x++)
                    {
                        if(i + y >= 0
                        && i + y < mRow
                        && j + x >= 0
                        && j + x < mCol
                        && gameMap[i + y][j + x].valueFlag == -1
                        && !(x == 0 && y == 0))
                        {
                            // 方块数字加1
                            gameMap[i][j].valueFlag++;
                        }
                    }
                }
            }
        }
    }
}

void GameModel::restartGame()
{
    createGame(mRow mCol totalMineNumber gameLevel);
}

void GameModel::digMine(int m int n)
{
    // 正常方块且没有被翻开过,标记为已挖
    if(gameMap[m][n].valueFlag > 0
     && gameMap[m][n].curState == UN_DIG)
    {
        gameMap[m][n].curState = DIGGED;
    }

    // 遇到空白块(数字0)就递归挖雷,如果踩雷就爆掉游戏结束
    if(gameMap[m][n].valueFlag == 0
     && gameMap[m][n].curState == UN_DIG)
    {
        gameMap[m][n].curState = DIGGED;
        for(int y = -1; y <= 1; y++)
        {
            for(int x = -1; x <= 1; x++)
            {
                if(m + y >= 0
                && m + y < mRow
                && n + x >= 0
                && n + x < mCol
                && !(x == 0 && y == 0))
                {
                    digMine(m + y n + x);
               

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-07-11 10:49  QtMineSweep-master\
     文件         453  2016-07-11 10:49  QtMineSweep-master\QtMineSweep.pro
     文件       23882  2016-07-11 10:49  QtMineSweep-master\QtMineSweep.pro.user
     文件         568  2016-07-11 10:49  QtMineSweep-master\README.md
     文件        5402  2016-07-11 10:49  QtMineSweep-master\game_model.cpp
     文件        1663  2016-07-11 10:49  QtMineSweep-master\game_model.h
     文件         182  2016-07-11 10:49  QtMineSweep-master\main.cpp
     文件        8657  2016-07-11 10:49  QtMineSweep-master\main_game_window.cpp
     文件         954  2016-07-11 10:49  QtMineSweep-master\main_game_window.h
     文件        1747  2016-07-11 10:49  QtMineSweep-master\maingamewindow.ui
     目录           0  2016-07-11 10:49  QtMineSweep-master\pic\
     文件        8997  2016-07-11 10:49  QtMineSweep-master\pic\1.PNG
     文件       10341  2016-07-11 10:49  QtMineSweep-master\pic\2.PNG
     文件       11912  2016-07-11 10:49  QtMineSweep-master\pic\3.PNG
     文件       11727  2016-07-11 10:49  QtMineSweep-master\pic\4.PNG
     文件        8342  2016-07-11 10:49  QtMineSweep-master\pic\5.PNG
     文件       24510  2016-07-11 10:49  QtMineSweep-master\pic\game.gif
     目录           0  2016-07-11 10:49  QtMineSweep-master\res\
     文件       15654  2016-07-11 10:49  QtMineSweep-master\res\blocks.bmp
     文件        6966  2016-07-11 10:49  QtMineSweep-master\res\faces.bmp
     文件       32054  2016-07-11 10:49  QtMineSweep-master\res\frame.bmp
     文件       16854  2016-07-11 10:49  QtMineSweep-master\res\timenumber.bmp
     文件         203  2016-07-11 10:49  QtMineSweep-master\resource.qrc

评论

共有 条评论