19熊必成 扫雷小游戏.doc_第1页
19熊必成 扫雷小游戏.doc_第2页
19熊必成 扫雷小游戏.doc_第3页
19熊必成 扫雷小游戏.doc_第4页
19熊必成 扫雷小游戏.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编 号: Z04411014学 号: 201230410119 QT编程基础期末考查报告教 学 院计算机学院专业班级12级计算机应用技术系统题目扫雷姓 名熊必成任课教师姚 莉2014年6月6日 2一、扫雷小游戏系统设计(题目说明)该扫雷小游戏是要在最短的时间内根据点击格子出现的数字找出所有非雷的格子,同时还要避免踩雷用鼠标点击格子可以选中区域来选择自己所判断的非雷区,右键可以标记自己可以确定的雷区。当所有的地雷被选中或者翻开所有的非雷格子,则游戏通关,如果踩到地雷则游戏失败。游戏还可以选择难度,难度越大,所需解决的区域越大。同时在进行游戏的同时还会计时,完成的时间越短,则成绩越好,最后的记录排名也越高。二、系统的设计与实现(题目完成情况)从游戏规则中,可以推断出Block至少应该具有以下性质: 性质1、具有或者不具有地雷标志性质2、翻开或者未翻开两种状态性质3、周边地雷的个数另外,根据平时接触的扫雷游戏,玩家可以在方块上安插旗帜,表明自己确认此方块为地雷,因此方块还具有性质4:被安插或者移除旗帜下面讨论一下鼠标事件,这里只实现鼠标左键单击与鼠标右键单击事件。当点击鼠标左键时说明此方块进行了翻开操作,如果方块是地雷,发出一个explode()信号,如果不是地雷,发出一个信号,同时显示数字。这动作应当在无效前提下进行,因为如果有效,则说明此方块已经翻开了,没有必要重做,如果有效,则说明玩家标志此方块有雷,不应该去翻开。当点击鼠标右键操作,进行旗帜安插或者移除操作,这动作应该在无效的前提下进行,因为对于一个已经翻开的方块,安插毫无意义。综上所述,则可以定义如下的类和事件。定义block类block:block(int i, QWidget *parent): QPushButton(parent) id = i; num=0; marked = false; setFixedSize(25,25); setCheckable(true);定义鼠标事件void block:mousePressEvent(QMouseEvent *e) if(e-button() = Qt:LeftButton & !marked) if(num=9) setIcon(QIcon(:/image/boom.png); emit lost(); else emit expand(id); if(e-button() = Qt:RightButton) if(marked) marked = false; setIconSize(QSize(0,0); emit markDecrease(); else marked = true; setIcon(QIcon(:/image/flag.png); setIconSize(QSize(15,15); emit markIncrease(); emit testWin(); 定义按钮事件class block : public QPushButton Q_OBJECTpublic: explicit block(int i,QWidget *parent = 0); void sweep(); /显示当前block bool isMine() return num=9?true:false; void setMine() num = 9; void numIncrease() num=9? : num+; int index()return id; int isNum()return num;bool isMarked() return marked ;简单,中等,困难的难度选择void Widget:newEasy() for(int i=0;irow*column;i+) delete basei; base.clear(); /for(int j=0;jsetFixedSize(600,350);void Widget:newNormal() for(int i=0;irow*column;i+) delete basei; base.clear(); /for(int j=0;jsetFixedSize(750,500);void Widget:newDifficult() for(int i=0;irow*column;i+) delete basei; base.clear(); /for(int j=0;jsetFixedSize(900,650);判断是否获胜void Widget:TestWin() win=true; for(int i=0;iisEnabled()& !basei-isMine() win=false; break; if(!win) /若并没有全部翻开,但是凡是雷的都已经被标记,则也获胜 win=true; for(int i=0;iisEnabled() & ( (!basei-isMine()&basei-isMarked() | (basei-isMine() & !basei-isMarked() ) ) win=false; break; if(win) /一旦获胜,就弹出对话框提示是否继续 timer-disconnect(this); /取消定时器连接,停止时间更新 QMessageBox:StandardButton rb = QMessageBox:information(this,You Won.,You Won the game.nPlay again?,QMessageBox:Yes|QMessageBox:No,QMessageBox:Yes); if(rb=QMessageBox:Yes) if(mineCount=30) this-newEasy(); else if(mineCount=70) this-newNormal(); else this-newDifficult(); 三、设计过程中遇到的问题,如何解决的在完成该系统的过程中,遇到了不少的困难,比如在类的继承和定义上,还有某些头文件的缺失导致我在调试程序的过程中失败了不少次,我通过在网上查找文件和在一些贴吧和论坛中查找资料。终于在调试了许多次的情况下成功了。四、系统运行结果图4-1 主界面图4-2 点击无雷区图4-3 点击雷区图4-4 弹出是否继续图4-5 玩家记录窗口图4-6 中等难度图4-7 高等难度五、总结通过本次的试验设计,我对QT编程有了更加深入的了解,对QT编程也产生了比较浓厚的兴趣。觉得QT是如此的强大,可以实现好多以前想都不敢想的工程,以前玩的小游戏也可以自己制作。真是非常不错的一次学习。在此次的设计中,我在论坛上看到了许许多多的很不错的工程,在日后的学习中,定会更加的深入去了解QT。实训成绩评定表问题回答情况:教师评语:考勤成绩: , 占总成绩比例10%实验成绩: ,占总成绩比例30%期末考查成绩: ,占总成绩比例60%课程总成绩: 。 教师签字: 年 月 日9实训成绩评定表问题回答情况:1. 本系统是否使用自定义类,如果使用该类的继承信息是?答:本系统使用了自定义类,继承block的来实现自己的block类。2. 本系统中是否包含资源文件?如果包含,在哪里使用了资源文件?答:本系统包含了资源文件,在按钮的图案上使用了资源文件。3.本系统对鼠标的哪些事件进行了重构?如何实现的。答:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论