今天为大家分享一个界面漂亮、功能完整的老鼠走迷宫程序的开发与制作 423,目前系统已经完成了初步功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步!!
开发环境
开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序
系统框架
利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。选中Main.java,点右键 run as application启动相关程序。也客户把程序打包成JAR包,双击JAR即可以启动相关的程序。
程序主要功能
问题背景:
迷宫问题的本质是图的遍历问题,从起点开始不断四个方向探索,直到走到出口,走的过程借助栈记录走过的路径,栈记录坐标有两个作用,一方面是记录走过的路径,一方面方便走到死路时进行回溯其他的道路。
问题目标
用java面向对象程序设计语言,设计和实现一老鼠走迷宫的软件程序,即一个假想的小车能在图示的迷宫中根据设定的起始点和终点自主寻找路径。整个程序分两个部分:算法设计和实现部分、和界面展示部分。
第一部分:算法设。计和实现部分
- 迷宫地图生成算法的设计和实现。生成迷宫有两种方式:自动生成迷宫:根据迷宫生成算法自动生成一定复杂度的迷宫地图;手动生成迷宫:根据文件中存储的固定数据生成迷宫地图。
- 单路径寻找算法的设计与实现:找出迷宫中一条单一的通路。
- 迷宫遍历算法的设计与实现:遍历迷宫中所有的可行路径。
- 最短路径计算算法的设计与实现:根据遍历结果,找出迷宫中所有通路中的最短通路。
第二部分:界面展示部分
- 生成迷宫地图界面的设计与实现:根据生成的迷宫地图,用可视化的界面展现出来。
- 界面布局的设计与实现:根据迷宫程序的总体需求,设计和实现合理的界面布局。
- 相关迷宫生成过程和寻路算法在界面上的展现:将迷宫程序中的相关功能,跟界面合理结合,并采用一定的方法展现给用户,如通过动画展示等。
走迷宫技巧
第一条,进入迷宫后,可以任选一条道路往前走;
第二条,如果遇到走不通的死胡同,就马上返回,并在该路口做个记号;
第三条,如果遇到了叉路口,观察一下是否还有没有走过的通道。有,就任选一条通道往前走;没有,就顺着原路返回原来的叉路口,并做个记号。然后就重复第二条和第三条所说的走法,直到找到出口为止。如果要把迷宫所有地方都搜查到,还要加上一条,就是凡是没有做记号的通道都要走一遍。
程序实现效果
1 主界面
2 指定迷宫大小
3 运行结果
4 打印迷宫结果
1: (0,1)
2: (1,1)
3: (1,2)
4: (1,3)
5: (2,3)
6: (3,3)
7: (4,3)
8: (5,3)
9: (6,3)
10: (7,3)
11: (7,4)
12: (7,5)
13: (8,5)
14: (9,5)
15: (9,6)
16: (9,7)
17: (10,7)
18: (11,7)
19: (11,6)
20: (11,5)
21: (12,5)
22: (13,5)
23: (14,5)
24: (15,5)
25: (16,5)
26: (17,5)
27: (17,6)
28: (17,7)
29: (17,8)
30: (17,9)
31: (17,10)
32: (17,11)
33: (17,12)
34: (17,13)
35: (17,14)
36: (17,15)
37: (17,16)
38: (17,17)
39: (17,18)
40: (17,19)
41: (18,19)
42: (19,19)
关键代码
public void paint() {
getChildren().clear();
/**
* 迷宫面板在左边,大小为700 x 700
*/
mazePane = new MazePane();
mazePane.autoCreateMaze(40, 40);
mazePane.setPrefSize(600,600);
mazePane.setLayoutX(0);
mazePane.setLayoutY(0);
mazePane.setOpacity(0.8);
/**
* 背景面板大小为 600 x 700
*/
backgroundPane = new BackgroundPane();
backgroundPane.setLayoutX(0);
backgroundPane.setLayoutY(0);
backgroundPane.setPrefSize(WIDTH + 20, HEIGHT);
/**
* 功能面板在右边,大小为600 x 700
*/
functionPane = new Pane();
functionPane.setPrefSize(600, 600);
functionPane.setOpacity(0.8);
getChildren().addAll(backgroundPane, mazePane, functionPane);
Text text1 = new Text(0, 30, "Create maze:");
text1.setFont(Font.font(20));
text1.setFill(Color.CORNFLOWERBLUE);
Text text2 = new Text(0, 210, "Auto run maze:");
text2.setFont(Font.font(20));
text2.setFill(Color.CORNFLOWERBLUE);
Text text3 = new Text(0, 400, "Stack information:");
text3.setFont(Font.font(20));
text3.setFill(Color.CORNFLOWERBLUE);
functionPane.setLayoutX(700);
functionPane.setLayoutY(0);
// 自动跑迷宫面板
runMazePane = new AutoRunMazePane(mazePane);
functionPane.getChildren().addAll(text1, text2, text3, runMazePane);
runMazePane.setLayoutX(0);
runMazePane.setLayoutY(200);
}