码迷,mamicode.com
首页 > 其他好文 > 详细

Qt版双人俄罗斯方块游戏

时间:2015-02-27 21:31:52      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:qt   俄罗斯方块   

Qt版双人俄罗斯方块游戏
    之前写过《VC版双人俄罗斯方块》,将其在Qt下又重写了一遍,核心的算法还是采用VC下曾经用过的C++源码,直接用的是当时封装好的类,写在一个文件中,所以直接拿来用。不同的仍然是与显示有关的东西需要采用Qt下的显示方式。
以下是Qt版运行截图:
技术分享


先是按键响应槽的实现代码:
void Tetris::keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_0)
        onPause();

    if(event->key() == Qt::Key_Right)
        activeBrick->shiftRight(bin);
    else if(event->key() == Qt::Key_Left)
        activeBrick->shiftLeft(bin);
    else if(event->key() == Qt::Key_Up)
        activeBrick->rotateClockwise(bin);
    else if(event->key() == Qt::Key_Down)
        activeBrick->shiftDown(bin);

    if(event->key() == Qt::Key_6)
        activeBrick2->shiftRight(bin2);
    else if(event->key() == Qt::Key_4)
        activeBrick2->shiftLeft(bin2);
    else if(event->key() == Qt::Key_8)
        activeBrick2->rotateClockwise(bin2);
    else if(event->key() == Qt::Key_5)
        activeBrick2->shiftDown(bin2);

}

之后还有就是绘制槽的实现代码:
void Tetris::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    unsigned int width,i,j;
    unsigned int height,width1,height1;
    unsigned int height2,width2,height3,width3;

    width=bin->getWidth();  //左边主显示面板宽度与高度的获取
    height=bin->getHeight();
    width1=bin1->getWidth();//左边预测面板的宽度与高度的获取
    height1=bin1->getHeight();

    width2=bin2->getWidth();//右边主显示面板宽度与高度的获取
    height2=bin2->getHeight();
    width3=bin3->getWidth();//右边预测面板的宽度与高度的获取
    height3=bin3->getHeight();

    int nSize=20;

    QRect rect(0,0,860,500);
    QImage imageBack;
    imageBack.load(":/images/background.png");
    QBrush brushBack(imageBack);
    painter.setBrush(brushBack);
    painter.drawRect(rect);


    //右边玩家分数的输出
    QRect re;
    //pDC->FillSolidRect(re,RGB(210,255,255));

    char buf[100];

   // sprintf(buf,"  %d  ",numLines*10);
   // pDC->TextOut(330,90,buf);
    ui->label_scorel->setText(QString::number(numLines*10));
    ui->label_scorel_2->setText(QString::number(numLines1*10));
    //左边玩家分数的输出
    QRect re1;
   // pDC->FillSolidRect(re1,RGB(230,255,100));
   // char buf1[100];
    if(GameModal==2)
    {
      //  sprintf(buf1,"  %d  ",numLines1*10);
      //  pDC->TextOut(440,90,buf1);
    }
    QRect  rc,rc1,rc2,rc3;
    QString str[] = {":/images/blue.png",
                       ":/images/red.png",
                       ":/images/green.png",
                       ":/images/blue.png",
                       ":/images/ya.png",
                       ":/images/yello.png"
                       ":/images/green.png",
                       ":/images/green.png"};
    int b,b1,b2;

    for(i=0;i<height1;i++)
    {
        for(j=0;j<width1;j++)
        {
            rc1=QRect(j*nSize+300,i*nSize,nSize,nSize);		//矩形的区域
            if(image1[i][j]!=0)
            {
                b=image1[i][j];
               // qDebug()<<str[b];
                QImage img;
                img.load(":/images/red.png");
               // img.load(str[b]);
                QBrush brush(img);
                painter.setBrush(brush);
                painter.fillRect(rc1,brush);

              //  painter.setBrush(Qt::green);
              //  painter.drawRect(rc1);
            }
        }
    }
    for(i=0;i<height;i++)
    {
        for(j=0;j<width;j++)
        {
            rc=QRect(j*nSize+80,i*nSize,nSize,nSize);
            if(image[i][j]!=0)
            {
                b=image[i][j];    //左边玩家主面板砖块的位图填充
           //     qDebug()<<str[b];
                QImage img;
                img.load(":/images/red.png");
               // img.load(str[b]);
                QBrush brush(img);
                painter.setBrush(brush);
                painter.fillRect(rc,brush);
            }
        }
    }


    /////////////////////////////////////////
    if(GameModal==2)
    {
        for(i=0;i<height3;i++)
        {
            for(j=0;j<width3;j++)
            {
                rc3=QRect(j*nSize+420,i*nSize,nSize,nSize);
                if(image3[i][j]!=0)
                {
                    b=image3[i][j];//右边玩家预测砖块的位图填充
                 //   qDebug()<<str[b];
                    QImage img;
                    img.load(":/images/green.png");
                   // img.load(str[b]);
                    QBrush brush(img);
                    painter.setBrush(brush);
                    painter.fillRect(rc3,brush);
                }
            }
        }
        for(i=0;i<height2;i++)
        {
            for(j=0;j<width2;j++)
            {
                rc2=QRect(j*nSize+540,i*nSize,nSize,nSize);
                if(image2[i][j]!=0)
                {
                    b=image2[i][j];//右边玩家主面板砖块的位图填充
                   // qDebug()<<str[b];
                    QImage img;
                    img.load(":/images/green.png");
                   // img.load(str[b]);
                    QBrush brush(img);
                    painter.setBrush(brush);
                    painter.fillRect(rc2,brush);
                }


            }
        }
    }
}
其他的都和VC下的一样。


Qt版双人俄罗斯方块游戏

标签:qt   俄罗斯方块   

原文地址:http://blog.csdn.net/u012027907/article/details/43972499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!