Qt版双人俄罗斯方块游戏

Qt版双人俄罗斯方块游戏

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907

之前写过《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下的一样。

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907

时间: 2024-10-06 00:30:47

Qt版双人俄罗斯方块游戏的相关文章

Qt版贪吃蛇游戏

Qt版贪吃蛇游戏 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 最近在学习Qt,用了一个多月的时间掌握了Qt中最基本的知识,也完成了<Qt版音乐播放器>.<Qt版贪吃蛇游戏>.<Qt版双人俄罗斯方块>以及<Qt版科学计算器>等,之前在VC下写过这些程序,所以在Qt下只是改变了显示等语句,我写过<C++版贪吃蛇游戏>.<VC版贪吃蛇游戏>,当时将与显示等无关的东西封装起来,在Qt下直接用,只

CSS+js打造的网页版俄罗斯方块游戏

<HTML> <SCRIPT> parent.moveTo((screen.width-775)/2,(screen.height-540)/2); parent.resizeTo(775,540) </SCRIPT> <HEAD> <META NAME="Title" CONTENT="JScript Simple Tetris"> <TITLE>CSS+js打造的网页版俄罗斯方块游戏丨石家庄

21款网页版html5小游戏源码

html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js html5 2048数字游戏源码_2048网页版源码下载 html5盲打高手打飞字游戏下载_网页版英文打飞字游戏源码下载 jQuery flappy bird电脑版小游戏源码下载 网页版html5 3d俄罗斯方块游戏源码下载 jQuery html5迷宫游戏源码下载 html5网页游戏仿flappy

【QT学习】数独游戏

前几天刷leetcode刷到一题,讲sudokuSolver,写完感觉很有意思,遂想做一个数独游戏,百度了一下如何自动生成题库,参考某位大神安卓下的实现思路,自己做了一套文字版的数独游戏,后来想乘机会学一下QT于是完成了图形界面的数独.先mark一下之后从数独解题,数独出题,QT图形界面来讲讲自己的心得体会. 界面写完是这样的.也算有点小成就感了. 游戏链接+QT运行动态库 http://pan.baidu.com/s/1kTu5alh

俄罗斯方块游戏:C语言程序设计初步感受

C语言课程设以一节课,老师提供了一个C语言的俄罗斯方块游戏让我们感受,本学期C语言课程,主要是各种语句的练习,这次是用以前的知识来感受一个实际的系统. 首先安装c-free,然后打开老师所发给我们的小程序. 界面很简单,没想到C语言还能做这么有意思的东西,真是没有想到. 分析一下程序,感觉比较太复杂的,但就是本学期学习的简单语句的组合,运用起来如此神奇. 1.首先是在屏幕上显示的语句printf 2.运用for语句建立窗口 for(i=2;i<2*Frame_width-2;i+=2) { go

Qt版音乐播放器

    Qt版音乐播放器 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 一.关于Qt 1.1 什么是Qt Qt是一个跨平台应用程序和UI开发框架.使用Qt只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序. Qt Creator是全新的跨平台Qt IDE,可单独使用,也可与Qt库和开发工具组成一套完整的SDK,其中包括:高级C++代码编辑器,项目和集成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理

60行代码:Javascript 写的俄罗斯方块游戏

先看效果图: 游戏结束图: javascript实现源码: <!doctype html> <html><head><title>俄罗斯方块</title> <meta name="Description" content="俄罗斯方块Javascript实现"> <meta name="Keywords" content="俄罗斯方块,Javascript,

javascript 60行编写的俄罗斯方块游戏

转自 http://www.zuidaima.com/share/1759652641295360.htm <!doctype html><html><head></head><body> <div id="box" style="width:252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow

俄罗斯方块游戏自动机

<用electron制作俄罗斯方块游戏> 后续文章,智能程序玩俄罗斯方块游戏. 背景 前不久用ES6完成了基本的俄罗斯方块游戏,今天已经完成了一个初步的智能算法,可以自动玩俄罗斯方块了,让自己的想法朝实现更近了一步. 效果图 第一次运行,消除了1398行,窃喜! 程序结构 主要关注智能算法,结构简单化,全部放在了index.js中. 用定时器驱动游戏 function autoPlayClick(){ isAutoPlay = document.getElementById('autoPlay