貪食蛇游戲?qū)嵙晥蟾鎋第1頁
貪食蛇游戲?qū)嵙晥蟾鎋第2頁
貪食蛇游戲?qū)嵙晥蟾鎋第3頁
貪食蛇游戲?qū)嵙晥蟾鎋第4頁
貪食蛇游戲?qū)嵙晥蟾鎋第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

貪吃蛇游戲開發(fā)一、需求分析1、該貪吃蛇設(shè)計主要具有吃食、暫停、開始以及重新開始游戲。2、主要目標:本游戲?qū)崿F(xiàn)貪吃蛇在制定空間去吃隨機出現(xiàn)的方塊。游戲可以暫停,如不滿意這一次游戲的成果還能重新開始游戲。二、項目設(shè)計1、流程設(shè)計程序流程圖2、游戲具體設(shè)計:(1)蛇移動的實現(xiàn)蛇的移動方向主要受頭結(jié)點控制,所以每次畫蛇時只要把前一結(jié)點的值賦給后一節(jié)點即可。當蛇頭的移動方向向右時,y值不變x的值不斷增加。當蛇頭的移動方向向左時,y值不變x的值不斷減少。當蛇頭的移動方向向下時,y值增加x的值不變。當蛇頭的移動方向向上時,y值減小x的值不變。(2)蛇死亡的判斷當蛇頭的值與蛇身或與墻的值相等時,蛇即算死亡.(3)蛇到達邊框時從另一端出現(xiàn)和傳送的實現(xiàn)當蛇頭的x或y值達到邊框的最大或最小位置時相應的給x或y賦以邊框的最小或最大值以實現(xiàn)當蛇到達邊框時能從另一端出來,同理當蛇頭的x,y值等于傳送點位置的值時將蛇頭x,y的值賦以被傳送到位置的值,這樣將實現(xiàn)蛇的傳送功能。三、項目實現(xiàn)①蛇身顏色、最大長度及速度intspeed;//設(shè)置蛇的速度intmaxLen;//設(shè)置蛇的最大長度②隨機生成食物產(chǎn)生隨機種子:qsrand(QTime().currentTime().msec());定義食物的坐標、形狀及顏色:intmx=(qrand()%(w/20))*20;intmy=(qrand()%(h/20))*20;food=newQLabel(this);food->move(mx,my);food->resize(20,20);//食物大小food->setAutoFillBackground(true);//設(shè)置食物自動填充背景顏色food->setFrameShape(QFrame::Box);//設(shè)置形狀food->setFrameShadow(QFrame::Sunken);food->setPalette(QPalette(QColor(qrand()%255,qrand()%110,qrand()%255)));//改變調(diào)色板的顏色returnfood;③方向控制及按鍵事件處理方向控制:switch(d){cased_up:nheady-=speed;break;cased_down:nheady+=speed;break;cased_left:nheadx-=speed;break;cased_right:nheadx+=speed;break;}按鍵事件處理:voidsnake::keyPressEvent(QKeyEvent*f){if(f->key()==Qt::Key_Up){d=d_up;}elseif(f->key()==Qt::Key_Down){d=d_down;}elseif(f->key()==Qt::Key_Left){d=d_left;}elseif(f->key()==Qt::Key_Right){d=d_right;}}④食物的顯示與蛇吃食物食物顯示:data.push_back(getFood());//將吃到的食物添加在蛇身之后timer=newQTimer();//初始化時鐘timer->setInterval(400);//設(shè)置時鐘周期timer->start();connect(timer,SIGNAL(timeout()),this,SLOT(move()));//傳遞信號food=getFood();food->show();蛇吃食物:if((nheadx==foodx)&&(nheady==foody)){data.push_back(food);food=getFood();food->show();}游戲截圖1游戲截圖2游戲截圖3游戲截圖4⑤游戲結(jié)束條件if(data.size()>=10){QMessageBoxmsg(this);msg.setText("gameover!");msg.setStandardButtons(QMessageBox::Yes|QMessageBox::No);msg.show();if(msg.exec()==QMessageBox::Yes){this->close();}}四、總結(jié)經(jīng)過10天的培訓,讓我進一步熟悉了Linux系統(tǒng)下命令的使用、文件的編寫與調(diào)試,更熟悉了以前所學的C++語言,讓我對我所學習的計算機更加了解喜歡,也更加希望自己能學好計算機方面的設(shè)計,去設(shè)計更多有意思的游戲。也非常感謝培訓老師這些天對我們的悉心教導,讓我們學到了很多東西。五、附錄1、主函數(shù)代碼#include<QtGui/QApplication>#include"snake.h"intmain(intargc,char*argv[]){QApplicationa(argc,argv);snakew;w.show();returna.exec();}2、頭文件代碼#ifndefSNAKE_H#defineSNAKE_H#include<QDialog>#include<QLabel>#include<QList>//枚舉四個方向enumDirection{d_up,d_down,d_left,d_right};namespaceUi{classsnake;}classsnake:publicQDialog{Q_OBJECTprivate:QLabel*food;//食物QList<QLabel*>data;//列表intspeed;//設(shè)置蛇的速度intmaxLen;//設(shè)置蛇的最大長度Directiond;//方向QTimer*timer;//定時器計時public:snake(QWidget*parent=0);~snake();//虛構(gòu)函數(shù)QLabel*getFood();publicslots:voidmove();protected:voidchangeEvent(QEvent*e);voidkeyPressEvent(QKeyEvent*);//按鍵事件處理voidTimerEvent(QTimerEvent*);//定時器事件處理private:Ui::snake*ui;};#endif//SNAKE_H3、功能實現(xiàn)代碼#include"snake.h"#include"ui_snake.h"#include<QMessageBox>#include<QTimer>#include<QTime>#include<QKeyEvent>#include<time.h>#include<QColor>#include<QPalette>#include<QApplication>#include<QFrame>snake::snake(QWidget*parent):QDialog(parent),ui(newUi::snake){ui->setupUi(this);speed=20;//速度qsrand(QTime().currentTime().msec());//產(chǎn)生隨機種子this->resize(400,400);//窗口大小d=d_right;//默認方向data.push_back(getFood());//將吃到的食物添加在蛇身之后timer=newQTimer();//初始化時鐘timer->setInterval(400);//設(shè)置時鐘周期timer->start();connect(timer,SIGNAL(timeout()),this,SLOT(move()));//傳遞信號food=getFood();food->show();maxLen=10;//蛇身最大長度}snake::~snake(){deleteui;//從集合中移除位于指定索引位置的對象while(data.size()>0){deletedata[0];data.removeAt(0);}}QLabel*snake::getFood(){//定義窗口的高度和寬度intw=this->width();inth=this->height();//定義食物的坐標intmx=(qrand()%(w/20))*20;intmy=(qrand()%(h/20))*20;food=newQLabel(this);food->move(mx,my);food->resize(20,20);//食物大小food->setAutoFillBackground(true);//設(shè)置食物自動填充背景顏色food->setFrameShape(QFrame::Box);//設(shè)置形狀food->setFrameShadow(QFrame::Sunken);food->setPalette(QPalette(QColor(qrand()%255,qrand()%110,qrand()%255)));//改變調(diào)色板的顏色returnfood;}voidsnake::move(){//獲取蛇頭坐標intnheadx=data[0]->x();intnheady=data[0]->y();//獲取食物坐標intfoodx=food->x();intfoody=food->y();//吃食物if((nheadx==foodx)&&(nheady==foody)){data.push_back(food);food=getFood();food->show();}//設(shè)置結(jié)束條件if(data.size()>=10){QMessageBoxmsg(this);msg.setText("gameover!");msg.setStandardButtons(QMessageBox::Yes|QMessageBox::No);msg.show();if(msg.exec()==QMessageBox::Yes){this->close();}}//按鍵事件switch(d){cased_up:nheady-=speed;break;cased_down:nheady+=speed;break;cased_left:nheadx-=speed;break;cased_right:nheadx+=speed;break;}for(inti=data.size()-1;i>0;i--){data[i]->move(data[i-1]->x(),data[i-1]->y());}data[0]->move(nheadx,nheady);}//按鍵事件處理voidsnake::keyPressEvent(QKeyEvent*f){if(f->key()==Qt::Key_Up){d=d_up;}elseif(f->key()==Qt::Key_Down){d=d_down;}elseif(f->key()==Qt::Key_Left){d=d_left;}elseif(f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論