├── 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()<