数据结构课程设计报告-老鼠走迷宫_第1页
数据结构课程设计报告-老鼠走迷宫_第2页
数据结构课程设计报告-老鼠走迷宫_第3页
数据结构课程设计报告-老鼠走迷宫_第4页
数据结构课程设计报告-老鼠走迷宫_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

PAGE32课程设计说明书课程名称:数据结构与算法专业:软件工程班级:15-2姓名:xx学号:2xxxxxx2指导教师:xx完成日期:2017年1月3日任务书题目:老鼠走迷宫设计内容及要求:课程设计任务内容程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。2.课程设计要求1)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2)迷宫的墙足够结实,老鼠不能穿墙而过;3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4)添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5)找出走出迷宫的所有路径,以及最短路径;6)利用序列化功能实现迷宫地图文件的存盘和读出等功能。开发环境:QTCreator、QT5.6目录TOC\o"1-3"\h\u1.引言 22.课题分析 33.具体设计过程 43.1设计思路 43.2程序设计流程图 53.3.函数实现说明 64.程序运行结果 75.软件使用说明 116.结论 11参考文献 131.引言课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。通常,课程设计中的问题比平时的习题复杂的多,也更接近实际。课程设计着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。平时的习题较偏重于如何编写功能单一的“小”算法,局限于一个或两个知识点,而课程设计题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。此外,还有很重要的一点是:计算机是比任何教师更严厉的检查者。为达到上述目的,使学生更好地掌握程序设计的基本方法和C++语言的应用,本课程安排了课程设计环节,提供了各类题目供学生选择。每个设计题采取了统一的格式,由问题描述、基本要求、测试数据、实现提示和选做内容等五个部分组成。问题描述旨在为学生建立问题提出的背景,指明问题“是什么”。基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求。测试数据部分旨在为检查学生上机作业提供方便。在实现提示部分,对实现中的难点及其解法思路等问题作了简要提示,提示的实现方法未必是最好的,学生不应拘泥与此,而应努力设计和开发更好的方法和结构。选做部分向那些尚有余力的读者提出了更高的要求,同时也能开拓其它读者的思路,在完成基本要求时就力求避免就事论事的不良思想方法,尽可能寻求具有普遍意义的解法,使得程序结构合理,容易修改、扩充和重用。2.课题分析编写一个《老鼠走迷宫》的C++程序,包括以下功能:初始状态:迷宫处为空白,输入长宽设定迷宫大小,时间剩余为300s。具体要求如下:1.点击生成迷宫,窗口左上方生成一个指定大小的迷宫,老鼠位于迷宫中央,粮仓位于迷宫右下角,开始计时。2.可以通过键盘上的方向键控制老鼠移动。3.点击显示路径按钮时,显示一条绿色的通道通向粮仓。4.点击最短路径按钮时,显示一条绿色的通道(最短)通向粮仓。5.点击拆墙/补墙时,老鼠可在迷宫内自由移动,老鼠所走过的墙将变成路/路将变成墙。6.点击取消作弊,恢复原始状态。即老鼠只能通过路。7.当剩余时间为0时,弹出对话框,游戏失败,游戏结束。8.当老鼠走到粮仓处时,弹出对话框,找到出口,游戏结束。9.点击储存地图时,将当前地图以矩阵形势存于文件中;点击读取地图时,将文件中的数据赋予迷宫矩阵,创建迷宫。3.具体设计过程3.1设计思路定义迷宫节点,包含x,y(坐标)与state(0为墙,1为通路),使用迷宫节点矩阵表示迷宫,使用回溯法创建迷宫节点矩阵。利用深度优先遍历寻找出老鼠到粮仓的所有路径,利用广度优先遍历寻找老鼠到粮仓的最短路径,将路径中的节点的state置为2,在普通模式下,老鼠仅可通过state为1的节点,当作弊模式开启时,老鼠可通过任意state的节点并且通过的节点的state值会相应的改变。打印迷宫时,state为0的节点使用黑色矩形填充,state为1的节点不填充,state为2的使用绿色矩形填充。3.2程序设计流程图_maze//迷宫节点box//路径节点box1//最短路径节点inti;intj;intstate;inti;intj;intdirection;inti;intj;intpre;intnum;classmazepublic:voidpaintEvent(QPaintEvent*);voidkeyPressEvent(QKeyEvent*);boolisOdd();//判断lineedit输入是否为奇数voidcreatMaze();//创建迷宫voidfindWay();//寻求路径(深度遍历)voidfindShortWay();//寻求最短路径(广度遍历)private:QTime_time;_maze**matrix;//定义一个迷宫节点数组stack<_maze>*MazeStack;//定义一个栈用于存放迷宫节点vector<_maze>*FinalPath;//定义一个向量用于存放迷宫路径stack<box>*BoxStack;//定义一个栈用于存放寻路节点queue<box1>*Box1Queue;//定义一个队列用于存放寻最短路节点stack<box1>*Box1Stack;//定义一个栈用于存放寻最短路节点intM;//迷宫矩阵的行intN;//迷宫矩阵的列boolfirst;boolremove_wall;//判断是否进行拆墙boolrepair_wall;//判断是否补墙//老鼠的坐标intX;intY;privateslots:voidon_way_clicked();voidon_shortway_clicked();voidon_removewall_clicked();voidon_cancelremove_clicked();voidon_makemaze_clicked();voidtimerUpdate();voidon_repairwall_clicked();voidon_savemaze_clicked();voidon_readmaze_clicked();3.3.函数实现说明(1)voidkeyPressEvent(QKeyEvent*e)

功能:实现使用键盘完成对老鼠的控制。(2)voidpaintEvent(QPaintEvent*)功能:打印迷宫、路径、老鼠和粮仓。(3)voidcreatMaze();功能:生成迷宫使用算法:回溯法、栈(4)voidfindWay();功能:寻找从老鼠到粮仓的路径。使用算法:深度优先遍历(5)voidfindShortWay();功能:寻找从老鼠到粮仓的最短路径。使用算法:广度优先遍历、队列(6)voidtimerUpdate();功能:更新剩余时间,当剩余时间为0时游戏结束。4.程序运行结果1.初始状态2.点击生成迷宫,生成一个默认大小为25*25的迷宫3.点击寻找路径4.点击最短路径5.点击作弊拆墙(补墙)6.存储迷宫7.读取迷宫7.时间耗尽时5.软件使用说明1.输入的长宽只能是奇数2.点击生成迷宫即可开始新的游戏3.该程序有一个局限性:只能存储一个迷宫,相应的,读取迷宫也只能读取上次存储的而不能选择。6.结论课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。参考文献C++程序设计(第三版) C++PrimerPlus(第6版) QT从入门到精通 数据结构与算法附录(源代码)maze.h#ifndefMAZE_H#defineMAZE_H#include<QLCDNumber>#include<QTimer>#include<QTime>#include<QWidget>#include<iostream>#include<stack>#include<vector>#include<queue>#include<QTime>#include<QLineEdit>#include<QPushButton>#include<QPainter>#include<QLabel>#include<QMessageBox>#include<QDebug>#include<QKeyEvent>#include<QPixmap>usingnamespacestd;struct_maze//定义迷宫节点,x、y代表坐标,state代表是否为墙{inti;intj;intstate;//0代表为墙,1代表通路};structbox//定义寻求路径节点{inti;intj;intdirection;//方向,0上1右2下3左};structbox1//定义寻求最短路径节点{inti;intj;intpre;intnum;};namespaceUi{classmaze;}classmaze:publicQWidget{Q_OBJECTpublic:explicitmaze(QWidget*parent=0);~maze();voidpaintEvent(QPaintEvent*);voidkeyPressEvent(QKeyEvent*);boolisOdd();//判断lineedit输入是否为奇数voidcreatMaze();//创建迷宫voidfindWay();//寻求路径(深度遍历)voidfindShortWay();//寻求最短路径(广度遍历)privateslots:voidon_way_clicked();voidon_shortway_clicked();voidon_removewall_clicked();voidon_cancelremove_clicked();voidon_makemaze_clicked();voidtimerUpdate();voidon_repairwall_clicked();private:Ui::maze*ui;QTime_time;_maze**matrix;//定义一个迷宫节点数组stack<_maze>*MazeStack;//定义一个栈用于存放迷宫节点vector<_maze>*FinalPath;//定义一个向量用于存放迷宫路径stack<box>*BoxStack;//定义一个栈用于存放寻路节点queue<box1>*Box1Queue;//定义一个队列用于存放寻最短路节点stack<box1>*Box1Stack;//定义一个栈用于存放寻最短路节点intM;//迷宫矩阵的行intN;//迷宫矩阵的列boolfirst;boolremove_wall;//判断是否进行拆墙boolrepair_wall;//判断是否补墙//老鼠的坐标intX;intY;};#endif//MAZE_Hmaze.cpp#include"maze.h"#include"ui_maze.h"maze::maze(QWidget*parent):QWidget(parent),ui(newUi::maze){ui->setupUi(this);QTimer*time0=newQTimer(this);connect(time0,SIGNAL(timeout()),this,SLOT(timerUpdate()));time0->start(1000);first=true;M=11;N=11;matrix=new_maze*[M];for(inti=0;i<M;i++){matrix[i]=new_maze[N];}for(inti=0;i<M;i++)for(intj=0;j<N;j++){matrix[i][j].state=0;//初始化迷宫矩阵,将所有节点设置为墙matrix[i][j].i=i;matrix[i][j].j=j;}//随机生成种子数QTimetime=QTime::currentTime();qsrand(time.msec()+time.second()*1000);MazeStack=newstack<_maze>;FinalPath=newvector<_maze>;BoxStack=newstack<box>;Box1Stack=newstack<box1>;Box1Queue=newqueue<box1>;X=1;Y=1;remove_wall=false;repair_wall=false;}maze::~maze(){deleteui;}voidmaze::keyPressEvent(QKeyEvent*e){if(remove_wall)//如果拆墙{if(e->key()==87||e->key()==16777235)//上{if(X>1){matrix[X][Y].state=1;X=X-1;}}elseif(e->key()==83||e->key()==16777237)//下{if(X<M-2){matrix[X][Y].state=1;X=X+1;}}elseif(e->key()==65||e->key()==16777234)//左{if(Y>1){matrix[X][Y].state=1;Y=Y-1;}}elseif(e->key()==68||e->key()==16777236)//右{if(Y<N-2){matrix[X][Y].state=1;Y=Y+1;}}//当老鼠到达粮仓时,重新构建迷宫地图,使得存放路劲的容器置为空if(X==M-2&&Y==N-2){QMessageBox::information(this,"Reminder","Findtheexit!",QMessageBox::Yes);for(inti=0;i<M;i++)for(intj=0;j<N;j++)matrix[i][j].state=0;this->creatMaze();remove_wall=false;repair_wall=false;ui->cancelremove->setEnabled(false);ui->removewall->setEnabled(true);ui->repairwall->setEnabled(true);ui->way->setEnabled(true);ui->shortway->setEnabled(true);ui->makemaze->setEnabled(true);FinalPath->clear();X=M/2;Y=N/2;if(X%2==0)X+=1;if(Y%2==0)Y+=1;_time.restart();}}elseif(repair_wall)//如果拆墙{if(e->key()==87||e->key()==16777235)//上{if(X>1){matrix[X][Y].state=0;X=X-1;}}elseif(e->key()==83||e->key()==16777237)//下{if(X<M-2){matrix[X][Y].state=0;X=X+1;}}elseif(e->key()==65||e->key()==16777234)//左{if(Y>1){matrix[X][Y].state=0;Y=Y-1;}}elseif(e->key()==68||e->key()==16777236)//右{if(Y<N-2){matrix[X][Y].state=0;Y=Y+1;}}//当老鼠到达粮仓时,重新构建迷宫地图,使得存放路劲的容器置为空if(X==M-2&&Y==N-2){QMessageBox::information(this,"Reminder","Findtheexit!",QMessageBox::Yes);for(inti=0;i<M;i++)for(intj=0;j<N;j++)matrix[i][j].state=0;this->creatMaze();remove_wall=false;repair_wall=false;ui->cancelremove->setEnabled(false);ui->repairwall->setEnabled(true);ui->removewall->setEnabled(true);ui->way->setEnabled(true);ui->shortway->setEnabled(true);ui->makemaze->setEnabled(true);FinalPath->clear();X=M/2;Y=N/2;if(X%2==0)X+=1;if(Y%2==0)Y+=1;_time.restart();}}else{intk;if(e->key()==87||e->key()==16777235)//上{k=X-1;if(k>0&&matrix[k][Y].state!=0)X=k;}elseif(e->key()==83||e->key()==16777237)//下{k=X+1;if(k<M-1&&matrix[k][Y].state!=0)X=k;}elseif(e->key()==65||e->key()==16777234)//左{k=Y-1;if(k>0&&matrix[X][k].state!=0)Y=k;}elseif(e->key()==68||e->key()==16777236)//右{k=Y+1;if(k<N-1&&matrix[X][k].state!=0)Y=k;}if(X==M-2&&Y==N-2){QMessageBox::information(this,"Reminder","Findtheexit!",QMessageBox::Yes);for(inti=0;i<M;i++)for(intj=0;j<N;j++)matrix[i][j].state=0;this->creatMaze();FinalPath->clear();X=M/2;Y=N/2;if(X%2==0)X+=1;if(Y%2==0)Y+=1;_time.restart();}}update();}voidmaze::paintEvent(QPaintEvent*)//画出迷宫{QPainterpainter(this);painter.setPen(Qt::black);for(inti=FinalPath->size()-1;i>=0;i--){matrix[FinalPath->at(i).i][FinalPath->at(i).j].state=2;if(FinalPath->at(i).i==X&&FinalPath->at(i).j==Y)//当老鼠经过寻找迷宫路径时,使得state=1{matrix[FinalPath->at(i).i][FinalPath->at(i).j].state=1;FinalPath->pop_back();}}if(!first){for(inti=0;i<M;i++)for(intj=0;j<N;j++){if(i==X&&j==Y)//画老鼠{painter.drawPixmap(j*20,i*20,20,20,QPixmap(":/img/img/mouse").scaled(20,20));}elseif(i==M-2&&j==N-2)//画粮仓{painter.drawPixmap(j*20,i*20,20,20,QPixmap(":/img/img/door").scaled(20,20));}else{switch(matrix[i][j].state){case0://画墙壁painter.setBrush(QBrush(Qt::black,Qt::SolidPattern));painter.drawRect(QRect(j*20,i*20,20,20));break;case1://画通路//painter.setBrush(QBrush(Qt::white,Qt::SolidPattern));//painter.drawRect(QRect(j*20,i*20,20,20));break;case2://画迷宫寻找路径painter.setBrush(QBrush(Qt::green,Qt::SolidPattern));painter.drawRect(QRect(j*20,i*20,20,20));break;}}}}}boolmaze::isOdd(){if(ui->xline->text().toInt()%2==0||ui->yline->text().toInt()%2==0)returnfalse;returntrue;}voidmaze::timerUpdate()//更新时间,时间为0时游戏结束{inttime1=300;if((time1-((_time.elapsed())/1000))<0){QMessageBox::information(this,"TimeOut!","Gameover!",QMessageBox::Yes);for(inti=0;i<M;i++)for(intj=0;j<N;j++)matrix[i][j].state=0;this->creatMaze();FinalPath->clear();X=M/2;Y=N/2;if(X%2==0)X+=1;if(Y%2==0)Y+=1;_time.restart();}QStringrunTime=QString::number(time1-((_time.elapsed())/1000));ui->timer->setText(runTime);}//创建迷宫节点矩阵(回溯法)voidmaze::creatMaze(){//先设置初始点为(3,3)inti=3,j=3;//设置随机数intrandNum=0;//设置迷宫节点矩阵初始点位置为通路matrix[i][j].state=1;//定义一个临时节点_mazetemp;temp.i=i;temp.j=j;temp.state=1;//false表示访问的方向,boolUp=false;boolDown=false;boolRight=false;boolLeft=false;//进入循环,不断生成迷宫矩阵,直至栈为空while(1){temp.i=i;temp.j=j;randNum=qrand()%4;switch(randNum){case0://上if(!Up&&i>2&&matrix[i-2][j].state==0){MazeStack->push(temp);matrix[i-2][j].state=1;matrix[i-1][j].state=1;i=i-2;Up=false;Down=false;Right=false;Left=false;}elseUp=true;break;case1://下if(!Down&&i<M-3&&matrix[i+2][j].state==0){MazeStack->push(temp);matrix[i+2][j].state=1;matrix[i+1][j].state=1;i=i+2;Up=false;Down=false;Right=false;Left=false;}elseDown=true;break;case2://左if(!Left&&j>2&&matrix[i][j-2].state==0){MazeStack->push(temp);matrix[i][j-2].state=1;matrix[i][j-1].state=1;j=j-2;Up=false;Down=false;Right=false;Left=false;}elseLeft=true;break;case3://右if(!Right&&j<N-3&&matrix[i][j+2].state==0){MazeStack->push(temp);matrix[i][j+2].state=1;matrix[i][j+1].state=1;j=j+2;Up=false;Down=false;Right=false;Left=false;}elseRight=true;break;}if(Up&&Down&&Right&&Left)//如果当前访问节点四个方向都没有可拆的节点,回溯{if(!MazeStack->empty()){i=MazeStack->top().i;j=MazeStack->top().j;MazeStack->pop();Up=false;Down=false;Right=false;Left=false;}else//如果栈为空的话就返回,此时迷宫矩阵已经创建完毕return;}}}//用深度优先遍历的方法寻找路径,将路径数据保存在FinalPath容器中voidmaze::findWay(){FinalPath->clear();inti,j,di,find;boxbox;box.i=X;box.j=Y;box.direction=-1;BoxStack->push(box);matrix[X][Y].state=-1;while(1){i=BoxStack->top().i;j=BoxStack->top().j;di=BoxStack->top().direction;if(i==M-2&&j==N-2)//如果当前栈顶为粮仓节点,将路径存放入FinalPath{while(!BoxStack->empty()){_mazetemp;temp.i=BoxStack->top().i;temp.j=BoxStack->top().j;temp.state=1;FinalPath->push_back(temp);BoxStack->pop();}return;}find=0;while(find==0&&di<4){di++;switch(di){case0:i=BoxStack->top().i-1;j=BoxStack->top().j;break;//向上寻路case1:i=BoxStack->top().i;j=BoxStack->top().j+1;break;//向右寻路case2:i=BoxStack->top().i+1;j=BoxStack->top().j;break;//向下寻路case3:i=BoxStack->top().i;j=BoxStack->top().j-1;break;//向左寻路}if(matrix[i][j].state==1){find=1;}}if(find==1){matrix[i][j].state=-1;BoxStack->top().direction=di;box.i=i;box.j=j;box.direction=-1;BoxStack->push(box);}else{BoxStack->pop();}}}//用广度优先遍历的方法寻找迷宫路径,寻找的路径是最短路径voidmaze::findShortWay(){FinalPath->clear();while(!Box1Queue->empty())Box1Queue->pop();inti,j,find=0,di,k=0,count=0;box1box1;_mazetemp;box1.i=X;box1.j=Y;box1.pre=-1;box1.num=k;Box1Queue->push(box1);matrix[X][Y].state=-1;while(!Box1Queue->empty()&&!find){i=Box1Queue->front().i;j=Box1Queue->front().j;box1.i=i;box1.j=j;box1.num=Box1Queue->front().num;box1.pre=Box1Queue->front().pre;Box1Stack->push(box1);if(i==M-2&&j==N-2){find=1;while(!Box1Stack->empty()){temp.i=Box1Stack->top().i;temp.j=Box1Stack->top().j;temp.state=1;FinalPath->push_back(temp);count=Box1Stack->top().pre;//记录当前的路径节点的上一个坐标的下表while(!Box1Stack->empty()&&count!=Box1Stack->top().num){Box1Stack->pop();}}}for(di=0;di<4;di++){switch(di)//0上1右2下3左{case0:i=Box1Queue->front().i-1;j=Box1Queue->front().j;break;case1:i=Box1Queue->front().i;j=Box1Queue->front().j+1;break;case2:i=Box1Queue->front().i+1;j=Box1Queue->front().j;break;case3:i=Box1Queue->front().i;j=Box1Queue->front().j-1;break;}if(matrix[i][j].state==1){k++;box1.i=i;box1.j=j;box1.num=k;box1.pre=Box1Queue->front().num;Box1Queue->push(box1);matrix[i][j].state=-1;}}Box1Queue->pop();}}voidmaze::on_way_clicked(){//使得迷宫矩阵的state为2的值变为1for(inti=0;i<M;i++)for(intj=0;j<N;j++){if(matrix[i][j].state==2){matrix[i][j].state=1;}}this->findWay();this->setFocus(Qt::MouseFocusReason);update();}voidmaze::on_shortway_clicked(){//使得迷宫矩阵的state为2的值变为1for(inti=0;i<M;i++)for(intj=0;j<N;j++){if(matrix[i][j].state==2){matrix[i][j].state=1;}}this->findShortWay();this->setFocus(Qt::MouseFocusReason);update();}voidmaze::on_removewall_clicked(){FinalPath->clear();//使得迷宫矩阵的state为2的值变为1for(inti=0;i<M;i++)for(intj=0;j<N;j++){if(matrix[i][j].state==2){matrix[i][j].state=1;}}update();remove_wall=true;ui->way->setEnabled(false);this->setFocus(Qt::MouseFocusReason);ui->cancelremove->setEnabled(true);ui->removewall->setEnabled(false);ui->makemaze->setEnabled(false);ui->shortway->setEnabled(false);ui->repairwall->setEnabled(true);QMessageBox::information(this,"Reminder","Youcanremovewallnow!",QMessageBox::Yes);}voidmaze::on_repairwall_clicked(){FinalPath->clear();//使得迷宫矩阵的state为2的值变为1for(inti=0;i<M;i++)for(intj=0;j<N;j++){if(matrix[i][j].state==2){matrix[i][j].state=1;}}update();repair_wall=true;ui->way->setEnabled(false);this->setFocus(Qt::MouseFocusReason);ui->cancelremove->setEnabled(true);ui->removewall->setEnabled(true);ui->repairwall->setEnabled(false);ui->makemaze->setEnabled(false);ui->shortway->setEnabled(false);QMessageBox::information(this,"Reminder","Youcanrepairwallnow!",QMessageBox::Yes);}voidmaze::on_cancelremove_clicked(){remove_wall=false;repair_wall=false;this->setFocus(Qt::MouseFocusReason);ui->makemaze->setEnabled(true);ui->cancelremove->setEnabled(false);ui->shortway->setEnabled(true);ui->way->setEnabled(true);ui->repairwall->setEnabled(true);ui->removewall->setEnabled(true);}voidmaze::on_makemaze_clicked(){if(isOdd()){if(ui->xline->text().toInt()>5&&ui->yline->text().toInt()>5){_time.start();//删除原先matrix数组for(inti=0;i<M;i++)delete[]matrix[i];delete[]matrix;M=ui->xline->text().toInt();N=ui->yline->text().toInt();ui->label_2->setGeometry(170,(M+1)*20,110,30);ui->label_3->setGeometry(10,(M+1)*20,110,30);ui->xline->setGeometry(50,(M+1)*20,110,30);ui->yline->setGeometry(210,(M+1)*20,110,30);ui->makemaze->setGeometry((N+1)*20,370,100,30);ui->shortway->setGeometry((N+1)*20,170,100,30);ui->removewall->setGeometry((N+1)*20,220,100,30);ui->repairwall->setGeometry((N+1)*20,270,100,30);ui->cancelremove->setGeometry((N+1)*20,320,100,30);ui->way->setGeometry((N+1)*20,120,100,30);ui->label->setGeometry(340,(M+1)*20,130,40);ui->label_4->setGeometry((N+1)*20+2,20,75,30);ui->timer->setGeometry((N+1)*20,50,100,40);FinalPath->clear();ui->way->setEnabled(true);ui->removewall->setEnabled(true);ui->shortway->setEnabled(true);ui->repairwall->setEnabled(true);remove_wall=false;this->resize((N+7)*20,(M+3)*20);this->setFocus(Qt::MouseFocusReason);//初始老鼠的位置,在迷宫的中央X=M/2;Y=N/2;if(X%2==0)X+=1;if(Y%2==0)Y+=1;//重新创建新matrix数组,因为M和N发生了改变matrix=new_maze*[M];for(inti=0;i<M;i++){matrix[i]=new_maze[N];}for(inti=0;i<M;i++)for(intj=0;j<N;j++){matrix[i][j].state=0;//初始化迷宫矩阵,将所有节点设置为墙matrix[i][j].i=i;matrix[i][j].j=j;}this->creatMaze();first=false;update();}else{QMessageBox::information(this,"Warning","Theinputcannotbelessthan5!",QMessageBox::Yes);ui->xline->clear();ui->yline->clear();}}else{QMessageBox::information(this,"Warning","Theinputcanonlybeodd!",QMessageBox::Yes);ui->xline->clear();ui->yline->clear();}}main.cpp#include"maze.h"#include<QApplication>intmain(intargc,char*argv[]){QApplicationa(argc,argv);mazew;w.show();a.setWindowIcon(QIcon("s.ico"));returna.exec();}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机

温馨提示

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

评论

0/150

提交评论