java课设走迷宫含代码
老鼠走迷宫java程序
public class MouseMaze {
/**
* @see 老鼠走迷宫问题,本问题中仅仅找到一条可以走同的路径即可* @author ユークリウッド·ヘルサイズ
* @version 1.0
* @time 2013-07-11
* @param args
*/
public static int[][] maze = { {2,2,2,2,2,2,2},
{2,0,0,0,0,0,2},
{2,0,2,0,2,0,2},
{2,0,0,2,0,2,2},
{2,2,0,2,0,2,2},
{2,0,0,0,0,0,2},
{2,2,2,2,2,2,2}
};
public static int startI = 1,startJ = 1;
public static int endI = 5,endJ = 5;
public static int ok = 0;
public static void MouseMaze()
{
System.out.println("所要走的迷宫为:");//开始打印初始的迷宫
for(int i=0;i
{
for(int j=0;j
{
if(maze[i][j]==2)
{
System.out.print("■");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
System.out.println("正在寻找出口,请稍后……");
if(run(1,1)==0)//开始寻找出口,并且打印最终的结果
{
System.out.println("没有发现可行路径,搜索结束");
数据结构课程设计java求解迷宫,回溯法,A算法
算法与数据结构课程设计
课题:求解迷宫通路的图形界面演示程序
作者:***
QQ:328035823
目录
1.题目及需求分析 (4)
2.概要设计 (4)
3.详细设计 (10)
4.调试分析 (39)
5.课程设计总结 (42)
1.题目及需求分析
1.1题目
编制一个求解迷宫通路的图形界面演示程序。
1.2需求分析
1.输入一个任意大小的迷宫,任设起点、终点、障碍,用栈求出一条走出迷宫的路径,并
显示在屏幕上;
2.根据用户界面提示,用键盘输入,Home键设置迷宫起点,End键设终点,上下左右箭头
键移动,Enter键添加墙,Del键删除墙,完成后按F9键演示,演示完毕后可F5刷新题图,重新对地图的起点、终点、障碍进行设置,Esc键退出;
3.本程序要求至少得出一条成功的通路,也可求得全部路径。此外,也可尝试保存或载入
测试文件(此功能不做强行要求)。
4.当未输入起点时,消息显示“Error: You must set the START.”;未输入终点时,显
示“Error: You must set the END.”;找到路径时,屏幕显示足迹,并在消息框出现Path found,否则消去足迹,显示Path not found。
5.用户可以通过界面上提供的菜单选项,选择“帮助”查看操作说明。
6.(算法选优)用户可以通过界面上提供的菜单选项,选择“A*算法求最短路径”演示求
解迷宫最短路径。
2.概要设计
根据需求分析的用户界面的设计要求,考虑到我们在Java课程中学习过GUI设计,对Java的GUI的比较熟悉,所以我们用Java语言来开发本项目。
数据结构课程设计迷宫算法的实现java
数据结构课程设计
走迷宫
学号:200908204136
姓名:熊军
日期:6月16日
一、题目说明
.分别用以下算法实现。并设计图形用户界面提供迷宫大小、入口及出口位置和初始状态等,演示走迷宫的过程和结果。
1.递归算法。
2.使用栈作为辅助结构。
3.使用队列作为辅助结构。
二、总体设计方案以及细节设计
为实现上述程序功能,主要使用的JA V A AWT和JA V A SWING包
import java.awt.*;
import javax.swing.*;
import hartech.ui.*;
3. 本程序包含四个模块:
1)主程序模块:
package mg;
import java.awt.*;
import javax.swing.*;
/**
* <p>Title: maze Global class</p>
*
* <p>Description: </p>
*
* <p>Date: 2006-08-31 </p>
*/
public class Main {
// _reset 变量用于reset时用
static int rows = 12, cols = 14;
static int speed_reset = 50, speed = speed_reset;
static JToggleButton[][] buttons;
static Walking walking;
static boolean[][] brick, brick_reset = {
java迷宫小游戏源代码
帮朋友写的迷宫小游戏程序java
//作者:LaoCooon
import java.awt.Graphics; import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.*; import javax.swing.*; import java.awt.*;
class mMaze extends Frame
{ Color redColor;
Random Random=new Random();
int mapI=Random.getRandom();
MapArray MapArray=new MapArray();
int[] map = MapArray.getMapArray(mapI);
static ImageIcon wall= new ImageIcon("wall.jpg");
final ImageIcon tortoise= new ImageIcon("tortoise.gif");
int xl=0,yl=1,speed=30;
int x=0,y=1;
public mMaze(){addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode()== KeyEvent.VK_UP){
java寻找迷宫路径的简单实现示例
java寻找迷宫路径的简单实现⽰例
迷宫项⽬实现设计⽂档
项⽬介绍:
⼀个⽹格迷宫由n⾏m列的单元格组成,每个⼤院个要么是空地(⽤0表⽰),要么是障碍物(⽤1表⽰)。你的任务是找⼀条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格。任何时候都不能在有障碍物的单元格中,也不能⾛到迷宫之外。起点为左上⾓和终点右下⾓。
项⽬功能:
解决迷宫路径查找问题,寻找⼀条从左上⾓迷宫⼊⼝到右下⾓迷宫出⼝的⼀条有效路径,0代表可⾛,1代表不能⾏⾛,找到请输出最终的迷宫和路径信息,找不到请输出不存在有效路径。
项⽬所⽤知识点:
采⽤Java⾯向对象思想,⼆维数组以及⾮递归栈进⾏实现
项⽬实现思路:
1.定义⼀个迷宫节点类型(MazeNode)的⼆维数组
2.初始化每个格⼦中的value值。给⼆维数组每个格⼦存放对象。对象的value值只能为0(当前格⼦可以⾛)或者1(当前格⼦不能⾛)
3.创建围墙,可以有效防⽌越界问题。根据当前节点周围四个⽅向格⼦中的value值,判断当前节点的上下左右四个⽅向是否可⾛(0是可⾛,1不可⾛)。
4.开始⾛迷宫。采⽤栈操作,记录⾏⾛的路径,将元素⼊栈,判断当前栈顶元素的哪个⽅向可⾛,将其中⼀个可⾛⽅向进⾏⼊栈操作,直到右下⾓元素停⽌。栈中保存⾛过的路径。注意: 如果遇到⾛⼊死胡同问题,此时需要将是栈顶元素并且栈顶元素的四个⽅向都不能⾏⾛,此时将其出栈,选择新⽅向再次⼊栈,直到右下⾓元素停⽌。
项⽬实现:
Maze类
import java.util.Scanner;
public class Maze {
java课程设计-迷宫递归
6.6 迷宫问题
1.问题的提出
迷宫问题是指在一个m*n的矩阵当中,其中”0”代表可以行走的区域,”1”代表不可行走的区域,当你处在迷宫的任何一个位置,除了不可走不可行走的区域外,其余皆可以往上、下、左、右、左上、左下、右上、右下八个方向行走来找寻迷宫出口。
假设有个5*4的迷宫如下:
从这个迷宫问题,我们发现不论玩家处于迷宫中任一角落皆可往目前位置周围的八个方
由此,我们只要将每一个位置再区分为八个小步骤递归寻找出迷宫中可行的路,直到找一组解为止。假设现在玩家决定往右边行走,则右边的坐标便成为新的坐标,如此的递归遍历每一个可行的坐标。
我们现在实际操作一个大小为6*5的迷宫,让读者熟悉一下迷宫的运作流程。一般的迷宫问题为了简化迷宫边界的判断,一个6*5的迷宫,常会声明成8*7大小的数组,并将边界地区设为不可行走的区域,如下图灰色部分。
0 1 2 3 4 5 6
2
3
4
5
6
7
如上图入口为(1,1),出口为(6,5),此时将(1,1)标记为已走过符号”2”,走过但未能有通路的标记符号为”3”。
步骤1:
由(1,1)往上,往右上,往右皆不可行走。
往右下可前进到(2,2),将(2,2)标记为已走过符号“2”。
0 1 2 3 4 5 6
2
3
4
5
6
7
步骤2:
(2,2)往上不可行走.
往右上可前进到(1,3),将(1,3)标记为已走过符号“2”
1
2
3
4
5
6
7
步骤3:
(1,3)往上,往右上皆不可行走。
往右可前进到(1,4),将(1,4)标记为已走过符号“2”。
0 1 2 3 4 5 6 Array 0
1
2
3
4
5
Java 迷宫主要代码
class Map
{
int size=10;
boolean arrival=false; //判断是否到达出口
int [][]sq=new int[size*size][3]; //队列
boolean visit[][]=new boolean[size][size]; //标记点是否被访问过
int head=0,tail=0;
int map[][];
void creatMap()
{
int i,j;
map=new int[size][size];
for(i=0;i
for(j=0;j
{
int ran=(int)(Math.random()*10)+1;
if(ran%5==0)
{ map[i][j]=1;}
else { map[i][j]=0;}
}
for ( i=0; i
{
map[0][i] = 1; //左边界
map[size-1][i] = 1; //右边界
map[i][0] = 1; //上边界
map[i][size-1] = 1;//下边界
}
//设置起点、终点
map[0][1] = 2;
map[size-1][size-2] = 2;
for( i=0;i
for( j=0;j
{
if(map[i][j]==1)
{visit[i][j]=true;}
else
{ visit[i][j]=false;}
}
}
void showMap()
{
int i,j;
for(i=0;i
{
for(j=0;j
{
if (map[i][j] == 1)
System.out.print('■');
else if (map[i][j] == 0)
Java课程设计走迷宫
,a click to unlimited possibilities
汇报人:
目录 /目录
01
点击此处添加 目录标题
02
迷宫算法
03
Java实现
04
优化与改进
05
课程设计总结
01 添加章节标题
02 迷宫算法
深度优先搜索
概念:一种搜索策略,从根节点开始,沿着一条路径搜索到叶子节点,然后回溯到根节点,继 续搜索下一条路径
特点:能够找到一条最短路径,但可能会陷入死胡同
应用场景:适用于解决树形结构、图论等问题
实现方法:递归或非递归实现,通常使用递归实现,代码简洁易懂
广度优先搜索
基本思想:从起 点开始,沿着当 前路径探索所有 可能的路径,直 到找到目标为止
特点:优先探索 与当前节点距离
最近的节点
应用场景:适用 于求解最短路径、 最小生成树等问
题
实现方法:使用 队列存储待探索 的节点,每次从 队列中取出一个 节点进行探索, 并将与该节点相 邻且未被探索的
节点加入队列
A*算法
基本思想:使用启发式函数来估计从当前节点到目标节点的代价,选择代价最小的节 点进行扩展。
主要步骤:初始化、选择、扩展、更新。
优点:效率高,适用于大规模问题。
缺点:需要计算启发式函数,可能会导致局部最优解。
【JavaScriptGame】迷宫(其一)
【JavaScriptGame】迷宫(其⼀)
其实最开始是为了学习A*算法,⾕歌娘搜到的JavaScript版本看起来很复杂,⾄少我看了2遍还是⼀头雾⽔,就决定⽤jQuery写⼀个效率低,但思路⽐较清晰的版本,测试阶段嫌每次测试都要重画寻路的障碍物⿇烦,⼜⼲脆先丢在⼀边另写⼀个迷宫⽣成算法,结果从jQuery开始,到原⽣代码重构,零零总总⽤了⼏天休息时间,算是做出⼀份能够拿出来见得⼈的版本了,于是发出来望⼤家点评。
——————————————————分割线——————————————————
所谓迷宫,就是⼀个挖坑(⽣成)和填坑(破解)的过程。
如图所⽰,我们把迷宫的最初形态设定成这样。
其中每⼀个格⼦可以想象为⼀个4⾯都是墙壁的房间。
⽽迷宫⽣成的过程,则可以想象成挖坑er被随机扔到其中⼀个房间⾥,在迷茫中随便挑⼀⾯墙砸开,在下⼀个房间⾥继续重复砸墙,直到⾛出迷宫。
这说明了什么?害⼈先害⼰,有⽊有?
⽽要害⼈的⼈,肯定会有点⼩聪明,所以,重复的路他必定不会再⾛。⾄于为什么他会知道墙壁对⾯的房间是⾃⼰曾经⾛过的路,暂时先别考虑这个问题。
如果碰到死路,就回到上个房间重新选⼀⾯墙砸开,继续⾛。
最后,即使他已经找到了终点,但是他在迷宫中转悠⼤半天,已经⼈格扭曲,没理由⾃⼰找了半天的路被别⼈捡了便宜,于是他继续把剩下的房间都⾛⼀遍,把能砸的墙壁都砸开,企图让下⼀个进⼊迷宫的⼈迷路。
他也许会把某⼀⾯对⾯是已经⾛过的路的墙砸开,让别⼈⾛了半天发现⾃⼰⼜回到了起点,这即是单迷宫和复迷宫的区别。
最后贴张效果图和最初的DEMO,下次说说新的思路,这种⽅式实在太慢了╮(╯▽╰)╭
迷宫游戏代码
for(i=0;i<m+2;i++) {maze[i][n+1]=1;} //在迷宫外面加一圈围墙
for(int i=1;i<m+1;i++) //输入地图数据
for(int j=1;j<n+1;j++)
cin>>maze[i][j];
mark[1][1]=1; //起点赋制为1
return 0;
}
int display()
{
cout<<"寻找路径中..."<<endl;
if(SeekPath(1,1)) //调用行走迷宫函数,从入口处开始行走
{
cout<<"找到路了,\x01\x01\x01\x01这是路径坐标."<<endl<<"("<<2<<","<<2<<")";
if(choose)
{
user(); //调用用户生成迷宫函数
display(); //调用输出迷宫路径函数
}
java 随机迷宫游戏
随机迷宫游戏 (面向对象)
1.实验要求
• 设置一个迷宫(如:大小10×10、16×16等) • 迷宫固定一个入口,一个出口 • 设计算法来找出走出迷宫的路线 • 如果迷宫是死胡同,则提示并结束游戏
2 设计及实现
2.1 设计思想
类图:
2.2 核心算法
public Location goUp() //向上走 { Location nextlocation; nextlocation =new Location();
nextlocation.locationi=location.locationi-1; nextlocation.locationj=location.locationj; return nextlocation;
}
//向下走,向左走,向右走代码省略 public boolean findTheWay(int[][] maze)
{ Stack seekStack =new Stack(); //探查堆栈
while(location.locationi!=9||location.locationj!=8
&&0<=location.locationi&&location.locationi<=9
&&0<=location.locationj&&location.locationj<=9) //当还没到达出口*/ {
if(visted[location.locationi][location.locationj]==false)
{
seekStack.push(location); //位置入栈
基于Java的迷宫程序的设计与实现_任务书
本科毕业论文(设计)课题任务书
2011 — 2012 学年第一学期
课题名称基于Java的迷宫程序的设计与实现
开题单位信息工程学院
选题性质设计选题类型应用研究选题来源其他选题难度中等
指导教师
(职称/学位)
是否指导过否
实践时间14周每周约定指导时间
课题意义及要求
迷宫问题是数据结构课程中的一个经典问题,而求迷宫中入口到出口的所有路径也是一个经典的程序设计问题。因此迷宫程序的研究对提高分析、设计、实现及测试程序的综合能力有很大的帮助,更有利于在以后的开发项目中提供良好的思维方式。
对迷宫生成进行研究和分析,比较目前已有的生成算法,给出自己的迷宫生成的算法。对迷宫遍历算法进行研究,比较目前已有的遍历算法的优劣,提出一种新的算法。本设计中采用的算法从入口到出口的搜索过程时间应控制在一定时间范围内,并且用Java语言在JDK上实现其搜索过程的画面,模拟其算法实现过程。
学生承担的任务1.迷宫生成算法的研究与设计
2.迷宫遍历算法的研究与设计
3.分析所用算法的优劣性
4.用Java语言及相关平台环境实现该程序,并用图形界面显示迷宫及迷宫的
运动
学生提交的
成果代码一份
设计论文一份
主要参考文献[1]严蔚敏.数据结构(C语言版)[M].清华大学出版社,2007
[2]王晓东.计算机算法设计与分析(第2版)[M].电子工业出版社,2005
[3]郑莉.Java语言程序设计[[M].清华大学出版社,2011
[4]Mark Allen Weise著,葛秀慧译.《数据结构与问题求解(Java语言版)(第
4版)[M].清华大学出版社,2011
迷宫游戏代码
如何利用JAVA实现走迷宫程序
如何利⽤JAVA实现⾛迷宫程序
本Demo使⽤三个类
⼀个Test类
⼀个⾃定义的Stack类
⼀个⾃定义的Queue类
可以实现的功能:
1.对于⼀个写在⽂本⽂件中的迷宫,能够将其转换为⼆维数组⽤⼴度优先搜索实现查找最短路径
2.可以不定义迷宫的⼊⼝和出⼝,能⾃动查找到出⼊⼝
前提是要有⼀个对应路径的.txt⽂件
这⾥举个例⼦吧,我的是"F:/1号迷宫(0,18).txt"路径下
运⾏结果
⽰例代码
注释写的很详细,这⾥就不多赘述了
package com;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
/**迷宫测试
* 1号迷宫(0,18).txt
*2号迷宫(0,1).txt
*/
public class Test {
public static void main(String[] args) throws Exception {
Test test = new Test();
//通过⽂件输⼊流得到⼆维数组
char[][] arr = test.getFile("F:/1号迷宫(0,18).txt");
System.out.println("⼆维数组的长度为:"+arr[0].length);
int deep = test.getDeepByChar(arr);
System.out.println("⼆维数组的深度为:"+deep);
//找到⼊⼝位置
int [] begin = test.begin(arr);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1.设计目的
1.1课程设计的目的
2.总体设计
2.1设计思路
2.2设计方法
3.关键技术
4.程序流程
5.主要源代码
6. 运行结果及结论
7.参考文献
1.设计目的
1.1课程设计的目的
随着科技进步,时代发展,计算机走进了大家的生活。计算机程序强大的功能为使用者提供服务,编程语言也变得越来越流行。Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练应用面向对象的思想和设计方法解决实际问题的能力,也是为了增加同学们娱乐游戏选择而开发了一个适合学生的,能提升思考力的迷宫冒险游戏,这既锻炼了动手能力,还能进行消遣娱乐,可谓一举两得。
2.总体设计
2.1设计思路
根据对游戏系统进行的需求分析,本系统将分为6个模块:分别是迷宫主界面模块、记时设计模块、迷宫设计模块、道路和障碍设计模块、动漫冒险者设计模块、出入口设计模块。实现的功能有:
(1)迷宫的选择
玩家可以根据自身需求来进行选择简单迷宫、中等迷宫、难度迷宫三类中选择一类迷宫进行游戏。
(2)选择道路和障碍的图像
玩家可以根据个人喜好对迷宫中的道路和障碍的图片进行选择,但是图片的格式有规定,必须是“jpg”或“gif”格式的。
(3)游戏记时
当玩家控制迷宫中的动漫人物进行游戏时,计时器就开始进行记时,直到动漫人物到达出口时,记时结束,并在屏幕上显示游戏用时。
(4)开始游戏
玩家将鼠标移动至迷宫中的动漫冒险者,即可看到“单击我然后按键盘方向键”,单击后,游戏开始。玩家即可通过键盘上的方向键进行游戏。
(5)游戏结束
玩家控制动漫冒险者移动至迷宫地图的出口处时,游戏的计时器停止计时,并弹出信息框“恭喜您通关了”,游戏结束。
(6)冒险脚步声
玩家单击动漫冒险者后,便可以用键盘方向键进行控制。动漫冒险者每移动一步便会发出一声“嘟”的响声。
(7)重新开始
玩家可以根据个人对自己通关时间长短的满意程度选择再次挑战,单击“重新开始”即可。
(8)计时界面位置
利用边界式布局管理器BorderLayout将计时界面置于上方。
(9)再次挑战界面位置
利用边界式布局管理器BorderLayout将再次挑战界面置于下方。
图2.1 J迷宫冒险系统6大模块图
2.2设计方法
(1)迷宫冒险系统主界面模块
迷宫冒险系统主界面模块包括MazeWindow.java和Maze.java两个文件。MazeWindow是迷宫冒险系统的主运行类,其中有运行整个程序的main方法,该文件生成了Maze类的一个实例,从而生成了迷宫冒险系统的界面。MazeWindow类继承自JFrame类,以ActionListener为接口实现了事件侦听的接口,它有一个不带参数的构造方法MazeWindow (),用来生成MazeWindow的实例。MazeWindow 类将所有的功能集中到菜单栏中,并通过调用其他模块来实现迷宫冒险系统的各个功能。
(2)记时设计模块
记时设计模块主要由HandleMove.java共1个文件组成。HandleMove类继承自JPanel类,以ActionListener为接口实现事件的侦听的接口。该模块利用了一个2维数组来进行实现,并对计时显示的字体、背景色、显示位置进行设计。该模块定义了一个无参返回值的变量SpendTime,利用
SpendTime这个变量来对记时的开始触发源和记时的结束触发源。
图2.2计时流程图
(3)迷宫设计模块
迷宫设计模块主要由2个2维数组组成,它们组成了主界面中“选择迷宫”菜单的内容,其中包括简单迷宫、中等迷宫、难度迷宫三大类。该模块的类继承自JLayeredPane类,主要通过2个2维数组来实现。并且对迷宫中的道路和障碍的插入图片格式进行了要求。该模块使用try和catch 来捕获和处理异常。当迷宫地图不可用时则弹出对话框“无效的迷宫文件”。
(4)道路和障碍设计模块系统
道路和障碍设计模块主要由MazePoint.java这个文件组成,这个文件组成了主界面中的迷宫地图中的道路和障碍的内容。
(5)动漫冒险者设计模块
动漫冒险者设计模块主要是对迷宫地图中处于入口处的动漫冒险玩家进行设计。该模块利用语句使鼠标箭头移动到动漫冒险者上时显示文字“单击我,然后按键盘方向键”,并为冒险者的图片格式、长度、宽带、初始位置等等进行进一步的设计,让动漫冒险者更加生动。
(6)出入口设计模块
出入口设计模块主要是定义了出口与入口以及当动漫冒险者处于这两个位置时的状态和事件的链接。
3.关键技术
在设计走迷宫小游戏时,编写了6个JAVA源文件:MazeWindow.java、MazePoint.java、WallOrRoad.java、Maze.java、PersonInMaze.java、HandleMove.java
4.程序流程
图4.1迷宫游戏流程图
5.主要源代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing..*;
public class MazeWindow extends JFrame implements ActionListener{