Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43216
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2016-03-25 09:44
个人简介

unix

文章分类

全部博文(20)

文章存档

2016年(20)

我的朋友

分类: 嵌入式

2016-05-13 17:27:51



二、详解

1、部分代码


(1)main.cpp

  1. #include <QApplication>  
  2. #include <QTextCodec>  
  3. #include <QCursor>  
  4.   
  5. #include "TetrixWidget.h"  
  6.   
  7. int main( int argc, char **argv )  
  8. {  
  9.   
  10.     QApplication a( argc, argv );  
  11.   
  12.     QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));  
  13.     QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));  
  14.     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));  
  15.     //则更换图标  
  16.     QCursor myCursor( QPixmap( GLOBAL_CURSOR_IMAGE ) ) ;  
  17.     QApplication::setOverrideCursor( myCursor ) ;  
  18.     //这个是因为要使用Phonon这里要设置一个名字,可能是考虑到版权相关的问题吧,不然会有一个警告  
  19.     //并无其他实际意义  
  20.     a.setApplicationName("MyTetrix Game");  
  21.   
  22.     TetrixWidget widget ;  
  23.     widget.show();  
  24.   
  25.     return a.exec();  
  26. }  
(2)TetrixWidget.h
  1. #ifndef TETRIXWIDGET_H  
  2. #define TETRIXWIDGET_H  
  3.   
  4.   
  5. #include <QDesktopWidget>  
  6. #include <QApplication>  
  7. #include <QWidget>  
  8. #include <QGraphicsView>  
  9. #include <QSettings>  
  10. #include <QStringList>  
  11. #include <QImage>  
  12. #include <QPoint>  
  13. #include <QKeyEvent>  
  14.   
  15.   
  16. #include "GameGraphicsScene.h"  
  17. #include "GameBackGroundItem.h"  
  18. #include "GameLogoImageItem.h"  
  19. #include "GameButtonItem.h"  
  20. #include "GameArrowItem.h"  
  21. #include "GameMovBackGrouItem.h"  
  22. #include "GameIntroductionItem.h"  
  23. #include "GameOptionItem.h"  
  24. #include "GameHighWinItem.h"  
  25.   
  26. #include "GameGameSound.h"  
  27.   
  28. #include "globaldefines.h"  
  29.   
  30. /**************************************************************************  
  31.  *                        常量                                            *  
  32.  **************************************************************************/  
  33.   
  34.   
  35. /**************************************************************************  
  36.  *                          宏定义                                         *  
  37.  **************************************************************************/  
  38.   
  39.   
  40. /**************************************************************************  
  41.  *                            数据类型                                     *  
  42.  **************************************************************************/  
  43.   
  44.   
  45. /**************************************************************************  
  46.  *                             类声明                                      *  
  47.  **************************************************************************/  
  48.   
  49. class TetrixWidget : public QWidget  
  50. {  
  51.     Q_OBJECT  
  52. signals:  
  53.     //发送信号给ArrowItem,改变其坐标到坐标索引的index  
  54.     void moveArrowat( int index ) ;  
  55.   
  56.     //这个是遮蔽箭头item上面的箭头的信号  
  57.     //这个信号放在这个类里是因为,按钮弹出的Item会通过按Esc来返回,这样就不能再发信号还原  
  58.     //其状态  
  59.     void coverOnArowItemSignal( bool state ) ;  
  60.   
  61.     /**********************这个是当游戏被停用时的发送的信号********************/  
  62.     //这个是当游戏被停用时的发送的信号  
  63.     //就是当鼠标点击电脑桌面其他位置时,就是我们平常所说的整个游戏软件失去焦点时。发送这个信号  
  64.     void gameDeactivateSignal() ;  
  65. public:  
  66.     TetrixWidget(QWidget *parent=0) ;  
  67.     ~TetrixWidget() ;  
  68.   
  69. private:  
  70.     QGraphicsView *gameView ;  
  71.     GameGraphicsScene *gameScene ;  
  72.   
  73.     void setTetrixWigAttribute() ;          //设置TetrixWidget类的属性  
  74.   
  75.     void initGameSceneAndView() ;           //初始化游戏的场景与视图  
  76.   
  77.   
  78.     QSettings *configIni ;        //这个是用于读取配置文件指针  
  79.     //这是定义的一个表,用来存储图片名字与图片的指针  
  80.     //这个作为一个大的容器,所以图片都放在里面。便于之后用  
  81.     NameAndImageHash  nameImageHash ;  
  82.   
  83.     //根据组名及每组对应的图片数目的A值来读取配置文件,并且加载图片文件。  
  84.     void initAndLoadImage( QString groupname, QString A_valueString ) ;  
  85.   
  86.     void loadAllImageFile() ;      //加载所有的图片  
  87.   
  88.     //这个坐标ponit用于取图片上某个坐标点的色素作为透明色,默认为QPoint( 0,0 )  
  89.     QImage *getTransImage( QImage *image , QPoint ponit = QPoint( 0,0 ) ) ;  
  90.   
  91.     /*  
  92.     这个是处理所有的粉红色背景的图片,使只编程透明色背景  
  93.     */  
  94.     void dealPinkBackGroundImage( QString groupname, QString A_valueString ) ;  
  95.   
  96.     /*  
  97.     这个是因为当第三层出现时,用户按下Esc键,要回到第二层游戏首页,  
  98.     所以在这里用这个hash表来记录  
  99.     */  
  100.     NumAndPointerHash numPointer ;  
  101.     /*  
  102.     这个是用来记录当前在第二层上面的Item,通过这个序号在NumAndPointerHash  
  103.     中查找Item对应的指针,默认为-1  
  104.     */  
  105.     int nowIndex ;  
  106.     /*  
  107.     这里是因为,这个设置的图片太小,要把下面的开始与退出按钮给隐藏掉,  
  108.     不然用户移动鼠标会误点到  
  109.     */  
  110.     void setSomeItemVisible( bool visible ) ;  
  111.     //从配置文件中读出所要的音量的值  
  112.     inline int getVolumeValueFromFile( QString groupname ,QString A_valueString ) ;  
  113.     //从配置文件中读取是否要设置全屏  
  114.     inline bool getFullScreenValueFromFile( QString groupname ,QString A_valueString ) ;  
  115.   
  116.   
  117.     /****************************最底层的Item******************************/  
  118.     GameLogoImageItem *logoImageItem ;  
  119.     void addGameLogoImageItem( ) ;           //添加GameLogoImageItem到场景去  
  120.   
  121.     GameBackGroundItem *backGroundItem ;  
  122.     //这是定义的一个表,用来存储图片名字与图片的坐标  
  123.     //部分图片的坐标不需要写在配置文件,因为其默认坐标一直都是(0,0)  
  124.     NameAndPointHash namePointHash ;  
  125.     //根据组名及每组对应的图片数目的A值来读取配置文件,并且记录到namePointHash中去。  
  126.     void initNameAndPointHash( QString groupname ,QString A_valueString ) ;  
  127.   
  128.     /****************************第二层的Item******************************/  
  129.     GameButtonItem *dianwoButton ;            //点我的广告按钮  
  130.     GameButtonItem *moregameButton ;          //更多的游戏按钮  
  131.     GameButtonItem *startgameButton ;         //开始游戏按钮  
  132.     GameButtonItem *instrgameButton ;         //游戏介绍按钮  
  133.     GameButtonItem *gameoptionButton ;        //游戏选项按钮  
  134.     GameButtonItem *gamehihgscButton ;        //游戏排行榜按钮  
  135.     GameButtonItem *exitgameButton ;          //退出游戏按钮  
  136.     GameArrowItem  *arrowItem ;               //箭头Item  
  137.     /*  
  138.     添加所有的第二层的Item,通过一个接口把所有的第二层的Item全部放进来,方便管理  
  139.     */  
  140.     void addAllSecondLayerItem() ;  
  141.     //分开进行添加这样不至于让一个函数变的很长  
  142.     void addDianWoButton() ;       //添加点我按钮  
  143.     void addMoreGameButton() ;     //添加更多的游戏按钮  
  144.     void addStartGameButton() ;    //添加开始游戏按钮  
  145.     void addInstrGameButton() ;    //添加游戏介绍按钮  
  146.     void addGameOptionButton() ;   //添加游戏选项按钮  
  147.     void addGameHihgscButton() ;   //添加游戏排行榜按钮  
  148.     void addExitGameButton() ;     //添加退出游戏按钮  
  149.     void addArrowItem() ;          //添加箭头Item  
  150.     /****************************第三层的Item******************************/  
  151.   
  152.     GameMovBackGrouItem *movBacGrouItem ;    //动态背景图片  
  153.     GameIntroductionItem *introduItem ;      //游戏介绍Item  
  154.     GameOptionItem *optionItem ;             //游戏选项Item  
  155.     GameHighWinItem *highWinItem ;           //游戏排行榜Item  
  156.   
  157.     /**************************游戏的背景音乐与音效的处理*************************/  
  158.     GameGameSound *gameSound ;      //游戏的背景音乐与音效  
  159.     void initGameGameSound() ;      //初始化游戏的背景音乐与音效  
  160.   
  161. private slots:  
  162.     void addGameBackGroundItem( ) ;         //添加GameBackGroundItem到场景去  
  163.   
  164.     void mouseOnStartgameButton( ) ;        //光标在开始游戏按钮  
  165.     void mouseOnInstrgameButton( ) ;        //光标在游戏介绍按钮  
  166.     void mouseOnGameOptionButton( ) ;       //光标在游戏选项按钮  
  167.     void mouseOnGameHihgscButton( ) ;       //光标在游戏排行榜按钮  
  168.     void mouseOnExitgameButton( ) ;         //光标在退出游戏按钮  
  169.   
  170.     void clickOnStartgameButton( ) ;        //单击开始游戏按钮  
  171.     void clickOnInstrgameButton( ) ;        //单击游戏介绍按钮  
  172.     void clickOnGameOptionButton( ) ;       //单击游戏选项按钮  
  173.     void clickOnGameHihgscButton( ) ;       //单击游戏排行榜按钮  
  174.     void clickOnExitgameButton( ) ;         //单击退出游戏按钮  
  175.   
  176.     /*  
  177.     这个是根据当前箭头序号来确定进入到哪个Item的槽函数  
  178.     */  
  179.     void clickOnButton( int index ) ;  
  180.   
  181.     /*  
  182.     用户按Esc键返回到第二层,返回游戏首页的信号的槽函数  
  183.     */  
  184.     void backToSecondLaySlot( int index ) ;  
  185.     //这个是前景Item的退回到游戏首页的按钮的槽函数  
  186.     void backToGameHomeSlot() ;  
  187. protected:  
  188.     //事件过滤器  
  189.     bool eventFilter ( QObject * watched, QEvent * event ) ;  
  190.     void    resizeEvent ( QResizeEvent * event );  
  191. };  
  192.   
  193. #endif // TETRIXWIDGET_H  
(3)TetrixWidget.cpp
  1. /************************************************************************  
  2. * 版权所有 (C)2011, 上海欣诺有限公司。  
  3. *  
  4. * 文件名称:  TetrixWidget.cpp  
  1. ************************************************************************/  
  2.   
  3. #include "TetrixWidget.h"  
  4. #include <QDebug>  
  5.   
  6. /**************************************************************************  
  7.  *                            常量                                        *  
  8.  **************************************************************************/  
  9.   
  10.   
  11.   
  12. /**************************************************************************  
  13.  *                            宏                                          *  
  14.  **************************************************************************/  
  15.   
  16.   
  17. /**************************************************************************  
  18.  *                          数据类型                                       *  
  19.  **************************************************************************/  
  20.   
  21.   
  22.   
  23. /**************************************************************************  
  24.  *                           全局变量                                      *  
  25.  **************************************************************************/  
  26.   
  27.   
  28.   
  29. /**************************************************************************  
  30.  *                           局部函数原型                                  *  
  31.  **************************************************************************/  
  32.   
  33. /**************************************************************************  
  34.  *                  类TetrixWidget实现--公有部分                          *  
  35.  **************************************************************************/  
  36.   
  37. /**************************************************************************  
  38. * 函数名称: TetrixWidget  
  39. * 功能描述: 构造函数  
  40. *  
  41. **************************************************************************/  
  42.   
  43.   
  44. TetrixWidget::TetrixWidget(QWidget *parent)  
  45.     :QWidget(parent),nowIndex( -1 )  
  46. {  
  47.     //初始化,设置其读取ini为后缀的配置文件  
  48.     configIni = new QSettings( CONFIGUREPATH,QSettings::IniFormat ) ;  
  49.     //首先加载是两个logo文件  
  50.     initAndLoadImage( GROUPNAME_LOGO,LOGO_COUNT ) ;  
  51.     /*  
  52.     设置控件显示的参数,因为其大小是根据logo图片的大小还算的,所以要放在读取配置文件之后  
  53.     */  
  54.     setTetrixWigAttribute() ;  
  55.     //初始化视图的大小也是根据两个logo图片的大小来确定的,所以要放在读取配置文件之后  
  56.     initGameSceneAndView() ;  
  57.   
  58.     addGameLogoImageItem() ;      //添加GameLogoImageItem到场景去  
  59.     /*  
  60.     只所以把GameLogoImageItem添加到场景去再加载所有的图片,  
  61.     是因为logo图片有个渐显的效果,可以利用这个间隙把所有的图片  
  62.     全部加载进来,该处理的出来掉。这样可以有效的利用时间,让用户感觉不到  
  63.     加载图片过程  
  64.     */  
  65.     loadAllImageFile() ;     //加载所有的图片  
  66.     /*  
  67.     根据组名及每组对应的图片数目的A值来读取配置文件,并且记录到namePointHash中去。  
  68.     */  
  69.     initNameAndPointHash( GROUPNAME_COORDINATE ,COORDINATE_COUNT) ;  
  70. }  
  71.   
  72. /***********************************************************************  
  73. * 函数名称: ~TetrixWidget()  
  74. * 功能描述: 析构函数  

  75. *  
  76. *************************************************************************/  
  77.   
  78. TetrixWidget::~TetrixWidget()  
  79. {  
  80.     //这个显示delete,qt都可以通过qt来进行delete的  
  81.     delete gameSound ;  
  82. }  
  83.   
  84.   
  85. /**************************************************************************  
  86. * 函数名称: setTetrixWigAttribute  
  87. * 功能描述: 设置TetrixWidget类的属性  
  88. *
  89. * -----------------------------------------------  
  90. *  
  91. **************************************************************************/  
  92. void TetrixWidget::setTetrixWigAttribute()  
  93. {  
  94.     /*  
  95.     这里是设置屏蔽窗口最大化的按钮的属性,在linux下没有效果,在windows有效果不知道为啥  
  96.     */  
  97.     this->setWindowFlags( Qt::Window  
  98.                           | Qt::WindowMinimizeButtonHint  
  99.                           | Qt::WindowCloseButtonHint );  
  100.   
  101.     //设置居中屏幕显示  
  102.     QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以  
  103.     /*  
  104.     这个是根据logo的大小来确定的,由于控件比图片多一个宽口管理其,所以height加40进行调整  
  105.     ,以达到初始显示在屏幕中间的效果  
  106.     */  
  107.     if( nameImageHash.contains( LOGO_1 ) )  
  108.     {  
  109.         int width = nameImageHash.value(LOGO_1)->size().width() ;  
  110.         int height = nameImageHash.value(LOGO_1)->size().height() + 40 ;  
  111.         move((desktop->width() - width)/2, (desktop->height() - height)/2);  
  112.     }  
  113.     //安装事件过滤器  
  114.     this->installEventFilter( this );  
  115.   
  116.     setWindowTitle("俄罗斯方块单机版 V1.0");  
  117.   
  118. }  
  119.   
  120. /**************************************************************************  
  121. * 函数名称: initAndLoadImage  
  122. * 功能描述: 根据组名及每组对应的图片数目的A值来读取配置文件,并且加载图片文件
  123. * -----------------------------------------------  
  124. *  
  125. **************************************************************************/  
  126.   
  127. void TetrixWidget::initAndLoadImage(QString groupname, QString A_valueString)  
  128. {  
  129.     if( !groupname.isEmpty() )  
  130.     {  
  131.         configIni->beginGroup( groupname );  
  132.         configIni->setIniCodec( "UTF-8" );  
  133.         int count = configIni->value( A_valueString).toInt() ;  
  134.   
  135.         QStringList keyslist = configIni->allKeys() ;  
  136.         //configIni->allKeys()因为这个里面有包含啦求数目的那条A值  
  137.         if( keyslist.count() == (count + 1) )  
  138.         {  
  139.             foreach( QString value,keyslist )  
  140.             {  
  141.                 //如果为数目的A值,则不做处理  
  142.                 if( QString::compare( value , A_valueString ) )  
  143.                 {  
  144.                     QString imagePath = configIni->value( value ).toString() ;  
  145.                     QImage *iamge = new QImage( imagePath ) ;  
  146.                     //如果不能加载图片文件,则退出  
  147.                     if( iamge->isNull() )  
  148.                     {  
  149.                         QString errorString = QString("File :%1 is not exit !" ).arg(imagePath) ;  
  150.                         DEBUGP(  errorString ) ;  
  151.                         configIni->endGroup();  
  152.                         return ;  
  153.                     }  
  154.                     //把图片名字与图片加入到hash表中  
  155.                     nameImageHash.insert( value,iamge ) ;  
  156.                 }  
  157.             }  
  158.         }  
  159.         else  
  160.         {  
  161.             DEBUGP( "Configure File Num Error !" ) ;  
  162.             configIni->endGroup();  
  163.             return ;  
  164.         }  
  165.         configIni->endGroup();  
  166.     }  
  167. }  
  168.   
  169. /*************************************************************************  
  170. * 函数名称: initNameAndPointHash  
  171. * 功能描述: 根据组名及每组对应的图片数目的A值来读取配置文件,并且记录到namePointHash中去  
  172. * -----------------------------------------------  
  173. *  
  174. **************************************************************************/  
  175. void TetrixWidget::initNameAndPointHash(QString groupname, QString A_valueString)  
  176. {  
  177.     if( !groupname.isEmpty() )  
  178.     {  
  179.         configIni->beginGroup( groupname );  
  180.         configIni->setIniCodec( "UTF-8" );  
  181.         int count = configIni->value( A_valueString ).toInt() ;  
  182.         QStringList keyslist = configIni->allKeys() ;  
  183.         //configIni->allKeys()因为这个里面有包含啦求数目的那条A值  
  184.         if( keyslist.count() == (count + 1) )  
  185.         {  
  186.   
  187.             foreach( QString key,keyslist )  
  188.             {   //如果为数目的A值,则不做处理  
  189.                 if( QString::compare( key , A_valueString ) )  
  190.                 {  
  191.                     QPoint pos = configIni->value(key).toPoint() ;  
  192.                     //DEBUGP( pos ) ;  
  193.                     namePointHash.insert( key,pos ) ;  
  194.                 }  
  195.             }  
  196.   
  197.         }  
  198.         configIni->endGroup();  
  199.     }  
  200. }  
  201.   
  202. /*************************************************************************  
  203. * 函数名称: getTransImage  
  204. * 功能描述: 这个坐标ponit用于取图片上某个坐标点的色素作为透明色,默认为QPoint( 0,0 )  
  205.  
  206. * -----------------------------------------------  
  207. *  
  208. **************************************************************************/  
  209. QImage *TetrixWidget::getTransImage(QImage *image, QPoint ponit)  
  210. {  
  211.     //判断所取的点是否在图片内部  
  212.     if( image->valid( ponit ) )  
  213.     {  
  214.         QRgb  rgb = image->pixel( ponit );  
  215.   
  216.         QVector<QRgb> rgbVector = image->colorTable () ;  
  217.         for (int i = 0; i < rgbVector.size(); ++i)  
  218.         {  
  219.              if( rgbVector.at(i) == rgb )  
  220.              {  
  221.                  /*  
  222.                 注意这里如果要变成黑色背景的话就是QRgb rgb2 = QColor(0, 0, 0, 0).rgb() ;  
  223.                 留意 rgb()与rgba()的区别  
  224.                 */  
  225.                  QRgb rgb2 = QColor(0, 0, 0, 0).rgba() ;  
  226.                  image->setColor( i,rgb2 );  
  227.                  return image ;  
  228.              }  
  229.          }  
  230.     }  
  231.     return image ;  
  232. }  
  233.   
  234.   
  235. /*************************************************************************  
  236. * 函数名称: initGameSceneAndView  
  237. * 功能描述: 初始化游戏的场景与视图  
  238. *
  239. * -----------------------------------------------  
  240. *  
  241. **************************************************************************/  
  242. void TetrixWidget::initGameSceneAndView()  
  243. {  
  244.     gameScene = new GameGraphicsScene() ;  
  245.     gameScene->setBackgroundBrush(Qt::black);  
  246.     //这里要是不限制场景的大小的话,之后小鱼游动时,其场景会增大,之后显示就会移动  
  247.     //因为小鱼要被完全隐藏掉之后,才掉头重新开始游这样就可能增大场景,故再这里给写死  
  248.     gameScene->setSceneRect(0, 0, SCENEWIDTH, SCENEHEIGHT);  
  249.     gameView = new QGraphicsView(this) ;  
  250.     gameView->setScene(gameScene);  
  251.   
  252.     //设置文字去锯齿显示  
  253.     gameView->setRenderHints(QPainter::Antialiasing  
  254.                          | QPainter::TextAntialiasing);  
  255.   
  256.     //设置大小,跟logo图片的大小一样大,不能写死,这样灵活些  
  257.     if( nameImageHash.contains( LOGO_1 ) )  
  258.     {  
  259.         /*  
  260.         在这里把长宽进行微调,不然会出现在场景中滚动鼠标是,场景上下移动的问题  
  261.         */  
  262.         int width = nameImageHash.value(LOGO_1)->size().width()+ 2 ;  
  263.         int height = nameImageHash.value(LOGO_1)->size().height() + 2 ;  
  264.         gameView->resize( width,height );  
  265.     }  
  266.     //关闭水平滚动条与垂直滚动条  
  267.     gameView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);  
  268.     gameView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);  
  269. }  
  270.   
  271.   
  272. /*************************************************************************  
  273. * 函数名称: loadAllImageFile  
  274. * 功能描述: 加载所有的图片  
  275. *
  276. * -----------------------------------------------  
  277. *  
  278. **************************************************************************/  
  279. void TetrixWidget::loadAllImageFile()  
  280. {  
  281.     //加载ModeWin组的文件  
  282.     initAndLoadImage( GROUPNAME_MODEWIN,MODEWIN_COUNT ) ;  
  283.     //加载DianWoWin组的文件  
  284.     initAndLoadImage( GROUPNAME_DIANWOWIN,DIANWOWIN_COUNT ) ;  
  285.     //加载OptionWin组的文件  
  286.     initAndLoadImage( GROUPNAME_OPTIONWID,OPTIONWID_COUNT ) ;  
  287.     //加载Box组的文件  
  288.     initAndLoadImage( GROUPNAME_BOX,BOX_COUNT ) ;  
  289.     //加载BackWin组的文件  
  290.     initAndLoadImage( GROUPNAME_BACKWIN,BACKWIN_COUNT ) ;  
  291.     //加载BombWin组的文件  
  292.     initAndLoadImage( GROUPNAME_BOMBWIN,BOMBWIN_COUNT ) ;  
  293.     //加载MainWin组的文件  
  294.     initAndLoadImage( GROUPNAME_MAINWIN,MAINWIN_COUNT ) ;  
  295.     //修改MustModify组A值所对应的图片,去掉其背景粉红色,变为透明背景  
  296.     dealPinkBackGroundImage( GROUPNAME_MUSTMODIFY,MUSTMODIFY_COUNT ) ;  
  297. }  
  298.   
  299.   
  300. /*************************************************************************  
  301. * 函数名称: dealPinkBackGroundImage  
  302. * 功能描述: 添加dealPinkBackGroundImage到场景去  
  303. * 访问的表:  
  304. * 修改的表:  
  305. * 输入参数:  
  306. * 输出参数:  
  307. * 返 回 值:  
  308. * 其它说明:  
  309. * 修改日期    版本号     修改人        修改内容  
  310. * -----------------------------------------------  
  311. *  
  312. **************************************************************************/  
  313. void TetrixWidget::dealPinkBackGroundImage(QString groupname, QString A_valueString )  
  314. {  
  315.     if( !groupname.isEmpty() )  
  316.     {  
  317.         configIni->beginGroup( groupname );  
  318.         configIni->setIniCodec( "UTF-8" );  
  319.         int count = configIni->value( A_valueString).toInt() ;  
  320.   
  321.         QStringList keyslist = configIni->allKeys() ;  
  322.         //configIni->allKeys()因为这个里面有包含啦求数目的那条A值  
  323.         if( keyslist.count() == (count + 1) )  
  324.         {  
  325.             foreach( QString key,keyslist )  
  326.             {  
  327.                 //如果为数目的A值,则不做处理  
  328.                 if( QString::compare( key , A_valueString ) )  
  329.                 {  
  330.                     //DEBUGP( key ) ;  
  331.                     //对图片进行处理,去掉粉红的背景  
  332.                     QImage *image = getTransImage( nameImageHash.value( key ) );  
  333.                     //重新发修改后的值加入到hash表中  
  334.                     nameImageHash.insert( key,image ) ;  
  335.                 }  
  336.             }  
  337.         }  
  338.         //注意读完这个组一定要关闭,否则会影响到下面的读取  
  339.         configIni->endGroup();  
  340.     }  
  341. }  
  342.   
  343. /*************************************************************************  
  344. * 函数名称: addGameLogoImageItem  
  345. * 功能描述: 添加GameLogoImageItem到场景去  
  346. *  
  347. * -----------------------------------------------  
  348. *  
  349. **************************************************************************/  
  350. void TetrixWidget::addGameLogoImageItem()  
  351. {  
  352.     logoImageItem = new GameLogoImageItem() ;  
  353.     //  
  354.     connect(logoImageItem,SIGNAL(addGameBackGroundItem())  
  355.             ,this,SLOT(addGameBackGroundItem())) ;  
  356.     logoImageItem->setGameScene( gameScene,nameImageHash);  
  357. }  
  358.   
  359. /*************************************************************************  
  360. * 函数名称: addAllSecondLayerItem  
  361. * 功能描述: 添加所有的第二层的Item,通过一个接口把所有的第二层的Item全部放进来,方便管理  
  362. * -----------------------------------------------  
  363. *  
  364. **************************************************************************/  
  365. void TetrixWidget::addAllSecondLayerItem()  
  366. {  
  367.     //DEBUGP( "addAllSecondLayerItem" ) ;  
  368.     //点我广告的按钮  
  369.     addDianWoButton() ;  
  370.     //更多的游戏按钮  
  371.     addMoreGameButton() ;  
  372.     //开始游戏按钮  
  373.     addStartGameButton() ;  
  374.     //游戏介绍按钮  
  375.     addInstrGameButton() ;  
  376.     //游戏选项按钮  
  377.     addGameOptionButton() ;  
  378.     //游戏排行榜按钮  
  379.     addGameHihgscButton() ;  
  380.     //退出游戏按钮  
  381.     addExitGameButton() ;  
  382.     //箭头Item  
  383.     addArrowItem() ;  
  384. }  
  385.   
  386.   
  387. /*************************************************************************  
  388. * 函数名称: addArrowItem  
  389. * 功能描述: 添加箭头Item  
  390. * 访问的表:  
  391. * 修改的表:  
  392. * 输入参数:  
  393. * 输出参数:  
  394. * 返 回 值:  
  395. * 其它说明:  
  396. * 修改日期    版本号     修改人        修改内容  
  397. * -----------------------------------------------  
  398. *  
  399. **************************************************************************/  
  400. void TetrixWidget::addArrowItem()  
  401. {  
  402.     //箭头Item  
  403.     arrowItem = new GameArrowItem( MODEWIN_ARROW ) ;  
  404.     //在这里连接改变坐标的信号与槽  
  405.     connect(this,SIGNAL(moveArrowat(int)),arrowItem,SLOT(setPointListIndex(int))) ;  
  406.     //这个是根据当前箭头序号来确定进入到哪个Item的槽函数  
  407.     connect(arrowItem,SIGNAL(enterIntoButton(int)),this,SLOT(clickOnButton(int)));  
  408.     //通过这个信号返回到第二层----游戏首页  
  409.     connect(arrowItem,SIGNAL(backToSecondLay(int)),this,SLOT(backToSecondLaySlot(int)));  
  410.     arrowItem->setGameScene(gameScene,nameImageHash,namePointHash);  
  411.     /*  
  412.     这里为啦保持跟上面的一直,所以把设置Z轴的放在这里,其实不必要放在这里,  
  413.     因为箭头类是一个单独的类,只有一个对象在用  
  414.     */  
  415.     arrowItem->setZValue(1.0);  
  416.   
  417. }  
  418. /*************************************************************************  
  419. * 函数名称: addExitGameButton  
  420. * 功能描述: 添加退出游戏按钮  
  421.  
  422. * -----------------------------------------------  
  423. *  
  424. **************************************************************************/  
  425. void TetrixWidget::addExitGameButton()  
  426. {  
  427.     //退出游戏按钮  
  428.     exitgameButton = new GameButtonItem( MODEWIN_EXIT ) ;  
  429.     connect(exitgameButton,SIGNAL(mouseOnMe()),  
  430.             this,SLOT(mouseOnExitgameButton())) ;  
  431.     connect(exitgameButton,SIGNAL(buttonClick()),this,SLOT(close())) ;  
  432.     exitgameButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  433.     exitgameButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  434. }  
  435.   
  436. /*************************************************************************  
  437. * 函数名称: addGameHihgscButton  
  438. * 功能描述: 添加游戏排行榜按钮  
  439.  
  440. * -----------------------------------------------  
  441. *  
  442. **************************************************************************/  
  443. void TetrixWidget::addGameHihgscButton()  
  444. {  
  445.     //游戏排行榜按钮  
  446.     gamehihgscButton = new GameButtonItem( MODEWIN_HIGHSCORE ) ;  
  447.     connect(gamehihgscButton,SIGNAL(mouseOnMe()),  
  448.             this,SLOT(mouseOnGameHihgscButton())) ;  
  449.     connect(gamehihgscButton,SIGNAL(buttonClick()),this,SLOT(clickOnGameHihgscButton()));  
  450.     gamehihgscButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  451.     gamehihgscButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  452. }  
  453.   
  454.   
  455. /*************************************************************************  
  456. * 函数名称: addGameOptionButton  
  457. * 功能描述: 添加游戏选项按钮  
  458. * -----------------------------------------------  
  459. *  
  460. **************************************************************************/  
  461. void TetrixWidget::addGameOptionButton()  
  462. {  
  463.     //游戏选项按钮  
  464.     gameoptionButton = new GameButtonItem( MODEWIN_OPTION ) ;  
  465.     connect(gameoptionButton,SIGNAL(mouseOnMe()),  
  466.             this,SLOT(mouseOnGameOptionButton())) ;  
  467.     connect(gameoptionButton,SIGNAL(buttonClick()),  
  468.             this,SLOT(clickOnGameOptionButton())) ;  
  469.     gameoptionButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  470.     gameoptionButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  471. }  
  472.   
  473. /*************************************************************************  
  474. * 函数名称: addInstrGameButton  
  475. * 功能描述: 添加游戏介绍按钮  
  476. *
  477. * -----------------------------------------------  
  478. *  
  479. **************************************************************************/  
  480. void TetrixWidget::addInstrGameButton()  
  481. {  
  482.     //游戏介绍按钮  
  483.     instrgameButton = new GameButtonItem( MODEWIN_INSTRUCTION ) ;  
  484.     connect(instrgameButton,SIGNAL(mouseOnMe()),  
  485.             this,SLOT(mouseOnInstrgameButton())) ;  
  486.     connect(instrgameButton,SIGNAL(buttonClick())  
  487.             ,this,SLOT(clickOnInstrgameButton())) ;  
  488.     instrgameButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  489.     instrgameButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  490. }  
  491.   
  492.   
  493.   
  494. /*************************************************************************  
  495. * 函数名称: addDianWoButton  
  496. * 功能描述: 添加点我按钮  
  497.   
  498. * -----------------------------------------------  
  499. *  
  500. **************************************************************************/  
  501. void TetrixWidget::addDianWoButton()  
  502. {  
  503.     //点我广告的按钮  
  504.     dianwoButton = new GameButtonItem( DIANWOWIN_BUTTON ) ;  
  505.     dianwoButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  506.     dianwoButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  507. }  
  508.   
  509.   
  510. /*************************************************************************  
  511. * 函数名称: addMoreGameButton  
  512. * 功能描述: 添加更多的游戏按钮  
  513. * -----------------------------------------------  
  514. *  
  515. **************************************************************************/  
  516. void TetrixWidget::addMoreGameButton()  
  517. {  
  518.     //更多的游戏按钮  
  519.     moregameButton = new GameButtonItem( MODEWIN_MOREGAME ) ;  
  520.     moregameButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  521.     moregameButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  522. }  
  523.   
  524.   
  525. /*************************************************************************  
  526. * 函数名称: addStartGameButton  
  527. * 功能描述: 添加开始游戏按钮  
  528. * -----------------------------------------------  
  529. *  
  530. **************************************************************************/  
  531. void TetrixWidget::addStartGameButton()  
  532. {  
  533.     startgameButton = new GameButtonItem( MODEWIN_START ) ;  
  534.     connect(startgameButton,SIGNAL(mouseOnMe()),  
  535.             this,SLOT(mouseOnStartgameButton())) ;  
  536.     connect(startgameButton,SIGNAL(buttonClick()),  
  537.             this,SLOT(clickOnStartgameButton())) ;  
  538.     startgameButton->setGameScene(gameScene,nameImageHash,namePointHash);  
  539.     startgameButton->setZValue(1.0);    //因为不是全部都在同一层,所有得分开来设置其Z轴的值  
  540. }  
  541. /*************************************************************************  
  542. * 函数名称: setSomeItemVisible  
  543. * 功能描述: 这里是因为,这个设置的图片太小,要把下面的开始与退出按钮给隐藏掉,  
  544. *           不然用户移动鼠标会误点到  
  545. *
  546. * -----------------------------------------------  
  547. *  
  548. **************************************************************************/  
  549. void TetrixWidget::setSomeItemVisible(bool visible)  
  550. {  
  551.     startgameButton->setVisible( visible );  
  552.     exitgameButton->setVisible( visible );  
  553.     dianwoButton->setVisible( visible );  
  554.     moregameButton->setVisible( visible );  
  555. }  
  556.   
  557.   
  558. /*************************************************************************  
  559. * 函数名称: getVolumeValueFromFile  
  560. * 功能描述: 从配置文件中读出所要的音量的值  
  561. * -----------------------------------------------  
  562. *  
  563. **************************************************************************/  
  564. inline int TetrixWidget::getVolumeValueFromFile(QString groupname, QString A_valueString)  
  565. {  
  566.     configIni->beginGroup( groupname );  
  567.     configIni->setIniCodec( "UTF-8" );  
  568.     int volume = configIni->value( A_valueString ).toInt() ;  
  569.     configIni->endGroup();  
  570.     return volume ;  
  571.   
  572. }  
  573.   
  574. /*************************************************************************  
  575. * 函数名称: getFullScreenValueFromFile  
  576. * 功能描述: 从配置文件中读取是否要设置全屏  
  577. * -----------------------------------------------  
  578. *  
  579. **************************************************************************/  
  580. inline bool TetrixWidget::getFullScreenValueFromFile(QString groupname, QString A_valueString)  
  581. {  
  582.     configIni->beginGroup( groupname );  
  583.     configIni->setIniCodec( "UTF-8" );  
  584.     bool fullscreen = configIni->value( A_valueString ).toBool() ;  
  585.     configIni->endGroup();  
  586.     return fullscreen ;  
  587.   
  588. }  
  589.   
  590. /*************************************************************************  
  591. * 函数名称: initGameGameSound  
  592. * 功能描述: 初始化游戏的背景音乐与音效  
  593.   
  594. * -----------------------------------------------  
  595. *  
  596. **************************************************************************/  
  597. void TetrixWidget::initGameGameSound()  
  598. {  
  599.     int musicVolume = getVolumeValueFromFile( GROUPNAME_SETTINGS,SETTINGS_MUSIC ) ;  
  600.     int audioVolume = getVolumeValueFromFile( GROUPNAME_SETTINGS,SETTINGS_AUDIO ) ;  
  601.     gameSound = new GameGameSound( musicVolume,audioVolume ) ;  
  602.     gameSound->setGameSceneAndConfigF(gameScene,configIni);  
  603. }  
  604.   
  605. /*************************************************************************  
  606. * 函数名称: addGameBackGroundItem  
  607. * 功能描述: 添加addGameBackGroundItem到场景去  
  608.   
  609. * -----------------------------------------------  
  610. *  
  611. **************************************************************************/  
  612. void TetrixWidget::addGameBackGroundItem()  
  613. {  
  614.     //在添加背景图片前先移除两个logo图片  
  615.     gameScene->removeItem( logoImageItem );  
  616.     backGroundItem = new GameBackGroundItem() ;  
  617.     backGroundItem->setGameScene( gameScene,nameImageHash );  
  618.     //添加所有的第二层的Item  
  619.     addAllSecondLayerItem() ;  
  620.     //初始化游戏的背景音乐与音效  
  621.     initGameGameSound();  
  622. }  
  623.   
  624. /*************************************************************************  
  625. * 函数名称: mouseOnStartgameButton  
  626. * 功能描述: 光标在开始游戏按钮  
  627. *  
  628. * 其它说明: 5个Button发送过来的信号分别对应不同的槽函数,在槽函数中又分别发送同一信号  
  629. *          不同参数,这样觉得有点麻烦,一下子用啦5个槽函数,目前没有想到更好的办法。  
  630. * 修改日期    版本号     修改人        修改内容  
  631. * -----------------------------------------------  
  632. *  
  633. **************************************************************************/  
  634. void TetrixWidget::mouseOnStartgameButton()  
  635. {  
  636.     //DEBUGP( 0 ) ;  
  637.     emit moveArrowat( 0) ;  
  638. }  
  639.   
  640. /*************************************************************************  
  641. * 函数名称: mouseOnInstrgameButton  
  642. * 功能描述: 光标在游戏介绍按钮  
  643. * -----------------------------------------------  
  644. *  
  645. **************************************************************************/  
  646. void TetrixWidget::mouseOnInstrgameButton()  
  647. {  
  648.     //DEBUGP( 1 ) ;  
  649.     emit moveArrowat( 1 ) ;  
  650. }  
  651. /*************************************************************************  
  652. * 函数名称: mouseOnGameOptionButton  
  653. * 功能描述: 光标在游戏选项按钮  
  654. *  
  655. * -----------------------------------------------  
  656. *  
  657. **************************************************************************/  
  658. void TetrixWidget::mouseOnGameOptionButton()  
  659. {  
  660.     //DEBUGP( 2 ) ;  
  661.     emit moveArrowat( 2 ) ;  
  662. }  
  663.   
  664. /*************************************************************************  
  665. * 函数名称: mouseOnGameHihgscButton  
  666. * 功能描述: 光标在游戏排行榜按钮  
  667. * -----------------------------------------------  
  668. *  
  669. **************************************************************************/  
  670. void TetrixWidget::mouseOnGameHihgscButton()  
  671. {  
  672.     //DEBUGP( 3 ) ;  
  673.     emit moveArrowat( 3 ) ;  
  674. }  
  675.   
  676. /*************************************************************************  
  677. * 函数名称: mouseOnExitgameButton  
  678. * 功能描述: 光标在退出游戏按钮  
  679.  
  680. * -----------------------------------------------  
  681. *  
  682. **************************************************************************/  
  683. void TetrixWidget::mouseOnExitgameButton()  
  684. {  
  685.     //DEBUGP( 4 ) ;  
  686.     emit moveArrowat( 4 ) ;  
  687. }  
  688.   
  689.   
  690. /*************************************************************************  
  691. * 函数名称: clickOnStartgameButton  
  692. * 功能描述: 单击开始游戏按钮  
  693.  
  694. * -----------------------------------------------  
  695. *  
  696. **************************************************************************/  
  697. void TetrixWidget::clickOnStartgameButton()  
  698. {  
  699.     movBacGrouItem =new GameMovBackGrouItem( MAINWIN_BACKGROUND ) ;  
  700.     //这个作为序号0记录到hash表中  
  701.     nowIndex = 0 ;  
  702.     numPointer.insert( nowIndex,(void *)movBacGrouItem ) ;  
  703.     connect( this,SIGNAL(coverOnArowItemSignal(bool)),  
  704.              gameScene,SIGNAL(changeCoveredStateSignal(bool))) ;  
  705.     //转发游戏窗口停用信号到场景中的游戏暂停信号  
  706.     connect(this,SIGNAL(gameDeactivateSignal()),gameScene,SIGNAL(gameDeactivateSignal())) ;  
  707.     //连接从场景中转发出来的回到游戏首页的信号与槽函数  
  708.     connect(gameScene,SIGNAL(backToGameHomeSignal()),  
  709.             this,SLOT(backToGameHomeSlot())) ;  
  710.     movBacGrouItem->setGameScene( gameScene,nameImageHash,namePointHash );  
  711.     movBacGrouItem->setZValue( 3.0 ) ;   //这个是作为第三层显示的  
  712.     //发送信号来还原之前改变的箭头Item的遮蔽状态  
  713.     emit coverOnArowItemSignal( true );  
  714. }  
  715.   
  716.   
  717. /*************************************************************************  
  718. * 函数名称: clickOnInstrgameButton  
  719. * 功能描述: 单击游戏介绍按钮  
  720.   
  721. * -----------------------------------------------  
  722. *  
  723. **************************************************************************/  
  724. void TetrixWidget::clickOnInstrgameButton()  
  725. {  
  726.     introduItem = new GameIntroductionItem( MODEWIN_HELP ) ;  
  727.     //这个作为序号1记录到hash表中  
  728.     nowIndex = 1 ;  
  729.     numPointer.insert( nowIndex,(void *)introduItem ) ;  
  730.     //返回游戏首页的信号的槽函数  
  731.     connect(introduItem,SIGNAL(backToSecondLay(int)),this,SLOT(backToSecondLaySlot(int))) ;  
  732.     connect( this,SIGNAL(coverOnArowItemSignal(bool)),  
  733.              gameScene,SIGNAL(changeCoveredStateSignal(bool))) ;  
  734.     introduItem->setGameScene( gameScene,nameImageHash );  
  735.     introduItem->setZValue( 3.0 ) ;   //这个是作为第三层显示的  
  736.     //发送信号来还原之前改变的箭头Item的遮蔽状态  
  737.     emit coverOnArowItemSignal( true );  
  738. }  
  739.   
  740. /*************************************************************************  
  741. * 函数名称: clickOnGameOptionButton  
  742. * 功能描述: 单击游戏选项按钮  
  743. * -----------------------------------------------  
  744. *  
  745. **************************************************************************/  
  746. void TetrixWidget::clickOnGameOptionButton()  
  747. {  
  748.     int musicVolume = getVolumeValueFromFile( GROUPNAME_SETTINGS,SETTINGS_MUSIC ) ;  
  749.     int audioVolume = getVolumeValueFromFile( GROUPNAME_SETTINGS,SETTINGS_AUDIO ) ;  
  750.     bool fullScreen = getFullScreenValueFromFile( GROUPNAME_SETTINGS,SETTINGS_FULLSCREEN) ;  
  751.     //DEBUGP( audioVolume ) ;  
  752.     optionItem = new GameOptionItem( OPTIONWIN_SETTING,musicVolume,audioVolume,fullScreen ) ;  
  753.     connect(optionItem,SIGNAL(backToSecondLay(int)),this,SLOT(backToSecondLaySlot(int))) ;  
  754.     connect( this,SIGNAL(coverOnArowItemSignal(bool)),  
  755.              gameScene,SIGNAL(changeCoveredStateSignal(bool))) ;  
  756.     //这个作为序号1记录到hash表中  
  757.     nowIndex = 2 ;  
  758.     numPointer.insert( nowIndex,(void *)optionItem ) ;  
  759.     optionItem->setGameScene( gameScene,nameImageHash,namePointHash );  
  760.     optionItem->setConfigureFile( configIni );  
  761.     optionItem->setZValue( 3.0 ) ;   //这个是作为第三层显示的  
  762.     /*  
  763.     这里是因为,这个设置的图片太小,要把下面的开始与退出按钮给隐藏掉,  
  764.     不然用户移动鼠标会误点到  
  765.     */  
  766.     setSomeItemVisible( false ) ;  
  767.   
  768.     //发送信号来还原之前改变的箭头Item的遮蔽状态  
  769.     emit coverOnArowItemSignal( true );  
  770.   
  771. }  
  772.   
  773. /*************************************************************************  
  774. * 函数名称: clickOnGameHihgscButton  
  775. * 功能描述: 单击游戏排行榜按钮  
  776.   
  777. * -----------------------------------------------  
  778. *  
  779. **************************************************************************/  
  780. void TetrixWidget::clickOnGameHihgscButton()  
  781. {  
  782.     highWinItem = new GameHighWinItem( MODEWIN_HIGHWIN );  
  783.     connect(highWinItem,SIGNAL(backToSecondLay(int)),this,SLOT(backToSecondLaySlot(int))) ;  
  784.     connect( this,SIGNAL(coverOnArowItemSignal(bool)),  
  785.              gameScene,SIGNAL(changeCoveredStateSignal(bool))) ;  
  786.     //这个作为序号1记录到hash表中  
  787.     nowIndex = 3 ;  
  788.     numPointer.insert( nowIndex,(void *)highWinItem ) ;  
  789.     highWinItem->setGameScene( gameScene,nameImageHash,namePointHash );  
  790.     highWinItem->setZValue( 3.0 ) ;   //这个是作为第三层显示的  
  791.   
  792.     //发送信号来还原之前改变的箭头Item的遮蔽状态  
  793.     emit coverOnArowItemSignal( true );  
  794. }  
  795.   
  796. /*************************************************************************  
  797. * 函数名称: clickOnExitgameButton  
  798. * 功能描述: 单击退出游戏按钮  
  799. *
  800. * -----------------------------------------------  
  801. *  
  802. **************************************************************************/  
  803. void TetrixWidget::clickOnExitgameButton()  
  804. {  
  805.     //退出程序  
  806.     this->close() ;  
  807. }  
  808. /*************************************************************************  
  809. * 函数名称: clickOnButton  
  810. * 功能描述: 这个是根据当前箭头序号来确定进入到哪个Item的槽函数  
  811.  
  812. * -----------------------------------------------  
  813. *  
  814. **************************************************************************/  
  815. void TetrixWidget::clickOnButton(int index)  
  816. {  
  817.     switch( index )  
  818.     {  
  819.     case 0:  
  820.         clickOnStartgameButton() ;  
  821.         break ;  
  822.     case 1:  
  823.         clickOnInstrgameButton() ;  
  824.         break ;  
  825.     case 2:  
  826.         clickOnGameOptionButton() ;  
  827.         break ;  
  828.     case 3:  
  829.         clickOnGameHihgscButton() ;  
  830.         break ;  
  831.     case 4:  
  832.         clickOnExitgameButton() ;  
  833.         break ;  
  834.     default:  
  835.         break ;  
  836.   
  837.     }  
  838. }  
  839.   
  840.   
  841. /*************************************************************************  
  842. * 函数名称: backToSecondLaySlot  
  843. * 功能描述: 用户按Esc键返回到第二层,返回游戏首页的信号的槽函数  
  844.  
  845. * 其它说明: 通过这个当前箭头所对应的序号的值  
  846. *       比如说  
  847. *       0---->开始游戏  
  848. *       1---->游戏介绍  
  849. *       。。。。。。  
  850. *       在NumAndPointerHash表中查找相应的Item的指针的值  
  851. *
  852. * -----------------------------------------------  
  853. *  
  854. **************************************************************************/  
  855. void TetrixWidget::backToSecondLaySlot( int index )  
  856. {  
  857.     void * item ;  
  858.     /*  
  859. 如果当用户本来就在第二层游戏首页时,这个时候却按下Esc键,这个时候这个item为空。  
  860. 首先得判断hash表中有没这个key值  
  861.     */  
  862.     if( numPointer.contains( index ) )  
  863.     {  
  864.         item = numPointer.value( index ) ;  
  865.         if( item )  
  866.         {  
  867.             //因为每个类型的指针的类型是不同的,所以这里得这样分开来写  
  868.             switch( index )  
  869.             {  
  870.                 case 0:  
  871.                     //在这里发送信号,先去删除动态珊瑚背景层之上的东西,也就是第四层与第五层的东西  
  872.                     //因为第四层与第五层都是作为动态珊瑚背景(第三层)的成员变量,所以在这里得在删除第三层前  
  873.                     //删掉第四层与第五层的东西  
  874.                     ((GameMovBackGrouItem *)item)->removeFourthAndFifthItemFun();  
  875.                     gameScene->removeItem( (GameMovBackGrouItem *)item );  
  876.                     delete ((GameMovBackGrouItem *)item);  
  877.                     //再次发送信号来还原之前改变的箭头Item的遮蔽状态  
  878.                     emit coverOnArowItemSignal( false );  
  879.                     break ;  
  880.                 case 1:  
  881.                     gameScene->removeItem( (GameIntroductionItem *)item );  
  882.                     delete (GameIntroductionItem *)item ;  
  883.                     //再次发送信号来还原之前改变的箭头Item的遮蔽状态  
  884.                     emit coverOnArowItemSignal( false );  
  885.                     break ;  
  886.                 case 2:  
  887.                     //使得四个按钮恢复显示  
  888.                     setSomeItemVisible( true ) ;  
  889.                     gameScene->removeItem( (GameOptionItem *)item );  
  890.                     delete (GameOptionItem *)item ;  
  891.                     //再次发送信号来还原之前改变的箭头Item的遮蔽状态  
  892.                     emit coverOnArowItemSignal( false );  
  893.                     break ;  
  894.                 case 3:  
  895.                     gameScene->removeItem( (GameHighWinItem *)item );  
  896.                     delete (GameHighWinItem *)item ;  
  897.                     //再次发送信号来还原之前改变的箭头Item的遮蔽状态  
  898.                     emit coverOnArowItemSignal( false );  
  899.                     break ;  
  900.                 case 4:  
  901.                     break ;  
  902.                 default:  
  903.                     DEBUGP( "index error !" ) ;  
  904.                     break ;  
  905.             }  
  906.             //清空现在的记录,以便下次再进行切换  
  907.             nowIndex = -1 ;  
  908.             numPointer.remove( index ) ;  
  909.         }  
  910.   
  911.     }  
  912.   
  913. }  
  914.   
  915.   
  916. /*************************************************************************  
  917. * 函数名称: backToGameHomeSlot  
  918. * 功能描述: 这个是前景Item的退回到游戏首页的按钮的槽函数  
  919.  
  920. * -----------------------------------------------  
  921. *  
  922. **************************************************************************/  
  923. void TetrixWidget::backToGameHomeSlot()  
  924. {  
  925.     //因为这个时候是进入游戏之后才可以看到游戏的前景  
  926.     backToSecondLaySlot( 0 ) ;  
  927. }  
  928. /*************************************************************************  
  929. * 函数名称: eventFilter  
  930. * 功能描述: 事件过滤器  
  931. *  
  932. * 其它说明:这个是重载事件过滤器函数,通过这个函数判断,当鼠标移动到其他的软件的窗口时,  
  933. *         这个时候整个游戏软件被停用。在这个时候发送暂停游戏的消息  
  934. * 修改日期    版本号     修改人        修改内容  
  935. * -----------------------------------------------  
  936. *  
  937. **************************************************************************/  
  938. bool TetrixWidget::eventFilter(QObject *watched, QEvent *event)  
  939. {  
  940.     if( watched == this )  
  941.     {  
  942.         //窗口停用,及一般人认为的失去焦点  
  943.         if(QEvent::WindowDeactivate == event->type())  
  944.         {  
  945.             //  
  946.             //DEBUGP( "eventFilter" ) ;  
  947.             emit gameDeactivateSignal() ;  
  948.             return true ;  
  949.         }  
  950.         else  
  951.         {  
  952.             return false ;  
  953.         }  
  954.     }  
  955.     return false ;  
  956. }  
  957. void TetrixWidget::resizeEvent(QResizeEvent *event)  
  958. {  
  959.     gameScene->setSceneRect(0, 0, gameView->width(), gameView->height());  
  960. }  
阅读(790) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~