Offer

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

 

posted @ 2017-10-29 21:45  Empirefree  阅读(10358)  评论(0编辑  收藏  举报