资源简介
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\fr
文件 16854 2016-07-11 10:49 QtMineSweep-master\res\timenumber.bmp
文件 203 2016-07-11 10:49 QtMineSweep-master\resource.qrc
- 上一篇:sln转换为dsw
- 下一篇:canvas行走的小人
相关资源
- QT实现的类似QComplater可自定义匹配规
- QT5.5.1串口实现在线热拔插检测
- Qt编写的网络五子棋
- 原创 qt 组播实现的屏幕共享程序
- PyQt5高阶界面控件
- 在MyEclipse和eclipse里玩的小游戏如:扫
- QT读取Txt文件并显示在界面上完整版
- 用QT实现的表格编辑器
- Qt Quick自定义下拉框
- qt字符设备驱动,简单易学
- QT程序学生管理系统
- QT程序打地鼠源码,自己编写,测试无
- QT使用GSoap发布WebService的Demo
- QT不卡界面Demo V2
- 原创Qt 串口基础编程代码
- Qt全局热键 QtGlobalShortcut文档
- qt 5.9.1 调用周立功CAN卡第三方库
- 使用Qt实现可编辑的画图程序
- 使用Qt实现简单的画图程序
- Qt5.X的linuxfb平台源码补丁包
- Qt之QDoubleSlider 继承QSlider的双向滑块
- qt实现modbus
- 在QT中使用visp库来抓取pylon相机的测试
- 基于qt的闹钟
- QWebEngineView使用,点击链接,上一页,
- [QT]获取鼠标坐标以及按键响应
- 基于qt做的画板
- Qt 多线程访问同一个变量
- 基于QT图形界面的GPS导航软件系统的设
- Qt一步一步实现插件通信
评论
共有 条评论