void MainWindow::collisDete() { //水管碰撞偵測 int birdRx=birds->pos().x()+30; int birdDy=birds->pos().y()+30; for(int i=0;i<pipeCount;i++) { if(birdRx>=pipe[i]->pos().x()&&birds->pos().x()<=pipe[i]->pos().x()+pipe[i]->width()-10) // XX->width可用來取得物件寬度 { if(birds->pos().y() <= (pipe[i]->pos().y()+pipe[i]->getH1()) || birdDy >= (pipe[i]->pos().y()+pipe[i]->getH1()+pipe[i]->getGap())) //碰到水管遊戲結束 gameLose(); } } }
void BlockAreaCatch::updateProgressbar() { if(counter >= 0) { --counter; bar->setValue(counter); // QPalette p = progressBar.palette(); // p.setColor(QPalette::Highlight, Qt::blue); // progressBar->setStyleSheet("background_color: #ff0000"); bar->show(); } else { timer.stop(); frozon = true; emit gameLose(); } }
void MainWindow::birdAction() { //鳥的運動 // 每次觸發這個function都會更改鳥的位置,x軸不變, y軸加上 birdV成為新的位置 // XX->pos().x() and XX->pos().y() 是QWidget物件的函式,可以用來取得xy座標位置 birds->move(birds->pos().x(),birds->pos().y()+birdV); if(index_birdV<14.0) index_birdV+=0.2; else index_birdV=14.0; birdV=birdV_array[int(index_birdV)]; // 這邊做一個地板碰撞偵測 if(birds->pos().y()+birds->height()>=win_height+10) { birds->move(birds->pos().x(),win_height-birds->height()+10); // XX->height可用來取得物件高度 birdTimer->stop(); gameLose(); } }