├── solve_maze ├── tubiao.rc ├── img │ ├── BG.jpg │ ├── df.png │ ├── road.jpg │ ├── target.jpg │ ├── wall.jpg │ ├── mainwindow.jpg │ ├── control_left.jpg │ └── control_right.jpg ├── tubiao.ico ├── point.cpp ├── point.h ├── img.qrc ├── main.cpp ├── mainwindow.h ├── mainwindow.cpp ├── mainwindow.ui ├── solve_maze.pro ├── play_maze.h ├── play_maze.ui ├── solve_maze.pro.user └── play_maze.cpp ├── solve_maze.exe └── readme.txt /solve_maze/tubiao.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "tubiao.ico" 2 | -------------------------------------------------------------------------------- /solve_maze.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze.exe -------------------------------------------------------------------------------- /solve_maze/img/BG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/BG.jpg -------------------------------------------------------------------------------- /solve_maze/img/df.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/df.png -------------------------------------------------------------------------------- /solve_maze/tubiao.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/tubiao.ico -------------------------------------------------------------------------------- /solve_maze/img/road.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/road.jpg -------------------------------------------------------------------------------- /solve_maze/img/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/target.jpg -------------------------------------------------------------------------------- /solve_maze/img/wall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/wall.jpg -------------------------------------------------------------------------------- /solve_maze/img/mainwindow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/mainwindow.jpg -------------------------------------------------------------------------------- /solve_maze/img/control_left.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/control_left.jpg -------------------------------------------------------------------------------- /solve_maze/img/control_right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/li-chengkun/solve-maze/HEAD/solve_maze/img/control_right.jpg -------------------------------------------------------------------------------- /solve_maze/point.cpp: -------------------------------------------------------------------------------- 1 | #include "point.h" 2 | 3 | point::point(){ 4 | 5 | } 6 | 7 | point::point(int i,int j,int state){ 8 | this->i=i; 9 | this->j=j; 10 | this->state=state; 11 | 12 | } 13 | 14 | point::~point(){ 15 | 16 | } 17 | -------------------------------------------------------------------------------- /solve_maze/point.h: -------------------------------------------------------------------------------- 1 | #ifndef POINT_H 2 | #define POINT_H 3 | 4 | //迷宫的每个点 5 | class point{ 6 | public: 7 | int i; 8 | int j;//行列坐标 9 | int state;//对应不同状态:不可行走,可行走,人在上面,终点或者以后可以扩充的状态 10 | //不可行走-0;可行走-1;人-2;终点-3 11 | point(); 12 | ~point(); 13 | point(int i,int j,int state); 14 | }; 15 | 16 | #endif // POINT_H 17 | -------------------------------------------------------------------------------- /solve_maze/img.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | img/control_left.jpg 4 | img/control_right.jpg 5 | img/df.png 6 | img/mainwindow.jpg 7 | img/road.jpg 8 | img/target.jpg 9 | img/wall.jpg 10 | img/BG.jpg 11 | 12 | 13 | -------------------------------------------------------------------------------- /solve_maze/main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include 3 | #include 4 | #include 5 | 6 | int main(int argc, char *argv[]) 7 | { 8 | QApplication a(argc, argv); 9 | 10 | QString atrPATH=QApplication::applicationDirPath(); 11 | atrPATH+="/img/df.png"; 12 | a.setWindowIcon(QIcon(atrPATH)); 13 | 14 | MainWindow w; 15 | w.show(); 16 | 17 | return a.exec(); 18 | } 19 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | 本次项目使用C++语言,运行环境为Windows 10,开发环境为QT5.11.2,QT Creator 4.7.1。 2 | 3 | .exe文件在装有Qt环境的电脑上可以打开,不然会提示缺少dll。 4 | 5 | 6 | 1. 生成迷宫 7 | 8 | 点击生成迷宫即可以根据行列值得到不同大小的迷宫,行列值初始值为10,10。最大为200,最小为8,可以根据喜好设定。 9 | 10 | 2. 控制走位 11 | 12 | 可以利用W,S,A,D使控制点上下左右移动,利用I,K,J,L使目标点上下左右移动。 13 | 14 | 3. 搜索路径 15 | 16 | 点击搜索路径区的任意一个按钮,即可找到从控制点到目标点的路径,并在迷宫中显示出来,并显示消耗时间。 17 | 18 | 4. 自动寻路 19 | 20 | 点击可行走区域,控制点就会按照最短路径以一定频率到达点击区域。减少了人手控制的繁琐。在自动寻路过程中可以随时点击其它空白区域,改变其路径。在自动寻路过程中,生成迷宫和搜索路径无效。 21 | -------------------------------------------------------------------------------- /solve_maze/mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include "play_maze.h" 6 | #include "qpainter.h" 7 | 8 | namespace Ui { 9 | class MainWindow; 10 | } 11 | 12 | class MainWindow : public QMainWindow 13 | { 14 | Q_OBJECT 15 | 16 | public: 17 | explicit MainWindow(QWidget *parent = nullptr); 18 | ~MainWindow(); 19 | 20 | private slots: 21 | void on_pushButton_clicked(); 22 | 23 | private: 24 | Ui::MainWindow *ui; 25 | play_maze mymaze; 26 | 27 | QPixmap mymainwindow; 28 | void paintEvent(QPaintEvent *); 29 | 30 | }; 31 | 32 | #endif // MAINWINDOW_H 33 | -------------------------------------------------------------------------------- /solve_maze/mainwindow.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include "ui_mainwindow.h" 3 | 4 | MainWindow::MainWindow(QWidget *parent) : 5 | QMainWindow(parent), 6 | ui(new Ui::MainWindow) 7 | { 8 | ui->setupUi(this); 9 | setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint); // 禁止最大化按钮 10 | setFixedSize(this->width(),this->height()); // 禁止拖动窗口大小 11 | // QString PATH=QApplication::applicationDirPath(); 12 | // mymainwindow.load(PATH+"/img/mainwindow.jpg"); 13 | //mymainwindow.load("../solve_maze/img/mainwindow.jpg"); 14 | mymainwindow.load(":img/img/mainwindow.jpg"); 15 | } 16 | 17 | MainWindow::~MainWindow() 18 | { 19 | delete ui; 20 | } 21 | 22 | void MainWindow::on_pushButton_clicked() 23 | { 24 | 25 | this->hide(); 26 | //mymaze.resize(800,700); 27 | mymaze.show(); 28 | } 29 | 30 | void MainWindow::paintEvent(QPaintEvent *){ 31 | 32 | QPainter painter(this); 33 | painter.drawPixmap(0,0,500,325,mymainwindow); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /solve_maze/mainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 500 10 | 325 11 | 12 | 13 | 14 | 主界面 15 | 16 | 17 | 18 | 19 | 20 | 350 21 | 180 22 | 91 23 | 41 24 | 25 | 26 | 27 | 28 | 楷体 29 | 11 30 | 75 31 | true 32 | 33 | 34 | 35 | 进入游戏 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /solve_maze/solve_maze.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2018-11-24T15:43:04 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui 8 | 9 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 10 | 11 | TARGET = solve_maze 12 | TEMPLATE = app 13 | 14 | RC_FILE += tubiao.rc 15 | 16 | # The following define makes your compiler emit warnings if you use 17 | # any feature of Qt which has been marked as deprecated (the exact warnings 18 | # depend on your compiler). Please consult the documentation of the 19 | # deprecated API in order to know how to port your code away from it. 20 | DEFINES += QT_DEPRECATED_WARNINGS 21 | 22 | # You can also make your code fail to compile if you use deprecated APIs. 23 | # In order to do so, uncomment the following line. 24 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 25 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 26 | 27 | CONFIG += c++11 28 | 29 | SOURCES += \ 30 | main.cpp \ 31 | mainwindow.cpp \ 32 | play_maze.cpp \ 33 | point.cpp 34 | 35 | HEADERS += \ 36 | mainwindow.h \ 37 | point.h \ 38 | play_maze.h 39 | 40 | FORMS += \ 41 | mainwindow.ui \ 42 | play_maze.ui 43 | 44 | # Default rules for deployment. 45 | qnx: target.path = /tmp/$${TARGET}/bin 46 | else: unix:!android: target.path = /opt/$${TARGET}/bin 47 | !isEmpty(target.path): INSTALLS += target 48 | 49 | RESOURCES += \ 50 | img.qrc 51 | 52 | DISTFILES += \ 53 | tubiao.rc 54 | -------------------------------------------------------------------------------- /solve_maze/play_maze.h: -------------------------------------------------------------------------------- 1 | #ifndef PLAY_MAZE_H 2 | #define PLAY_MAZE_H 3 | 4 | #include 5 | #include "qpainter.h" 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include "point.h" 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | //using namespace std; 22 | 23 | namespace Ui { 24 | class play_maze; 25 | } 26 | 27 | class play_maze : public QWidget 28 | { 29 | Q_OBJECT 30 | 31 | public: 32 | explicit play_maze(QWidget *parent = nullptr); 33 | ~play_maze(); 34 | 35 | private slots: 36 | void on_get_row_valueChanged(int arg1); 37 | 38 | void on_get_col_valueChanged(int arg1); 39 | 40 | void on_creat_maze_clicked(); 41 | 42 | void on_search_path_clicked(); 43 | 44 | void on_DFS_clicked(); 45 | 46 | void on_A_search_clicked(); 47 | 48 | void on_A_search_2_clicked(); 49 | 50 | void on_greedy_clicked(); 51 | 52 | private: 53 | Ui::play_maze *ui; 54 | 55 | int maze_row; 56 | int maze_col; 57 | int pre_maze_row; 58 | int pre_maze_col; 59 | bool flag_get_row=false; 60 | bool flag_get_col=false; 61 | bool flag_click=false;//判断是否自动寻路 62 | bool flag_target=false;//自动寻路若经过target,就会覆盖,暂时不会显示,所以通过这个flag解决这个问题 63 | bool flag_target2=false;//感觉一个解决不了问题 64 | bool flag_success=false;//完成后不进行搜索 65 | 66 | int W; 67 | int H;//界面宽度和高度 68 | int maze_cell_size;//每个块的大小 69 | 70 | point maze[200][200];//迷宫 71 | bool creat_maze=false; 72 | 73 | int control_X; 74 | int control_Y;//控制点的位置 75 | int target_X; 76 | int target_Y;//目标点位置 77 | int target_X2; 78 | int target_Y2;//鼠标点击位置坐标 79 | 80 | int control_direction;//控制点行走的方向,1,2分别代表左右 81 | int pre_control_direction; 82 | 83 | QTime ftime;//计算搜索时间 84 | 85 | QPixmap control_RIGHT; 86 | QPixmap control_LEFT; 87 | QPixmap target;//目标图片 88 | QPixmap wall;//墙 89 | QPixmap road;//路 90 | 91 | int graph[200][200];//用于标记是否被搜索过 92 | 93 | QQueue open;//开节点表,用于宽度优先搜索 94 | //QQueue search_path;//搜索路径队列,宽搜 95 | QStack DFS_search;//用于深度优先搜索的栈 96 | QVector A_search;//用于A*算法搜索和贪婪算法的队列。 97 | QVector auto_path;//自动寻路用 98 | QStack auto_path2;//因为寻路只记录了儿子节点,需要一个栈进行反序 99 | //用于自动寻路 100 | point mypoint; 101 | //point pre_mypoint; 102 | 103 | // int X; 104 | // int Y; 105 | 106 | QStack build_maze_stack;//创建迷宫的栈 107 | point path[200][200];//用于搜索路径的矩阵 108 | 109 | 110 | void keyPressEvent(QKeyEvent *); 111 | void paintEvent(QPaintEvent *); 112 | void mousePressEvent(QMouseEvent *); 113 | void timerEvent(QTimerEvent *); 114 | 115 | }; 116 | 117 | #endif // PLAY_MAZE_H 118 | -------------------------------------------------------------------------------- /solve_maze/play_maze.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | play_maze 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 700 11 | 12 | 13 | 14 | false 15 | 16 | 17 | 游戏界面 18 | 19 | 20 | background-image: url(:/img/img/BG.jpg) 21 | 22 | 23 | 24 | 25 | 660 26 | 90 27 | 111 28 | 41 29 | 30 | 31 | 32 | 33 | 楷体 34 | 10 35 | 75 36 | false 37 | true 38 | 39 | 40 | 41 | border-radius:10px; 42 | 43 | 44 | 宽度优先搜索 45 | 46 | 47 | 48 | 49 | 50 | 660 51 | 470 52 | 101 53 | 41 54 | 55 | 56 | 57 | 58 | 楷体 59 | 10 60 | 75 61 | true 62 | 63 | 64 | 65 | border-radius:10px; 66 | 67 | 68 | 生成迷宫 69 | 70 | 71 | 72 | 73 | 74 | 690 75 | 410 76 | 61 77 | 31 78 | 79 | 80 | 81 | 82 | 75 83 | true 84 | 85 | 86 | 87 | Qt::ClickFocus 88 | 89 | 90 | 8 91 | 92 | 93 | 200 94 | 95 | 96 | 10 97 | 98 | 99 | 100 | 101 | 102 | 690 103 | 370 104 | 61 105 | 31 106 | 107 | 108 | 109 | 110 | 75 111 | true 112 | 113 | 114 | 115 | Qt::ClickFocus 116 | 117 | 118 | 8 119 | 120 | 121 | 200 122 | 123 | 124 | 10 125 | 126 | 127 | 128 | 129 | 130 | 660 131 | 380 132 | 16 133 | 16 134 | 135 | 136 | 137 | 138 | 楷体 139 | 10 140 | 75 141 | true 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 660 152 | 420 153 | 16 154 | 16 155 | 156 | 157 | 158 | 159 | 楷体 160 | 10 161 | 75 162 | true 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 660 173 | 145 174 | 111 175 | 41 176 | 177 | 178 | 179 | 180 | 楷体 181 | 10 182 | 75 183 | true 184 | 185 | 186 | 187 | border-radius:10px; 188 | 189 | 190 | 深度优先搜索 191 | 192 | 193 | 194 | 195 | 196 | 660 197 | 255 198 | 111 199 | 41 200 | 201 | 202 | 203 | 204 | 楷体 205 | 10 206 | 75 207 | true 208 | 209 | 210 | 211 | border-radius:10px; 212 | 213 | 214 | A*搜索 215 | 216 | 217 | 218 | 219 | 220 | 660 221 | 200 222 | 111 223 | 41 224 | 225 | 226 | 227 | 228 | 楷体 229 | 10 230 | 75 231 | true 232 | 233 | 234 | 235 | border-radius:10px; 236 | 237 | 238 | 贪婪算法 239 | 240 | 241 | 242 | 243 | 244 | 245 | -------------------------------------------------------------------------------- /solve_maze/solve_maze.pro.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EnvironmentId 7 | {e19f9035-b5a2-4fba-ac21-a7084ce54db7} 8 | 9 | 10 | ProjectExplorer.Project.ActiveTarget 11 | 0 12 | 13 | 14 | ProjectExplorer.Project.EditorSettings 15 | 16 | true 17 | false 18 | true 19 | 20 | Cpp 21 | 22 | CppGlobal 23 | 24 | 25 | 26 | QmlJS 27 | 28 | QmlJSGlobal 29 | 30 | 31 | 2 32 | UTF-8 33 | false 34 | 4 35 | false 36 | 80 37 | true 38 | true 39 | 1 40 | true 41 | false 42 | 0 43 | true 44 | true 45 | 0 46 | 8 47 | true 48 | 1 49 | true 50 | true 51 | true 52 | false 53 | 54 | 55 | 56 | ProjectExplorer.Project.PluginSettings 57 | 58 | 59 | -fno-delayed-template-parsing 60 | 61 | true 62 | 63 | 64 | 65 | ProjectExplorer.Project.Target.0 66 | 67 | Desktop Qt 5.11.2 MinGW 32bit 68 | Desktop Qt 5.11.2 MinGW 32bit 69 | qt.qt5.5112.win32_mingw53_kit 70 | 1 71 | 0 72 | 0 73 | 74 | C:/Users/LN/Desktop/BigHomeWork/build-solve_maze-Desktop_Qt_5_11_2_MinGW_32bit-Debug 75 | 76 | 77 | true 78 | qmake 79 | 80 | QtProjectManager.QMakeBuildStep 81 | true 82 | 83 | false 84 | false 85 | false 86 | 87 | 88 | true 89 | Make 90 | 91 | Qt4ProjectManager.MakeStep 92 | 93 | false 94 | 95 | 96 | 97 | 2 98 | Build 99 | 100 | ProjectExplorer.BuildSteps.Build 101 | 102 | 103 | 104 | true 105 | Make 106 | 107 | Qt4ProjectManager.MakeStep 108 | 109 | true 110 | clean 111 | 112 | 113 | 1 114 | Clean 115 | 116 | ProjectExplorer.BuildSteps.Clean 117 | 118 | 2 119 | false 120 | 121 | Debug 122 | Debug 123 | Qt4ProjectManager.Qt4BuildConfiguration 124 | 2 125 | true 126 | 127 | 128 | C:/Users/LN/Desktop/BigHomeWork/build-solve_maze-Desktop_Qt_5_11_2_MinGW_32bit-Release 129 | 130 | 131 | true 132 | qmake 133 | 134 | QtProjectManager.QMakeBuildStep 135 | false 136 | 137 | false 138 | false 139 | true 140 | 141 | 142 | true 143 | Make 144 | 145 | Qt4ProjectManager.MakeStep 146 | 147 | false 148 | 149 | 150 | 151 | 2 152 | Build 153 | 154 | ProjectExplorer.BuildSteps.Build 155 | 156 | 157 | 158 | true 159 | Make 160 | 161 | Qt4ProjectManager.MakeStep 162 | 163 | true 164 | clean 165 | 166 | 167 | 1 168 | Clean 169 | 170 | ProjectExplorer.BuildSteps.Clean 171 | 172 | 2 173 | false 174 | 175 | Release 176 | Release 177 | Qt4ProjectManager.Qt4BuildConfiguration 178 | 0 179 | true 180 | 181 | 182 | C:/Users/LN/Desktop/BigHomeWork/build-solve_maze-Desktop_Qt_5_11_2_MinGW_32bit-Profile 183 | 184 | 185 | true 186 | qmake 187 | 188 | QtProjectManager.QMakeBuildStep 189 | true 190 | 191 | false 192 | true 193 | true 194 | 195 | 196 | true 197 | Make 198 | 199 | Qt4ProjectManager.MakeStep 200 | 201 | false 202 | 203 | 204 | 205 | 2 206 | Build 207 | 208 | ProjectExplorer.BuildSteps.Build 209 | 210 | 211 | 212 | true 213 | Make 214 | 215 | Qt4ProjectManager.MakeStep 216 | 217 | true 218 | clean 219 | 220 | 221 | 1 222 | Clean 223 | 224 | ProjectExplorer.BuildSteps.Clean 225 | 226 | 2 227 | false 228 | 229 | Profile 230 | Profile 231 | Qt4ProjectManager.Qt4BuildConfiguration 232 | 0 233 | true 234 | 235 | 3 236 | 237 | 238 | 0 239 | 部署 240 | 241 | ProjectExplorer.BuildSteps.Deploy 242 | 243 | 1 244 | Deploy Configuration 245 | 246 | ProjectExplorer.DefaultDeployConfiguration 247 | 248 | 1 249 | 250 | 251 | false 252 | false 253 | 1000 254 | 255 | true 256 | 257 | false 258 | false 259 | false 260 | false 261 | true 262 | 0.01 263 | 10 264 | true 265 | 1 266 | 25 267 | 268 | 1 269 | true 270 | false 271 | true 272 | valgrind 273 | 274 | 0 275 | 1 276 | 2 277 | 3 278 | 4 279 | 5 280 | 6 281 | 7 282 | 8 283 | 9 284 | 10 285 | 11 286 | 12 287 | 13 288 | 14 289 | 290 | 2 291 | 292 | solve_maze 293 | 294 | Qt4ProjectManager.Qt4RunConfiguration:C:/Users/LN/Desktop/BigHomeWork/solve_maze/solve_maze.pro 295 | true 296 | 297 | solve_maze.pro 298 | 299 | C:/Users/LN/Desktop/BigHomeWork/build-solve_maze-Desktop_Qt_5_11_2_MinGW_32bit-Release 300 | 3768 301 | false 302 | true 303 | false 304 | false 305 | true 306 | 307 | 1 308 | 309 | 310 | 311 | ProjectExplorer.Project.TargetCount 312 | 1 313 | 314 | 315 | ProjectExplorer.Project.Updater.FileVersion 316 | 18 317 | 318 | 319 | Version 320 | 18 321 | 322 | 323 | -------------------------------------------------------------------------------- /solve_maze/play_maze.cpp: -------------------------------------------------------------------------------- 1 | #include "play_maze.h" 2 | #include "ui_play_maze.h" 3 | #include 4 | 5 | //using namespace std; 6 | 7 | play_maze::play_maze(QWidget *parent) : 8 | QWidget(parent), 9 | ui(new Ui::play_maze) 10 | { 11 | ui->setupUi(this); 12 | 13 | control_direction=2;//往右 14 | setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint); // 禁止最大化按钮 15 | setFixedSize(this->width(),this->height()); // 禁止拖动窗口大小 16 | //this->move((a.desktop()->width() - this->width()) / 2, (app.desktop()->height() - win.height()) / 2); 17 | 18 | QDesktopWidget *deskdop = QApplication::desktop(); 19 | move((deskdop->width() - this->width())/2, (deskdop->height() - this->height())/2); 20 | 21 | 22 | control_LEFT.load(":img/img/control_left.jpg"); 23 | control_RIGHT.load(":img/img/control_right.jpg"); 24 | target.load(":img/img/target.jpg"); 25 | road.load(":img/img/road.jpg"); 26 | wall.load(":img/img/wall.jpg"); 27 | 28 | } 29 | 30 | play_maze::~play_maze() 31 | { 32 | delete ui; 33 | } 34 | 35 | void play_maze::on_get_row_valueChanged(int arg1) 36 | { 37 | pre_maze_row=arg1; 38 | flag_get_row=true; 39 | 40 | // qDebug()<<"pre_maze_row"; 41 | } 42 | 43 | void play_maze::on_get_col_valueChanged(int arg1) 44 | { 45 | pre_maze_col=arg1; 46 | flag_get_col=true; 47 | } 48 | 49 | void play_maze::on_creat_maze_clicked()//创建迷宫 50 | { 51 | if(flag_click){ 52 | return; 53 | } 54 | if(flag_get_row){ 55 | maze_row=pre_maze_row; 56 | } 57 | else{ 58 | maze_row=10; 59 | //qDebug()<<"hhhh"; 60 | } 61 | if(flag_get_col){ 62 | maze_col=pre_maze_col; 63 | } 64 | else{ 65 | maze_col=10; 66 | } 67 | //qDebug()<=maze_col) 90 | max=maze_row; 91 | else 92 | max=maze_col; 93 | 94 | maze_cell_size=650/max; 95 | 96 | startTimer(5*650/max); 97 | //qDebug()<<"get row and col"<2&&maze[i-2][j].state==0){ 119 | build_maze_stack.push(temp); 120 | maze[i-2][j].state=1; 121 | maze[i-1][j].state=1; 122 | i=i-2; 123 | if(maze[i-1][j].state==0) 124 | up=false; 125 | else 126 | up=true; 127 | if(maze[i+1][j].state==0) 128 | down=false; 129 | else 130 | down=true; 131 | if(maze[i][j-1].state==0) 132 | left=false; 133 | else 134 | left=true; 135 | if(maze[i][j+1].state==0) 136 | right=false; 137 | else 138 | right=true; 139 | } 140 | else{ 141 | up=true; 142 | } 143 | break; 144 | case 1: if(!down&&i2&&maze[i][j-2].state==0) 172 | { 173 | build_maze_stack.push(temp); 174 | maze[i][j-2].state=1; 175 | maze[i][j-1].state=1; 176 | j=j-2; 177 | if(maze[i-1][j].state==0) 178 | up=false; 179 | else 180 | up=true; 181 | if(maze[i+1][j].state==0) 182 | down=false; 183 | else 184 | down=true; 185 | if(maze[i][j-1].state==0) 186 | left=false; 187 | else 188 | left=true; 189 | if(maze[i][j+1].state==0) 190 | right=false; 191 | else 192 | right=true; 193 | } 194 | else{ 195 | left=true; 196 | } 197 | break; 198 | case 3: if(!right&&jkey()) { 634 | case Qt::Key_W: if((control_Y>0)&&((maze[control_X][control_Y-1].state==1)||(maze[control_X][control_Y-1].state==3))){ 635 | path[control_X][control_Y-1].state=0;//这一段是防止到达终点依旧显示路线 636 | maze[control_X][control_Y-1].state=2; 637 | maze[control_X][control_Y].state=1; 638 | control_Y-=1; 639 | } 640 | break; 641 | case Qt::Key_S: if((control_Y0)&&((maze[control_X-1][control_Y].state==1)||(maze[control_X-1][control_Y].state==3))){ 649 | path[control_X-1][control_Y].state=0; 650 | maze[control_X-1][control_Y].state=2; 651 | maze[control_X][control_Y].state=1; 652 | control_X-=1; 653 | control_direction=1; 654 | } 655 | break; 656 | case Qt::Key_D: if((control_X0)&&((maze[target_X][target_Y-1].state==1)&&((maze[target_X][target_Y].state!=2)))){ 666 | //path[target_X][target_Y-1].state=0;//这一段是防止到达终点依旧显示路线 667 | maze[target_X][target_Y-1].state=3; 668 | maze[target_X][target_Y].state=1; 669 | target_Y-=1; 670 | } 671 | break; 672 | case Qt::Key_K: if((target_Y0)&&((maze[target_X-1][target_Y].state==1))&&((maze[target_X][target_Y].state!=2))){ 680 | //path[target_X-1][target_Y].state=0; 681 | maze[target_X-1][target_Y].state=3; 682 | maze[target_X][target_Y].state=1; 683 | target_X-=1; 684 | //target_direction=1; 685 | } 686 | break; 687 | case Qt::Key_L: if((target_Xx()-5; 776 | int y=mouse->y()-5; 777 | target_X2=x/maze_cell_size; 778 | target_Y2=y/maze_cell_size; 779 | //qDebug()<