简易扫雷游戏制作教程

简易扫雷游戏制作教程

ID:34435022

大小:156.37 KB

页数:5页

时间:2019-03-06

简易扫雷游戏制作教程_第1页
简易扫雷游戏制作教程_第2页
简易扫雷游戏制作教程_第3页
简易扫雷游戏制作教程_第4页
简易扫雷游戏制作教程_第5页
资源描述:

《简易扫雷游戏制作教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、脑残,是一种生活态度;宅,是一种生活方式。1、未经本人同意,禁止将此文用于商业用途2、转载请注明出处:http://tieba.baidu.com/f?kz=1127092401首先,简单讲一下扫雷的一般规则:有一个称之为BlockArea的区域,其显示为矩形,它由一定数量大小相等的方块(Block)构成,其中有些方块标记为地雷(Mine)。玩家的目标,是通过逐个翻开方块,以找出所有地雷。如果玩家翻开的方块标记的是地雷,则游戏结束;否则翻开之,每次翻开会显示一个数字,说明以该方块为中心构成的九宫格的9个位置中有几个地雷,没有数字,表示没

2、有雷。从游戏规则中,可以推断出Block至少应该具有以下性质:性质1、具有或者不具有地雷标志性质2、翻开或者未翻开两种状态性质3、周边地雷的个数另外,根据平时接触的扫雷游戏,玩家可以在方块上安插旗帜,表明自己确认此方块为地雷,因此方块还具有性质4:被安插或者移除旗帜下面对每个性质进行分析:性质1、应当是一开始就确定的,故在内部设置一个mine_flag_,由Block的构造函数初始化;性质2、在内部设置一个标志ok_flag_,一开始默认为false,当外界访问了方块时,设置为true。那么访问操作为何?即鼠标左键事件,下面讨论;性质3

3、、当BlockArea每个方块构建完之后,此方块的数字就确定了,所以我们可以提供一个setNumber(int)函数,这个函数只应在设置BlockArea时调用;性质4、内部设置一个mark_flag_,当外界进行设置操作时,进行。那么何为设置操作?即鼠标右键事件,下面讨论。下面讨论一下鼠标事件,这里只实现鼠标左键单击与鼠标右键单击事件。当点击鼠标左键时,设置ok_flag_为true,说明此方块进行了翻开操作,如果方块是地雷,发出一个explode()信号,如果不是地雷,发出一个safe()信号,同时显示数字。这动作应当在ok_fla

4、g_无效且mark_flag_也无效的前提下进行,因为如果ok_flag_有效,则说明此方块已经翻开了,没有必要重做,如果mark_flag_有效,则说明玩家标志此方块有雷,不应该去翻开,否则岂不不自取灭亡?当点击鼠标右键操作,进行旗帜安插或者移除操作,这动作应该在ok_flag_无效的前提下进行,因为对于一个已经翻开的方块,安插毫无意义。根据上面的分析,我们把Block类的定义如下:classBlock:publicQLabel{Q_OBJECTpublic:explicitBlock(boolmine_flag,QWidget*pa

5、rent=0);voidsetNumber(intnumber);boolisMine()const;signals:voidexplode();voidsafe();protected:voidmousePressEvent(QMouseEvent*event);private:boolmine_flag_;boolok_flag_;boolmark_flag_;intnumber_;};你会发现上面比我们说明的多了一个函数isMine(),之所以如此,是因为我们判断Blcok周边地雷的个数,需要判断得知每块Block是否是地雷。类B

6、lock的实现如下:Block::Block(boolmine_flag,QWidget*parent):QLabel(parent){mine_flag_=mine_flag;ok_flag_=false;mark_flag_=false;number_=-1;setPixmap(QPixmap(":/images/normal.png"));}voidBlock::setNumber(intnumber){number_=number;}boolBlock::isMine()const{returnmine_flag_;}voidB

7、lock::mousePressEvent(QMouseEvent*event){if(event->button()==Qt::LeftButton){if(ok_flag_==false&&mark_flag_==false){ok_flag_=true;if(mine_flag_==true){setPixmap(QPixmap(":/images/mine.png"));update();emitexplode();}else{setPixmap(QPixmap(":/images/mine_"+QString("%1").ar

8、g(number_)+".png"));update();emitsafe();}}}elseif(event->button()==Qt::RightButton){if(ok_flag_==false)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。