基于qt的嵌入式终端应用程序——五子棋游戏开发内容摘要:

大。 Arm2440 开发板的价格也是可以接受的,且有用户指导手册,便宜开发,易于使用。 本 应用 使用 Qt 开发, Qt 具有良好的可靠性、可用性、可编程性与易用性。 它 有优良的跨平台特性 , Qt支持 Microsoft Windows 95/9 Microsoft Windows NT、 Linux、 Solaris、 SunOS、 HPUX、 Digital UNIX 、 Irix、 FreeBSD、 BSD/OS、SCO、 AIX、 OS390、 QNX 等等 众多的操作系统 ; 并且 Qt 的良好封装机制 也 使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的;Qt还 支持主题,基于 Qt的应用程序能够在 Windows 外观、 Motif 外观,以及其它一些用户化外观主题之间切换; Qt 也 提供了大量的联机参考文档,有超文本 HTML 方式,也有 UNIX 帮助页 Man 手册页和补充说明。 对于初学者,其中的指南将一步步介绍如何进行 Qt 编程; 还有 Qt 的 便利性 , 支持 2D/3D 图形渲染,支持 OpenGL。 以及本身 丰富的 API。 Qt为专业应用提供了大量的函数,在 Qt 的 API 中含有大约 250 个 C++类,大多数的类都是 GUI 专有的,甚至还包括正则表达式的处理功能。 本 应用 前台作为与用户直接交互的界面,在设计考虑功能的同时,也考虑了操作的简洁和方便性,设计了方便用户使用的按钮,如开始按钮,重来按钮,退出按钮,悔棋按钮,目的是让大多数不熟练电脑操作的客户,也能轻 松的享受本系统给他们带来的便利。 因此该系统在操作上是可行的。 8 4 系统总体设计 五子棋游戏设计原则 一个好的游戏往往要遵循游戏的设计原则,主要是从实用 性,先进性,兼容性和规范性上进行设计。 而各个原则的具体描述如下。 1.实用性原则:确保 具有良好的系统性能,友好的用户界面,较高的处理效率。 2.先进性原则:采用先进而成熟的技术,使软件具有较高的技术水平和较长的生命周期。 3.兼容性原则: 对于所选硬件系统及平台,能很好地适应开发和使用。 4.规范性原则: 软件设计过程尽量按照规范进行,系统编码,操作系统平台以及所采用的开发方法也按照相应的标准。 五子棋游戏的总体设计结构 本系统主要包括包括绘制出棋子和棋盘,设置出开始、重来、悔棋、退出等按钮功能。 用到了鼠标点击事件的处理,绘制棋子,和棋盘的函数 drawpixmap()的使用。 还有胜负 的判断 显示。 需要实现的的游戏主 要功能: ( 1)主窗口:负责管理所有的部件,创建所有信号和槽的连接 ( 2)棋盘类:绘制棋盘,把棋盘看成一个二维数组,处理鼠标点击事件,在点击处一定范围内绘制棋子,然后最主要的就是算法,就是怎么走才算赢,这个要花时间研究 ( 3)胜负显示,使游 戏的人体会到胜利的快乐。 ( 4)设计按钮,控制开始、重来、悔棋、退出等功能。 9 5 系统模块设计 用 Qtcreator 进行五子棋应用程序的主要功能实现 本五子棋应用程序有绘制棋盘和棋子的功能,鼠标处理事件的实现,将鼠标坐标转换为方格子的坐标等多个主要函数。 : void MainWindow::paintEvent(QPaintEvent* ) { QPainter painter(this)。 QPainter greenPainter(this)。 (Qt::green)。 QRect rect1(10,10,695,554)。 (rect,*mChessboardPixmap)。 QRect rect2(705,220,125,130)。 (rect1,*mheifangPixmap)。 QRect rect3(830,220,125,130)。 (rect2,*mbaifangPixmap)。 QRect rect4(690,0,331,231)。 (rect3,*mbanPixmap)。 QRect rect5(690,352,261,260)。 (rect4,*mbanPixmap)。 QRect temptRect。 int i。 for( i=0。 i225。 i++) { if([i].()0) break。 QPoint p=changeGridToMouse( [i].mPoint)。 ()=convertGridToMouse( [i].mPoint).y()。 (+1)*2010+MenuBarSize, 20, 20)。 temptRect=QRect(p,mChessSize)。 if([i].mTurn==0) { 10 (temptRect,*mWhiteChessPixmap)。 } else { (temptRect,*mBlackChessPixmap)。 } } ([mGameLogic.].mPoint, 10,10)。 } : void MainWindow::mousePressEvent(QMouseEvent *e) { if(!=39。 p39。 )//39。 p39。 playing return。 QPoint p=changeMouseToGrid(epos())。 if(()0||()0) return。 if(!((),(),0)) //调用 canput()和 addrecord()添加记录 { printf(cannot put chess\n)。 return。 } PutChessToFace(p)。 //重绘棋子 repaint(tmpt)。 判断输赢 } : QPoint MainWindow::changeMouseToGrid(const QPoint p) { int x=()mLeftMargin。 int y=()mTopMargin。 if( (x=(745170))//()mLeftMarginmRightMargin) return(QPoint(1,1))。 QPoint g。 int sizex=()。 int sizey=()。 11 if((()sizex)%sizex = sizex/2){ (x/sizex)。 }//if else{ (x/sizex+1)。 }//else if((()sizey)%sizey = sizey/2){ (y/sizey)。 }//if else{ (y/sizey+1)。 }//else return g。 } : QPoint MainWindow::changeGridToMouse(const QPoint g) { QPoint p。 if(()0||()0) return QPoint(1,1)。 int sizex=()。 int sizey=()。 int x=()*sizex。 int y=()*sizey。 x+=mLeftMargin。 y+=mTopMargin。 (x)。 (y)。 if(()0||()0) printf(int convertGridToMouse size:(%d,%d) grid x,y : %d,%d mouse x, y:%d,%d \n, sizex, sizey, (), (), (), ())。 return p。 } direction 方向的 side 方棋子个数 : //以 x,y 点为中心 ,计算 direction 方向的 side 方棋子个数 //0x15,0y15 int GameLogic :: CountStones(int x, int y ,int side, int direction) 12 { int count=1。 int rx,ry。 int dx=0,dy=0。 rx=x。 ry=y。 switch(direction) { case 0://horizontal 39。 39。 { dx=1。 dy=0。 break。 } case 1://vertical 39。 | 39。 { dx=0。 dy=1。 break。 } case 2://39。 \39。 { dx=1。 dy=1。 break。 } case 3:// 39。 /39。 { dx=1。 dy=1。 break。 } } //每条线上两个方向 for(int i=0。 i2。 i++)。 { while(rx+dx=0amp。 amp。 rx+dx=15amp。 amp。 ry+dy=0amp。 amp。 ry+dy=15amp。 amp。 mChessBoard[rx+dx][ry+dy]==side) { rx+=dx。 ry+=dy。 count++。 } 13 if(dx==1amp。 amp。 dy==0)//horizontal 39。 39。 {。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。