电脑技术《贪吃蛇代码》.docx_第1页
电脑技术《贪吃蛇代码》.docx_第2页
电脑技术《贪吃蛇代码》.docx_第3页
电脑技术《贪吃蛇代码》.docx_第4页
电脑技术《贪吃蛇代码》.docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贪吃蛇代码#include mainwindow.h #include ui_mainwindow.h #include #include #include #include MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindow) this-setAttribute(Qt:WA_PaintOutsidePaintEvent); ui-setupUi(this); updateTimer = new QTimer(this); level = 3; newGame(); connect(updateTimer, SIGNAL(timeout(), this, SLOT(snakeAutoRun(); MainWindow:MainWindow() delete ui; void MainWindow:changeEvent(QEvent *e) QMainWindow:changeEvent(e); switch (e-type() case QEvent:LanguageChange: ui-retranslateUi(this); break; default: break; void MainWindow:drawFrame(QPainter* painter) /draw border and inter QRectF borderRect(3*45-20,25,670,850); QRectF interRect(3*45,45,630,810); painter-setPen(Qt:NoPen); painter-setBrush(QBrush(Qt:darkMagenta,Qt:SolidPattern); painter-drawRect(borderRect); painter-setBrush(QBrush(Qt:gray,Qt:SolidPattern); painter-drawRect(interRect); /end draw boder and inter painter-setPen(QPen(Qt:darkGray,3,Qt:SolidLine,Qt:RoundCap,Qt:RoundJoin); painter-setPen(Qt:NoPen); / draw the grid for(int i = 0; i drawLine(i,0,i,900); painter-drawLine(0,i,900,i); / end draw the grid void MainWindow:drawStartViewer(QPainter* painter) / pain start painter-setPen(QPen(Qt:white,50); painter-setFont(QFont(tr(China),60,60); QRectF textRect(3*45+30,45+180,560,280); if(isStart = 6) isStart-; return; if(isStart = 5) painter-drawText(textRect,Qt:AlignCenter,tr(READY!); isStart-; return; painter-setFont(QFont(tr(China),95,95); if(isStart = 4) painter-drawText(textRect,Qt:AlignCenter,tr(3); isStart-; return; if(isStart = 3) painter-drawText(textRect,Qt:AlignCenter,tr(2); isStart-; return; if(isStart = 2) painter-drawText(textRect,Qt:AlignCenter,tr(1); isStart-; return; if(isStart = 1) QString levelString = QString(Level %1).arg(level); painter-setPen(QPen(Qt:yellow,40); painter-drawText(textRect,Qt:AlignCenter,levelString); isStart-; return; if(isStart = 0) updateTimer-stop(); updateTimer-setInterval(interval); updateTimer-start(); isStart-; gameStatus = RUNNING; void MainWindow:drawSnakeAndFood(QPainter* painter) QRectF textRect(3*45+30,45+180,560,280); painter-setPen(QPen(Qt:darkGray,10); painter-setFont(QFont(tr(China),20,30); painter-drawText(textRect,Qt:AlignCenter,tr(); /draw food painter-setBrush(QBrush(Qt:red); painter-setPen(Qt:NoPen); painter-drawEllipse(foodArray1*45,foodArray0*45,45,45); / paint the snake painter-setBrush(QBrush(Qt:green); double d = 20.0/snakeLength; double abc = 40; for(int i = 0;i 0) painter-setBrush(QBrush(Qt:blue); QRectF snakeRect(snakeArrayi1*45+3,snakeArrayi0*45+3,40,40); /painter-drawRoundRect(snakeRect,50,abc); painter-drawEllipse(snakeArrayi1*45+3,snakeArrayi0*45+3,50,abc); abc -= d; / end paint the snake void MainWindow:drawGameOver(QPainter* painter) QRectF textRect(3*45+30,45+180,560,280); painter-setPen(QPen(Qt:yellow,80); painter-setFont(QFont(tr(China),60,60); painter-drawText(textRect, Qt:AlignCenter,tr(Game Over!); void MainWindow:paintEvent(QPaintEvent *) QPainter *painter = new QPainter(this); int side = qMin(width(),height(); painter-setRenderHint(QPainter:Antialiasing,true); painter-setViewport(width()-side)/2,(height()-side)/2,side,side); painter-setWindow(0,0,900,900); drawFrame(painter); switch(gameStatus) case STARTING: drawStartViewer(painter); break; case RUNNING: drawSnakeAndFood(painter); break; case GAMEOVER: drawGameOver(painter); break; case SHOWTOPSCORES: break; void MainWindow:keyPressEvent(QKeyEvent *keyEvent) if(paintingIsOver = 0 & isPause = YES) if(Qt:Key_Space = keyEvent-key() resumeGame(); return; switch(keyEvent-key() case Qt:Key_Up: directionFlag = (directionFlag = DOWN) ? DOWN : UP; break; case Qt:Key_Down: directionFlag = (directionFlag = UP) ? UP : DOWN; break; case Qt:Key_Left: directionFlag = (directionFlag = RIGHT) ? RIGHT : LEFT; break; case Qt:Key_Right: directionFlag = (directionFlag = LEFT) ? LEFT : RIGHT; break; case Qt:Key_Space: pauseGame(); break; case Qt:Key_Return: newGame(); break; paintingIsOver = 0; int MainWindow:getRandNum(void) static int i = 0; srand(int)time(0)+i); i+; return rand(); void MainWindow:getRandXY(int &x,int &y) while(1) int tag = 0; x = int(getRandNum()%20); y = int(getRandNum()%20); if(x 0 & x 2 & y 17) for(int i = 0; i = 0) update(); return; snakeHead0 = snakeArray00+directionArraydirectionFlag0; snakeHead1 = snakeArray01+directionArraydirectionFlag1; if(snakeHead0 = foodArray0 )&( snakeHead1 = foodArray1 ) snakeLength+; getRandXY(foodArray0,foodArray1); score += accelerationScore; score = (int)(score * 1.1); hitTimes += 1; if(snakeHead0 18 | snakeHead0 1 | snakeHead1 16) gameOver(); for( int i = 1; i 0; i-) snakeArrayi0 = snakeArrayi-10; snakeArrayi1 = snakeArrayi-11; snakeArray00 += directionArraydirectionFlag0; snakeArray01 += directionArraydirectionFlag1; paintingIsOver = 1; updateStatus(); update(); void MainWindow:newGame(void) updateTimer-start(1000); for(int i = 0; i 80; i+) for(int j = 0; j action_Pause-setEnabled(true); ui-action_Resume-setEnabled(false); score = 0; hitTimes = 0; gameStatus = STARTING; void MainWindow:gameOver() gameStatus = GAMEOVER; ui-action_Pause-setEnabled(false); ui-action_Resume-setEnabled(false); update(); updateTimer-stop(); void MainWindow:initialize() level = 3; score = 0; hitTimes = 0; void MainWindow:on_action_New_triggered() newGame(); void MainWindow:on_action_Fullscreen_triggered(bool checked) if(checked) this-showFullScreen(); else this-showNormal(); void MainWindow:on_actionLevel_1_triggered() ui-actionLevel_1-setChecked(true); ui-actionLevel_2-setChecked(false); ui-actionLevel_3-setChecked(false); ui-actionLevel_4-setChecked(false); ui-actionLevel_5-setChecked(false); level = 1; newGame(); void MainWindow:on_actionLevel_2_triggered() ui-actionLevel_1-setChecked(false); ui-actionLevel_2-setChecked(true); ui-actionLevel_3-setChecked(false); ui-actionLevel_4-setChecked(false); ui-actionLevel_5-setChecked(false); level = 2; newGame(); void MainWindow:on_actionLevel_3_triggered() ui-actionLevel_3-setChecked(true); ui-actionLevel_1-setChecked(false); ui-actionLevel_2-setChecked(false); ui-actionLevel_4-setChecked(false); ui-actionLevel_5-setChecked(false); level = 3; newGame(); void MainWindow:on_actionLevel_4_triggered() ui-actionLevel_4-setChecked(true); ui-actionLevel_1-setChecked(false); ui-actionLevel_2-setChecked(false); ui-actionLevel_3-setChecked(false); ui-actionLevel_5-setChecked(false); level = 4; newGame(); void MainWindow:on_actionLevel_5_triggered() ui-actionLevel_5-setChecked(true); ui-actionLevel_1-setChecked(false); ui-actionLevel_2-setChecked(false); ui-actionLevel_3-setChecked(false); ui-actionLevel_4-setChecked(false); level = 5; newGame(); void MainWindow:pauseGame() ui-action_Pause-setEnabled(false); ui-action_Resume-setEnabled(true); updateTimer-stop(); isPause = YES; void MainWindow:resumeGame() ui-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论