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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM