




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 景区消防设备管理制度
- led大屏日常管理制度
- 春节放假值班管理制度
- 监督所文明单位管理制度
- 景区多人吸氧管理制度
- 大公司自助设备管理制度
- mtm药物治疗管理制度
- 景区设施使用管理制度
- 对外包保安公司管理制度
- 旅游公司保安管理制度
- 主动脉夹层腔内隔绝术操作规范
- 初三自主招生简历范文自荐信
- 电梯维修报价表格
- 矿区专项边坡治理方案设计
- 国产上海7120手表机芯
- 4配电柜安全风险点告知牌
- 《卖炭翁》中考阅读经典赏析试题(共27题)
- 养老服务礼仪与实务全书ppt完整版课件最全电子教案正本书教学教程
- Q∕GDW 11445-2015 国家电网公司管理信息系统安全基线要求
- 材料科学基础 第2章 晶体结构
- 股静脉采血学习教案
评论
0/150
提交评论