如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
编号:Z04411014学号:201230410119QT编程基础期末考查报告教学院计算机学院专业班级12级计算机应用技术系统题目扫雷姓名熊必成任课教师姚莉2014年6月6日一、扫雷小游戏系统设计(题目说明)该扫雷小游戏是要在最短的时间内根据点击格子出现的数字找出所有非雷的格子,同时还要避免踩雷用鼠标点击格子可以选中区域来选择自己所判断的非雷区,右键可以标记自己可以确定的雷区。当所有的地雷被选中或者翻开所有的非雷格子,则游戏通关,如果踩到地雷则游戏失败。游戏还可以选择难度,难度越大,所需解决的区域越大。同时在进行游戏的同时还会计时,完成的时间越短,则成绩越好,最后的记录排名也越高。二、系统的设计与实现(题目完成情况)从游戏规则中,可以推断出Block至少应该具有以下性质:性质1、具有或者不具有地雷标志性质2、翻开或者未翻开两种状态性质3、周边地雷的个数另外,根据平时接触的扫雷游戏,玩家可以在方块上安插旗帜,表明自己确认此方块为地雷,因此方块还具有性质4:被安插或者移除旗帜下面讨论一下鼠标事件,这里只实现鼠标左键单击与鼠标右键单击事件。当点击鼠标左键时说明此方块进行了翻开操作,如果方块是地雷,发出一个explode()信号,如果不是地雷,发出一个信号,同时显示数字。这动作应当在无效前提下进行,因为如果有效,则说明此方块已经翻开了,没有必要重做,如果有效,则说明玩家标志此方块有雷,不应该去翻开。当点击鼠标右键操作,进行旗帜安插或者移除操作,这动作应该在无效的前提下进行,因为对于一个已经翻开的方块,安插毫无意义。综上所述,则可以定义如下的类和事件。定义block类block::block(inti,QWidget*parent):QPushButton(parent){id=i;num=0;marked=false;setFixedSize(25,25);setCheckable(true);}定义鼠标事件voidblock::mousePressEvent(QMouseEvent*e){if(e->button()==Qt::LeftButton&&!marked){if(num==9){setIcon(QIcon(":/image/boom.png"));emitlost();}else{emitexpand(id);}}if(e->button()==Qt::RightButton){if(marked){marked=false;setIconSize(QSize(0,0));emitmarkDecrease();}else{marked=true;setIcon(QIcon(":/image/flag.png"));setIconSize(QSize(15,15));emitmarkIncrease();emittestWin();}}}定义按钮事件classblock:publicQPushButton{Q_OBJECTpublic:explicitblock(inti,QWidget*parent=0);voidsweep();//显示当前blockboolisMine(){returnnum==9?true:false;}voidsetMine(){num=9;}voidnumIncrease(){num==9?:num++;}intindex(){returnid;}intisNum(){returnnum;}boolisMarked(){returnmarked;}简单,中等,困难的难度选择voidWidget::newEasy(){for(inti=0;i<row*column;i++)deletebase[i];base.clear();//for(intj=0;j<mine.count();j++)//deletemine[j];mine.clear();row=10;column=20;mineCount=30;markedCount=mineCount;Initialize();this->setFixedSize(600,350);}voidWidget::newNormal(){for(inti=0;i<row*column;i++)deletebase[i];base.clear();//for(intj=0;j<mine.count();j++)//deletemine[j];mine.clear();row=15;column=25;mineC