扫雷项目概要设计XPWord文件下载.docx
- 文档编号:16258245
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:22
- 大小:21.91KB
扫雷项目概要设计XPWord文件下载.docx
《扫雷项目概要设计XPWord文件下载.docx》由会员分享,可在线阅读,更多相关《扫雷项目概要设计XPWord文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
重新计分(槽)
父类QMainWindow
1.主要数据成员:
QMenu*m_gameMenu;
游戏菜单
QMenu*m_helpMenu;
帮助菜单
QAction*m_newGameAct;
开局
QAction*m_lowLevelAct;
初级
QAction*m_middleLevelAct;
中级
QAction*m_highLevelAct;
高级
QAction*m_gameSetAct;
自定义
QAction*m_soundAct;
声音
QAction*m_heroRollAct;
扫雷英雄榜
QAction*m_exitAct;
退出
QAction*m_aboutAct;
关于
QLCDNumber*m_mineLCD;
显示雷数
QLCDNumber*m_timeLCD;
显示时间
QPushButton*m_smileBtn;
笑脸按钮
myScene*m_scene;
舞台
QGraphicsView*m_view;
镜头
QWidget*m_widget;
中心窗体
aboutDialogm_aboutDialog;
关于对话框
setDialogm_setDialog;
游戏自定义对话框
heroDialogm_heroDialog;
扫雷英雄榜对话框
PlayerDialogm_playerDialog;
刷新记录后对话框
intm_mineNum;
记录舞台上的雷数
intm_time;
记录舞台上的时间
QTimer*m_timer;
计时的定时器
QStringm_heroFileName;
扫雷英雄榜的文件名
QStringm_heroTextFileName;
扫雷英雄榜的文本文件名
gameRecodeInfo*m_gameRecode[3];
存放游戏记录信息
gameLevelm_gameLevel;
当前游戏的级别
QStringm_playerName;
刷新游戏记录的玩家名
2.主要成员函数:
MainWindow(QWidget*parent=0);
构造函数
virtualvoidchangeEvent(QEvent*event);
改变事件
voidcreateMenu();
创建菜单
voidcreateGame();
创建游戏
voidcreateConnect();
创建连接
boolreadHeroRoll();
读扫雷英雄榜文件
boolwriteHeroRoll();
写扫雷英雄榜文件
voidinitHeroRoll();
初始化英雄榜
boolreadHeroRollText();
读英雄榜文本文件
boolwriteHeroRollText();
写英雄榜文本文件
voidnewGame();
voidlowLevelGame();
初级游戏
voidmiddleLevelGame();
中级游戏
voidhighLevelGame();
高级游戏
voidsoundAction();
是否开启声音
voidgameSet(intt_rowNum,intt_colNum,intt_mineNum);
自定义游戏
voiddisplayMineNum(intt_signedMineNum);
voiddisplayTime();
显示时间
voiddisplayHeroRoll();
显示扫雷英雄榜
voidupdateHeroRoll();
更新扫雷英雄榜
voidrecvPlayerName(QStringt_playerName);
接收刷新记录的玩家名
voidrecountHeroRollScore();
重新计算英雄榜的分数
QGraphicsPixmapItem,QObject
intm_X;
X坐标,行数
intm_Y;
Y坐标,列数
boolm_isMine;
该方块是否为雷
boolm_isOpened;
该方块是否打开
intm_aroundMineNum;
该方块上的数字
intm_rMouseKeyNum;
该方块鼠标右键点击的次数
myItem(intt_x,intt_y,constQPixmap&
pixmap,QGraphicsItem*parent=0);
构造函数
virtualvoidmousePressEvent(QGraphicsSceneMouseEvent*event);
virtualvoidmouseReleaseEvent(QGraphicsSceneMouseEvent*event);
virtualvoidmouseDoubleClickEvent(QGraphicsSceneMouseEvent*event);
voidrestartGame();
再来一局(信号)
voidresetMineNum(intt_signedMineNum);
(信号)
m_X,m_Ym_isMinem_isOpenedm_aroundMineNumm_rMouseKeyNum相应的set,get函数
QGraphicsScene
vector<
vector<
myItem*>
>
m_itemVec;
staticintm_rowNum;
方块的行数
staticintm_colNum;
方块的列数
staticintm_mineNum;
方块的雷数
intm_signedMineNum;
被右键标记为雷的数量
intm_rightMineNum;
记录玩家右键标记正确的雷数
boolm_isGameOver;
游戏是否结束
intm_remainNoMines;
记录舞台上剩余非雷的个数
boolm_soundOpen;
开启声音的开关true:
打开声音false:
关闭声音
原点周围的八点
QPointt_around[8]={
QPoint(-1,-1),
QPoint(-1,0),
QPoint(-1,1),
QPoint(0,-1),
QPoint(0,1),
QPoint(1,-1),
QPoint(1,0),
QPoint(1,1)
2.成员函数:
myScene(QObject*parent=0);
voidcountAroundMines(myItem*t_item);
统计该方块周围的雷数
voidopenAllItems();
打开所有的方块
voidexpendWater(myItem*t_item);
扩散函数
intcountFlagNum(myItem*t_item);
统计周围八点插旗的数量
voidopenAroundItems(myItem*t_item);
翻开周围8点的方块
voidsuccessPassGame();
玩家成功过关(信号)
QLabel*label;
QLineEdit*lineEdit;
QPushButton*pushButtonOK;
PlayerDialog(QWidget*parent=0);
voidBtnOKClicked();
(槽)OK按钮被点击槽
voidsendPlayerName(QStringt_playerName);
发送玩家(信号)
QWidget*gridLayoutWidget;
QGridLayout*gridLayout;
QLineEdit*lineEdit_row;
QLabel*label_2;
QLabel*label_3;
QLineEdit*lineEdit_col;
QLineEdit*lineEdit_mine;
QDialogButtonBox*buttonBox;
setDialog(QWidget*parent=0);
voidsendSetInfo(intt_rowNum,intt_colNum,intt_mineNum);
游戏设置信息被设置信号(信号)
voiddealWithSetInfo();
接受信息被设置函数(槽)
三、各函数设计:
(一)heroDialog.hheroDialog.cpp英雄榜类
1.heroDialog(QWidget*parent=0)构造函数
函数功能:
构造英雄榜界面,连接信号与槽
2.voidsetHeroDialog(gameRecodeInfo*t_gameRecode[3]);
设置英雄榜对话框的内容
函数流程:
创建QSettings对象,调用value函数获取注册表中的初级纪录姓名和时间,中级纪录姓名和时间,高级纪录姓名和时间
3.voidrecountHeroScore();
4.voidrecountScore();
发送recountHeroScore()重新计算英雄榜的分数的信号
(二)mainwindow.hmainwindow.cpp主程序窗口类
1.MainWindow(QWidget*parent=0);
初始化主要的数据成员,创建相应的界面组件,创建主程序界面
创建菜单createMenu();
创建游戏createGame();
初始化英雄榜initHeroRoll();
建立连接createConnect();
2.virtualvoidchangeEvent(QEvent*event);
判断事件类型是否为QEvent:
:
WindowStateChange
判断定时器是否激活
如果是激活则停止计时器
否则启动定时器
3.voidcreateMenu();
增加菜单
增加菜单选项
将相关的菜单设置为选中状态
将菜单选项加到菜单中
挂载菜单到主窗体中
设置主窗体的图标和标题
4.voidcreateGame();
创建新的游戏数据前,先将老的游戏数据删除释放掉
m_widget,m_view,m_scene,m_mineLCD,m_timeLCD,m_smileBtn,m_timer调用deleteLater函数删除旧数据
增加窗体m_widget
增加LCDm_mineLCD,m_timeLCD,m_smileBtn
增加水平布局
将LCD,按钮加入到水平布局中
增加镜头
增加垂直布局
将水平布局和镜头增加到垂直布局中
将垂直布局设置到窗体中
将整个窗体放到主窗口的中心区
增加舞台
将镜头对准舞台
增加图标
获取舞台上的方块的行列数和雷数
画图标
创建vector<
myItem*>
t_vec;
创建myItem*t_item=newmyItem(i,j,t_Img);
设置位置t_item->
setPos(j*t_ImgWidth,i*t_ImgHeight);
将组件添加到场景m_scene->
addItem(t_item);
将组件加入到容器t_vec.push_back(t_item);
将容器加入到m_scene->
m_itemVec.push_back(t_vec);
m_scene调用setSceneRect形状,m_view调用setFixedSize设置宽度,窗口调用setFixedSize设置大小宽度
随机布雷
srand(time(NULL));
while(t_mineNum)
{
随机产生一个方块的坐标
intt_rows=rand()%t_rowNum;
intt_cols=rand()%t_colNum;
设置该方块为雷
if(!
m_scene->
m_itemVec[t_rows][t_cols]->
getIsMine())
m_scene->
setIsMine(true);
将该雷周围的八点的方块上的数字加一
countAroundMines(m_scene->
m_itemVec[t_rows][t_cols]);
t_mineNum--;
}
建立所有方块与主窗口的连接
for(inti=0;
i<
t_rowNum;
i++)
for(intj=0;
j<
t_colNum;
j++)
connect(m_scene->
m_itemVec[i][j],SIGNAL(restartGame()),this,SLOT(newGame()));
m_itemVec[i][j],SIGNAL(resetMineNum(int)),this,SLOT(displayMineNum(int)));
设置LCD的显示字体的颜色和数字
增加定时器
建立时间的连接
成功过关与英雄榜纪录的连接
5.voidcreateConnect();
函数参数:
函数返回值:
将m_aboutAct,m_newGameAct,m_lowLevelAct,m_middleLevelAct,m_highLevelAct,m_gameSetAct,m_setDialog,m_heroRollAct,m_playerDialog,m_heroDialog,m_soundAct与相对应的槽进行连接
6.boolreadHeroRoll();
7.boolwriteHeroRoll();
8.voidinitHeroRoll();
初始化英雄榜信息的数组,并开辟空间
9.boolreadHeroRollText();
10.boolwriteHeroRollText();
11.voidnewGame();
调用创建新游戏函数
12.voidlowLevelGame();
设置行数为9;
设置列数为9;
设置最小雷数10;
设置游戏级别为初级
创建游戏
如果初级行为已经被选中,则设置初级关闭
否则,设置初级行为打开,同时将中级行为和高级行为都设置为未被选中和不能选择
13.voidmiddleLevelGame();
设置行数为16;
设置列数为16;
设置最小雷数40;
设置游戏级别为中级
如果中级行为已经被选中,则关闭
否则,设置中级行为打开,同时将初级行为和高级行为都设置为未被选中和不能选择
14.voidhighLevelGame();
设置列数为30;
设置最小雷数99;
设置游戏级别为高级
如果高级行为已经被选中,则设置高级不能选择和没有选中
否则,设置高级行为可以被选择和已经选中,同时将初级行为和中级行为都设置为未被选中和不能选择
15.voidsoundAction();
如果声音已开启,则关闭,并将场景声音关闭
如果声音已关闭,则开启,并将场景声音开启
16.voidgameSet(intt_rowNum,intt_colNum,intt_mineNum);
重新设定场景的行数列数和雷数
如果自定义游戏被选择,则关闭
否则将自定义游戏打开,将初级行为,中级行为,高级行为关闭
17.voiddisplayMineNum(intt_signedMineNum);
LCD上显示雷数
18.voiddisplayTime();
获取舞台上非雷的方块数
获取游戏开始前的总的非雷的方块数
判断游戏开始
if(t_noMineNum<
t_allNoMineNum&
&
t_noMineNum!
=0)
游戏未结束
if(m_scene->
m_isGameOver==false)
m_time++;
m_timeLCD->
display(m_time);
m_soundOpen)
QSound:
play("
./sounds/time.wav"
);
else
游戏结束,停止定时器
m_timer->
stop();
19.voiddisplayHeroRoll();
设置英雄榜
调用setHeroDialog设置英雄榜
调用show();
显示英雄榜
20.voidupdateHeroRoll();
如果刷新游戏记录
根据游戏当前难度级别比较当前时间与纪录时间,更新相应级别纪录时间,并显示英雄榜
将新纪录时间存入文件
21.voidrecvPlayerName(QStringt_playerName);
根据游戏难度级别更新新纪录姓名
调用displayHeroRoll函数显示英雄榜
将新纪录姓名存入文件
22.voidrecountHeroRollScore();
将内存中的游戏记录重置,循环将初中高3种用户的时间设为999,用户名设置为匿名
调用setHeroDialog设置英雄榜;
调用writeHeroRollText();
更新配置文件
(三)myitem.hmyitem.cpp方块类
1.myItem(intt_x,intt_y,constQPixmap&
初始化图图片及位置,并初始化其它数据;
2.virtualvoidmousePressEvent(QGraphicsSceneMouseEvent*event);
如果方块未被打开
如果是左键点击
则改变图片
3.virtualvoidmouseReleaseEvent(QGraphicsSceneMouseEvent*event);
获取该方块所在的舞台
如果游戏已经结束或是该方块已经翻开,则退出该函数
左键点击释放
如果右键单击一次,则单击左键无反应
设置为打开
如果是雷,则显示为雷图片,设置游戏结束,播放声音,打开所有的方块
并弹出“不好意思!
"
"
你踩到雷了!
再来一局?
对话框。
如果点击OK按钮,发送再来一局的信号emitrestartGame();
如果不是雷则根据周围雷数显示不同图片,如果雷数为0则扩散expendWater();
舞台上非雷方块数减一
如果游戏结束设置游戏结束,播放声音,打开所有的方块,发送成功过关的信号successPassGame();
如果右键点击释放,右键点击次数加1
如果右键点击次数为1设置图片,并将场景中要发送信号的雷数加1,发出重新设定雷数信号emitresetMineNum();
如果右键成功标记为雷,则成功验证是雷数+1
如果右键点击次数为2设置图片,发送信号雷数减1,发送重新设定雷数信号,如果是雷,则图中正确雷数减1,
如果右键点击次数为3则设置图片为未知图片,并将右键点击次数设回0
如果玩家成功右键标记完所有的雷(正确雷数与场景中总雷数相等)则设置游戏结束,播放声音打开所有的方块发送成功过关的信号
4.virtualvoidmouseDoubleClickEvent(QGraphicsSceneMouseEvent*event);
获取该方块所在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 项目 概要 设计 XP