zoukankan      html  css  js  c++  java
  • QT实现小球游戏(零基础入门)

      本文章基本全代码敲窗口小球游戏,最后会免费加上源代码,让读者有更清晰的了解

            内容主要覆盖:

              1> Qtimer计时器的开始和结束,以及显示系统时间等等。。。

              2> 多个Qwidget布局和背景颜色调配

              3>小球撞板反弹和小球撞板在Qwidget中分数的传递(就是小球撞一次板,分数加一,并且还要显示出来)

      注:有基础的读者最好先想一下困难点在哪里,并仔细看代码中是如何实现的,本文对于QT学习是一个大的突破,毕竟全代码,后面还有一个舒尔特方格,下次再补上来.

      基本窗口就是这样,下面直接开始介绍函数吧(0基础摸索画了一天时间,我自己都被自己蠢哭!)

        步骤一:我弄简单一点,做一个大的vbox垂直布局,里面包括了下面的downwidget和hbox水平布局,hbox水平布局又包括了time和upwidet(这里hbox和vbox是系统自带函数,downwidget,time,upwidget是要自己写的小部件,就是为了排列好看,才有了上面的布局)

     hbox = new QHBoxLayout;
        hbox->addWidget(time);
        topWidget->setFixedHeight(30);
        time->setFixedHeight(30);
        hbox->addWidget(topWidget);
        vbox = new QVBoxLayout();
        vbox->addLayout(hbox);
        vbox->addWidget(bottomWidget);
        setLayout(vbox);
        resize(800, 600);
        palette.setBrush(this->backgroundRole(), Qt::lightGray);
        this->setPalette(palette);
    

        步骤二: time里面加入系统时间(关键),upwidget里面加入label(这里我说一下,如何实现小球撞板分数就加一呢?关键在于球的横纵坐标等于挡板的横纵坐标即相撞时,就要发出一个myscore的信号,然后mainwidget里面接到,传给upwidget,upwidget里面的变量加1,再输出就实现啦!)downwidget里面加入小球运动的函数就可以了 

        time:

      QDateTime time = QDateTime::currentDateTime();
        QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
        label->setText(str);

        upwidget:
        

      upscore++;
        labelScore->setText(QString("Score: %1 ").arg(upscore));

        downwidget:

        (小球运动的代码太过简单,所以很多,这里不写,读者直接看压缩包)

        步骤三:设置背景,前2步最重要吧,背景什么的就是为了好看,2个按钮也只需要加个timer.stop()之类的就可以了

          

    void UpWidget::paintEvent(QPaintEvent *event){
        Q_UNUSED(event);
        QPainter p(this);
        p.setPen(Qt::NoPen);
        p.setBrush(Qt::yellow);
        p.drawRect(rect());
    }

       总结:按照老师要求,本游戏可以实现挡板档球,每挡一次分数加一,显示时间,让球停止,让球加速,整体布局的功能,主要内容就是先布局 widget,然后在每一个widget里面分别操作,互不干扰,唯一影响的就是传分数,上面说了一遍,我再说一下,读者可能还是很疑惑,就是downwidget是无法传分数的,只需要发一个信号(函数)就可以了,然后mainwidget实现的是一种中转站的功能,把upwidget和downwidget联系起来,接收他的信号,让变量+1,再显示在label上面就可以了,很简单的一个游戏,但是我这个垃圾从0开始,搞了一天才搞完,有问题再讨论。

      博客园上面好像传不了压缩包啊,没办法啦,传到网盘去吧,以后留个纪念!

      链接: https://pan.baidu.com/s/1o799EjC 密码: ijyw


    我曾七次鄙视自己的灵魂:
    第一次,当它本可进取时,却故作谦卑;
    第二次,当它在空虚时,用爱欲来填充;
    第三次,在困难和容易之间,它选择了容易;
    第四次,它犯了错,却借由别人也会犯错来宽慰自己;
    第五次,它自由软弱,却把它认为是生命的坚韧;
    第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
    第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
  • 相关阅读:
    utils:一个通用枚举类
    代码片段(二):SQL片段
    Scala:(一) 特点及安装环境配置
    Scala:(二) 语言基础-数据结构、表达式(判断、循环、块表达式)
    11-docker搭建mysql一主一从
    10-docker搭建rabbitmq集群
    尚硅谷周阳面试第二季
    docker 修改mysql 表大小写铭感
    volatile的理解
    消息队列优缺点及其选型
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/7751472.html
Copyright © 2011-2022 走看看