QT写贪吃蛇
QT寫貪吃蛇
QT寫貪吃蛇的話,分幾個部分,一個是界面一個是算法,界面有游戲界面和貼圖界面。
1.界面需要注意的部分
void MainWindow::intbackground(){setAutoFillBackground(true);QPalette palette;palette.setBrush(QPalette::Background, QBrush(QPixmap(":/images/back.jpg").scaled(this->size())));setPalette(palette);ui->pushButton->setIcon(QIcon(":/images/quit.png"));//將圖片貼到pushbuttom上 ui->pushButton->setIconSize(QSize(100,100));//調整貼圖大小ui->pushButton->setFlat(true);//是否露出邊框ui->pushButton_2->setIcon(QIcon(":/images/start.png"));ui->pushButton_2->setIconSize(QSize(100,100));ui->pushButton_2->setFlat(true);// //ui->pushButton_3->setIcon(QIcon(":/images/AUTO1.png"));//ui->pushButton_3->setIconSize(QSize(100,100));//ui->pushButton_3->setFlat(true);} void MainWindow::intwindow(){setWindowTitle("貪吃蛇");//這個就是設計左上角的那段文字setWindowIcon(QIcon(":/images/icon.png"));//可以給一個貼圖在左上角 } //結束 void MainWindow::on_pushButton_clicked() { exit(1); } //開始 void MainWindow::on_pushButton_2_clicked()// { she *game=new she(this);//我建了一個叫做蛇的子類 game->show();//在創一個窗口 }可能你們貼圖的時候無法顯示出來,這個問題,我也遇見過,說什么資源文件過大,你需要用ps處理下,好像是打開圖片另存為,在那個選項中去掉啥子,詳細過程可以去百度下。
關于蘋果的生成就幾個部分
1.隨機函數
2.2個數組來儲存位置
3.沖突的判斷
4.用一個私有成員來記錄蘋果的個數,來達到更新的作用
關于蛇的話就簡單的多,只要處理好碰撞問題,和方向問題就行了
//方向用一個私有成員代替direct void she::keyPressEvent(QKeyEvent *event){switch(event->key()){case Qt::Key_W:if(direct!=2)direct=1;break;case Qt::Key_S:if(direct!=1)direct=2;break;case Qt::Key_A:if(direct!=4)direct=3;break;case Qt::Key_D:if(direct!=3)direct=4;break;} } void she::pause_push(){Timer->stop();//停止connect(starpush,SIGNAL(clicked(bool)),this,SLOT(star_push()));starpush->setIcon(QIcon(":/images/Play.png"));disconnect(starpush,SIGNAL(clicked(bool)),this,SLOT(pause_push())); } void she::star_push(){Timer->start(500);沒500ms調用一次與timer鏈接的函數disconnect(starpush,SIGNAL(clicked(bool)),this,SLOT(star_push()));starpush->setIcon(QIcon(":/images/start.png"));connect(starpush,SIGNAL(clicked(bool)),this,SLOT(pause_push())); } 之前我們用timer和這個函數鏈接起來,我們在開始函數 void she::time_p() { //如果蛇頭碰到了蘋果if(snake[0][0]==foodx[lef]/40&&snake[0][1]==foody[lef]/40){data[n2][lef]='1';n_len=0;body++;score=score+10;//加分lef++;//吃到蘋果的個數int n4;n4=data[n2].size();if(n2==0)n4++;if(lef==n4-1){diff++;Timer->start(500-n2*20);}levelablenum->setText(QString::number(diff)+"級");scorenumber->setText(QString::number(score)+"分");}int n3=data[n2].size(); //如果吃到全部的蘋果if(lef>=n3){delete []foodx;delete []foody;n2++;n1=data[n2].size();foodx=new int[n1];foody=new int[n1];lp->setText(data2[n2]);for(int i=0;i<n1;i++){foodx[i]=(rand()%19)*40;if(foodx[i]==0)foodx[i]=40;foody[i]=(rand()%19)*40;if(foody[i]==0)foody[i]=40;}}lef=0;}for(int i=body;i!=0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];cap[snake[i][0]][snake[i][1]]=1;}}QPainter painter(this);switch (direct) { case 1:--snake[0][1];break;//,painter.drawImage(QRect((40*snake[0][0]),(40*snake[0][1]),40,40),QImage(":/images/shu.png"));break; case 2:++snake[0][1];break;//painter.drawImage(QRect((40*snake[0][0]),(40*snake[0][1]),40,40),QImage(":/images/shu.png"));break; case 3:--snake[0][0];break;//,painter.drawImage(QRect((40*snake[0][0]),(40*snake[0][1]),40,40),QImage(":/images/heng.png"));break; case 4:++snake[0][0];break;//,painter.drawImage(QRect((40*snake[0][0]),(40*snake[0][1]),40,40),QImage(":/images/heng.png"));break; default:break;}this->update();//更新 connect(Timer,SIGNAL(timeout()),this,SLOT(game_over()));//鏈接結束 } void she::game_over(){if(snake[0][0]<0||snake[0][0]>20||snake[0][1]<0||snake[0][1]>20){Timer->stop(); QMessageBox::Yes==QMessageBox::information(this,"Tips:","Game Over!",QMessageBox::Yes);this->hide();delete this;}elsefor(int i=1;i<body;i++){if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1]){Timer->stop();this->hide();QMessageBox::Yes==QMessageBox::information(this,"Tips:","Game Over!",QMessageBox::Yes);delete this;}}this->update();; }總結
- 上一篇: 全国计算机a类高等学校,全国最强专业都在
- 下一篇: 佳博 GP-L80180 USB ESC