基于Java的迷宫老鼠游戏

邱丑丑

发布日期: 2019-08-04 10:07:02 浏览量: 216
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、功能简介

迷宫老鼠系统包括以下功能:

  • 自定义迷宫大小

  • 使用图的深度遍历随机生成迷宫

  • 用户使用鼠标绘制自定义迷宫

  • 单步求解迷宫

  • 一键求解迷宫

  • 声音特效

二、程序截图

三、系统开发平台

  • 名称:迷宫老鼠

  • 目的:利用堆栈寻找迷宫的路径解法。

    • 编程语言:Java
    • 开发工具:Eclipse
    • 操作系统:Windows

四、系统规划

4.1 任务陈述

现实生活中总会有各种各样的寻径问题,比如地图寻路、导航驾驶等等。本次要开发的是将日常遇到的问题抽象化后形成的系统,抽象化提出要求后,根据具体需要,可设计为游戏或者应用。本次项目的名称是迷宫老鼠,它的应用主要用于解决迷宫的寻径问题。

4.2 任务目标

  • 解决迷宫问题:入口A已经给出,要求从A进入,正确的尽可能快速的从出口B走出。

  • 随机设计一个迷宫并且求解

  • 自定义一个迷宫并且求解。

五、流程图

六、需求分析

6.1 数据结构需求

数据结构主要涉及三个部分:

  • 顶点的数据对象:包含四个1/0整数数据表示该点四个方向的连通状况,数据之间没有联系。

  • 迷宫的地图:需要对迷宫的路径进行存储,大小固定,组内元素没有联系,互不影响,没有先后顺序。组内的数据类型为封装好的顶点对象类。

  • 迷宫求解中的路径:需要存储经过的路径,元素为封装的顶点对象。元素必须按照顺序排列,先进先出,数据大小无影响。

6.2 操作需求

6.2.1 随机模式

6.2.2 自定义模式中

七、 实现思想(分两部分:随机生成可解迷宫与自定义迷宫)

7.1 随机生成可解迷宫

首先,迷宫由n*n个方阵点组成,每个点有控制上下左右,4个方向的墙的属性值,以推倒墙的方式来构建两点间的通路。要是两点间有通路,即要使左边的正方形推倒右墙,右边的正方形推倒左墙,则形成此通路,通过设置点的属性值来保存构成迷宫的点。

利用图的深度优先遍历原则,从起点(0,0)开始,想任意可访问的点进行随机深度遍历,直至所有点都被遍历到为止(此处遍历全部的点是为了使迷宫看起来更加和谐好看,也增加了迷宫的复杂度),深度遍历的路径即为迷宫可行走的通路,当解迷宫时只能在此规定的通路上寻求通路,也就间接的形成了迷宫。

由于图的深度遍历的特点,起点(0,0)可以到达图中任何一个点,此处设置终点为矩阵的最后一个点,确保了起点到终点一定有通路,且通路唯一。将构成迷宫的所有点形成一个可变数组ArrayList,以供解迷宫时使用。

解迷宫时,方向选择按照先右,后下,再左上,并且提供计算两点间在确定方向上是否存在通路的判断方法,如果该点找到了下一个可通行的点,则将该点加入堆栈,如果找不到,则从堆栈中取出一个点,即形成了回路。

7.2 自定义迷宫

首先根据输入生成m*n个方格,通过鼠标点击事件,生成点击的方格处设置障碍,由此生成迷宫。
解迷宫时,在上述解迷宫的基础上,加入没有通路的判断(即到达不了终点的判断),即堆栈已经为空,但仍要从其中取出点时,表示此迷宫已经没有可以再到达的点,此时反映迷宫无通路,给予用户提示,解迷宫完成。

八、 数据结构设计

首先,利用动态数组储存迷宫的所有点类(MazePoint类),随机生成与自定义迷宫的过程中,便是通过设置这些迷宫点来构造迷宫的。

数据结构设计关键在解迷宫时予以体现,此处我利用堆栈的思想,讲解迷宫时经过的点压入堆栈,当在一点找不到可到达的下一点时,便取出堆栈中最顶层的点,将此点设为当前点寻找可到达的点,依次进行此过程,直至到达终点或堆栈中已没有点可以被取出为止。

以为在解迷宫的过程中,寻找过得点被唯一标识,当形成回路再寻找可到达的点时,这些被唯一标识的点不会被二次到达,以此保证迷宫不会出现死循环的状态。

上传的附件 cloud_download 迷宫老鼠课程设计.7z ( 15.15mb, 0次下载 )
error_outline 下载需要10点积分

发送私信

精品资源尽在此

57
文章数
0
评论数
最近文章
eject