QT-五子棋游戏设计-课程设计报告_第1页
QT-五子棋游戏设计-课程设计报告_第2页
QT-五子棋游戏设计-课程设计报告_第3页
QT-五子棋游戏设计-课程设计报告_第4页
QT-五子棋游戏设计-课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、2013-2014学年秋季学期Windows程序设计 课程设计报告学院:计算机与信息学院序号:56姓名:周春雷学 号:学 12112302指导教师:干安慧完成时间2014年05月29日目录1、 课程设计的目的12、 课程设计的内容及要求13、 关键技术及相关原理介绍1四、系统的总体设计2五、设计思路及关键问题的解决方法3六、设计模块分类41 .输入模块42 .输出模块63 .判断模块7判断输赢模块7判断命令模块11七、运行结果截屏13、课程设计的目的通过所学的知识和技术,在老师的帮助下以及自己查询资料,完成对五子棋 游戏的编程实现,使程序支持人人战,并且可以完成判断输赢,悔棋,从新开始 等基本

2、功能。本次课程设计的课题简单,且娱乐性强。在完成课题的过程中可以很好的复习 学过的知识和技术,并且在完成设计编程后,可以很大程度上提高自信心和好学 心,同时在做的过程中遇到难题能主动查阅资料、寻求帮助,对团队协作以及对 网络资源的有效利用有了更深的体会。:、课程设计的内容及要求课程设计的内容:本次设计将提供一个“五子棋”的游戏程序,可完成的功 能有“人与人对战”、悔棋、开始新游戏。课程设计的要求:使用QT软件开发,语言使用C+。关键技术及相关原理介绍本系统主要分为输入模块、输出模块和判断模块这三大块。各模块依据所属 功能的不同来划分。输入模块主要实现用户对数据的输入,输出模块则是完成对用户输入

3、到系统的 数据在棋盘上的显示,而判断模块这是系统的主要模块,完成对用户输赢的判断 和对用户悔棋和从新开始等操作命令的响应。本次采用了 QT进行程序设计,对于图形界面有较好的处理方法和环境。四、系统的总体设计图1:系统功能模块图图1是系统的总体模块图,依据系统的不同功能包含 3个大的模块:输入模 块,判断模块和输出模块。各个模块的具体代码实现和功能描述在后面将详细 的解释。这里只是对系统功能实现有一个初步的了解。10五、设计思路及关键问题的解决方法设计过程说明:开始显示棋盘棋手下棋YES结束图2:系统流程图图2给出了整个系统的流程图,简单直观的使系统一目了然。下面开始分 析整个系统的流程。首先只

4、能进行“人人对战”,有玩家自己决定谁先手,然后输入棋子位置后 系统以“标签”的形式将棋子显示在棋盘上。在下棋后系统会开始判断用户是否 有“五子相连”(遵守五子棋的游戏规则),如果有五个棋子相连说明用户获胜, 这时候系统会提示“你获胜了! ”。主要靠判断模块判断是否有获胜的,当然在判断后可以悔棋,系统会自动回到前 一步。六、设计模块分类基本分为:输入模块、输出模块、判断模块1.输入模块将用户输入的数据记录,并输入给程序。本系统采用的是鼠标事件输入,用户用鼠标点击棋盘上的格子,系统将记录并在棋盘上显示。部分代码:void Ma inWindow: mouse Press Eve nt( QMous

5、eEvent*e)int m,l= l,n;x=e->pos().rx();x=(x/50)*50;y=e->pos().ry();y=( y/50)*50;if ( color y/50x/50= 111 color 丫/50050=2);判断是否已有标签 else label j jl = new QLabel( this );if (jl +temp)%2=0)label j jl ->setGeometry( x, y, 50, 50);label j jl ->setStyleSheet( Ubackground-color:black;border-radi

6、us:25px”);color y/50 x/50= 1;if ( win=0)label j jl ->show();if (jl =9)j+;) else label j jl ->setGeometry( x, y, 50, 50);label j jl ->setStyleSheet( Ubackground-color:gray;border-radius:25px”);color y/50 x/50=2;if ( win=0)label j jl ->show();if (jl =9)j+;)k=check( color j jl , y/ 50, x/ 5

7、0);if(k=l)player =new QMediaPlayer();player ->setMedia( QUrl:fromLocalFile( M/E:/qt_data/music/ 劲乐团 - 卡农.mp3”);player ->play();QMessageBox:warning( this ,tr( uhahan ),tr(" 你 获 胜 啦!n), QMessageBox: Yes);win=l;)if(jl =9) jl =0;else jl +;)2 .输出模块主要是棋盘函数以及棋子的显示,这里棋子用“标签”显示图3:棋盘及棋子如图3所示,使用QT做成

8、的界面,棋子落于棋盘的网格中而不是棋盘网格 线的交叉点上。棋盘的部分代码:void Ma inWindow: pain tE vent ( QPaintEvent *e) / 棋盘函数 (QP a inter painter( this );painter.setPen( Qt: black );for (i =0; i <=10; i +)painter.drawLine( 0, 50*i, 500, 50近);)for (i =0; i <=10; i +)(p a in te r. d ra wLin e ( 50* i, 0, 50* i, 500);)3 .判断模块判断模

9、块分为判断命令模块和判断输赢模块。判断输赢模块判断输赢模块是整个程序的核心部分, 的判断。它的主要功能是实现对五子棋的输赢开始下:四个方向判断是否有五颗棋子在一条线上切换用户YES图4:判断输赢模块流程图结束判断输赢模块的具体工作原理由图 4可以清晰直观的看到。为了完成判断输赢模块的编码实现,首先要了解五子棋输赢的规则。五子棋需 要满足五颗棋子在水平、竖直、斜向上或斜向下这四个方向上任意一个方向上有相 同五个棋子出现就判断为赢。所以编码时也要依次判断这四个方向是否有五颗棋子 满足要求,如果有则判断赢,如果没有这切换用户继续下棋。然后下棋后继续判 断这时候是否有五颗棋子满足要求,然后这样循环。首

10、先当用户开始下棋后系统就开始判断是否存在五颗棋子连在一条线上,系统 先从水平方向判断,如果水平方向有五颗棋子连成一条线就显示获胜,如果水平方 向上没有就开始竖直方向上的判断;竖直方向有五颗棋子连成一条线就显示获胜, 如果竖直方向上没有就开始斜向上方向上的判断;斜向上方向有五颗棋子 连成一条线就显示获胜,如果斜向上方向上没有就开始斜向下方向上的判断;斜向下方向有五颗棋子连成一条线就显示获胜,如果斜向下方向上没有就切换用户下棋。然后开始新开始对用户输赢的判断,这就是整个系统的判断输赢模块的流程了。判断输赢模块的部分代码:int MainWindow:check( int n, int m, int

11、 p) 判断是否五子相连 (1 =1;int k=m,kl=p;for (int i= 0;i< 10-p;i+) /*横向右判断是否五子相连*/(if ( color kp= color k+kl)1+;if (1=5)return 1; else break ;)kl=p;for (i =p- 1; i >=0; i-) /*横向左判断是否五子相连*/if ( color kp= color kkl)1+;if (1=5)re turn 1; else break ;)k=m;kl=p;1 =1;for (i =0; i <10-m; i +)/*竖向上判断是否五子相连*

12、/ if ( color kp= color +4-kkl)1+;if(l=5) return 1; else break ;)k=m;kl=p;for (i =m-l; i >=0; i -) /*竖向下判断是否五子相连 */(if ( color kp= color kkl)1+;if(l=5) re turn 1; else break ;)k=m;kl=p;1 =1;if (m<=9-p) t =m;else t =9-p;for (i =0; i <t ; i +)/*135度向上判断是否五子相连*/ if ( color mp= color k+4-kl)1+;i

13、f(l=5) re turn 1; else break ;)k=m;kl=p;if (p<=9-m) t =p;else t =9-m;for (i =t - 1; i >=0; i ) /*135度向下判断是否五子相连 */if ( color mp= color +kkl)1+;if(l=5) re turn 1; else break ;)k=m;kl=p;1=1;if (m<p) t =m;else t =p;for (i =0; i vt ; i +)/*45度向上判断是否五子相连*/ (if ( color mp= color kkl)1+;if(l=5) re

14、turn 1; else break ;k=m;kl=p;if (p<m) t =9-m;else t =9-p;for (i =t - 1; i >=0; i ) /*45度向上判断是否五子相连 */ (if ( color mp= color +k+kl)1+;if(l=5)re turn 1; else break ;)if(1 != 5) return 0;11判断命令模块主要是判断退出、从新开始、悔棋。是对系统功能的一个拓展和优化,有利于用户更方便舒适的操作系统,加强 五子棋游戏的娱乐性。这一部分的流程图如下:获胜结束图5:判断命令模块流程图如图5给出了系统判断命令模块的

15、流程图。如图知道当用户下棋后,系统首先会判断用户是否需要从新开始游戏,如果需要 系统会重新初始化后开始游戏。如果不需要,系统会判断是否有五颗棋子在一条线 上,如果有则判断为赢结束游戏。如果没有五颗棋子在一条线上,系统会判断用户是否有悔棋,如果有,系统会返回上一步从新下棋,如果没有则切换用 户继续下棋。下棋后重复这个判断流程。下面附上判断命令模块的部分代码:void MainWindow:huiqi() 悔棋的代码 (label j jl - l->close();color y/50x/50= 0;if (temp=0) temp=l;else temp=0; )void MainWindow:init()初始化界面(player ->stop();int t2,t3;for (t2= 0;t2< 10;t2+)for (t3

温馨提示

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

评论

0/150

提交评论