一、问题描述
1.1 课程设计题目
程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。
1.2 课程设计要求
-
老鼠形象可辨认,可用键盘操纵老鼠上下左右移动
-
迷宫的墙足够结实,老鼠不能穿墙而过
-
正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败
-
添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙
-
找出走出迷宫的所有路径,以及最短路径
-
利用序列化功能实现迷宫地图文件的存盘和读出等功能
二、需求分析
迷宫游戏,作为一种经典的游戏,与之相关的程序可谓琳琅满目,数不胜数。在这种情况下,自己设计的程序要想有点看头,单靠黑洞洞的控制台是绝对不行的,至少要有像样一点的图形界面和简单方便的操作。
上学期刚学过C++之后,我通过自学MFC,完成了拥有图形界面的课程设计。这学期学数据结构的同时,也学习了另外一门重要的高级语言——java,所以,也想牛刀小试,玩一下java的图形界面设计。
为了达到题目中的要求,用java实现的话,显然需要用到它的图形界面、事件驱动、多线程等知识。前两部分内容,教材上讲的已基本上能帮我完成相关设计了,多线程的知识,教材上没有,但查阅相关资料(包括图书馆的纸质书籍和网上的各种论坛信息),也很容易找到设置时间限制的方法。
Java工具的问题解决了,毕竟大神们把这些工具设计的很方便和漂亮,使用起来当然不会太难,所以,剩下的才是核心部分——真正实现程序设计要求的重要算法。
用户只能自己设计迷宫玩是不太方便的,当然也不能没有这个功能,但我想在保留此功能的同时,添加一个生成随机迷宫的功能。当然这种随机不能是简单的调用java提供的random方法,这样所得到的迷宫很难保证有通路。要想设计出随机的,而且至少有一条通路的迷宫,自然要用到特殊的、巧妙的算法。另外,要求出最短路径,也是需要好的算法设计的,算法时间复杂度太高的话,用户也会等的不耐烦的。
三、概要设计
3.1 程序界面设计
程序主要有两个界面,均继承自javax.swing.Jframe,它们分别是开始界面StartUI和游戏界面map。
StartUI界面提供4个操作按钮,让用户选择游戏的场地大小,其中有一个按钮允许用户自定义场地大小。其实,这种设计完全是在模仿linux系统gno