




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
贪吃蛇游戏开发一、需求分析1、该贪吃蛇设计主要具有吃食、暂停、开始以及重新开始游戏。2、主要目标:本游戏实现贪吃蛇在制定空间去吃随机出现的方块。游戏可以暂停,如不满意这一次游戏的成果还能重新开始游戏。二、项目设计1、流程设计程序流程图2、游戏具体设计:(1)蛇移动的实现蛇的移动方向主要受头结点控制,所以每次画蛇时只要把前一结点的值赋给后一节点即可。当蛇头的移动方向向右时,y值不变x的值不断增加。当蛇头的移动方向向左时,y值不变x的值不断减少。当蛇头的移动方向向下时,y值增加x的值不变。当蛇头的移动方向向上时,y值减小x的值不变。(2)蛇死亡的判断当蛇头的值与蛇身或与墙的值相等时,蛇即算死亡.(3)蛇到达边框时从另一端出现和传送的实现当蛇头的x或y值达到边框的最大或最小位置时相应的给x或y赋以边框的最小或最大值以实现当蛇到达边框时能从另一端出来,同理当蛇头的x,y值等于传送点位置的值时将蛇头x,y的值赋以被传送到位置的值,这样将实现蛇的传送功能。三、项目实现①蛇身颜色、最大长度及速度intspeed;//设置蛇的速度intmaxLen;//设置蛇的最大长度②随机生成食物产生随机种子: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);//设置食物自动填充背景颜色food->setFrameShape(QFrame::Box);//设置形状food->setFrameShadow(QFrame::Sunken);food->setPalette(QPalette(QColor(qrand()%255,qrand()%110,qrand()%255)));//改变调色板的颜色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);//设置时钟周期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⑤游戏结束条件if(data.size()>=10){QMessageBoxmsg(this);msg.setText("gameover!");msg.setStandardButtons(QMessageBox::Yes|QMessageBox::No);msg.show();if(msg.exec()==QMessageBox::Yes){this->close();}}四、总结经过10天的培训,让我进一步熟悉了Linux系统下命令的使用、文件的编写与调试,更熟悉了以前所学的C++语言,让我对我所学习的计算机更加了解喜欢,也更加希望自己能学好计算机方面的设计,去设计更多有意思的游戏。也非常感谢培训老师这些天对我们的悉心教导,让我们学到了很多东西。五、附录1、主函数代码#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;//设置蛇的速度intmaxLen;//设置蛇的最大长度Directiond;//方向QTimer*timer;//定时器计时public:snake(QWidget*parent=0);~snake();//虚构函数QLabel*getFood();publicslots:voidmove();protected:voidchangeEvent(QEvent*e);voidkeyPressEvent(QKeyEvent*);//按键事件处理voidTimerEvent(QTimerEvent*);//定时器事件处理private:Ui::snake*ui;};#endif//SNAKE_H3、功能实现代码#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());//产生随机种子this->resize(400,400);//窗口大小d=d_right;//默认方向data.push_back(getFood());//将吃到的食物添加在蛇身之后timer=newQTimer();//初始化时钟timer->setInterval(400);//设置时钟周期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);//设置食物自动填充背景颜色food->setFrameShape(QFrame::Box);//设置形状food->setFrameShadow(QFrame::Sunken);food->setPalette(QPalette(QColor(qrand()%255,qrand()%110,qrand()%255)));//改变调色板的颜色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();}//设置结束条件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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 6 What's Your Number?(教学设计)-2024-2025学年教科版(EEC)英语三年级上册
- 核辐射测量在核设施辐射防护设备研发中的应用考核试卷
- 工业污染土壤修复考核试卷
- 机床附件的工业设计理念与创新实践考核试卷
- 数学逻辑训练教具考核试卷
- 毛巾产品的市场准入与国际贸易实务考核试卷
- 水产品加工技术创新与产业转型案例考核试卷
- 农业仓储设施与设备制造考核试卷
- 学校文化建设与教育环境计划
- 学习环境优化与改进计划
- 《农村合作金融机构非信贷资产风险分类指引》(银监发[2007]29号)
- 电缆敷设施工方案及安全措施范文
- 卡通手绘可爱小兔子PPT模板
- 军事地形学地形图基本知识
- 小儿体格检查(课堂PPT)
- ppt模板:信保专用中国出口信用保险公司课件
- (高清版)建筑塑料复合模板工程技术规程JGJ_T 352-2014
- 人教版八年级数学下册全册教案(完整版)教学设计
- 电机零部件中英文对照表
- 设备安装工程监理规划
- 注册安全工程师(延续注册)履职情况说明
评论
0/150
提交评论