数据结构课程设计迷宫算法的实现JAVA.docx
《数据结构课程设计迷宫算法的实现JAVA.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计迷宫算法的实现JAVA.docx(28页珍藏版)》请在冰豆网上搜索。
数据结构课程设计迷宫算法的实现JAVA
数据结构课程设计
走迷宫
学号:
姓名:
日期:
6月16日
一、题目说明
.分别用以下算法实现。
并设计图形用户界面提供迷宫大小、入口及出口位置和初始状态等,演示走迷宫的过程和结果。
1.递归算法。
2.使用栈作为辅助结构。
3.使用队列作为辅助结构。
二、总体设计方案以及细节设计
为实现上述程序功能,主要使用的JAVAAWT和JAVASWING包
importjava.awt.*;
importjavax.swing.*;
importhartech.ui.*;
3.本程序包含四个模块:
1)主程序模块:
packagemg;
importjava.awt.*;
importjavax.swing.*;
/**
*
Title:
mazeGlobalclass
*
*
Description:
*
*
Date:
2006-08-31
*/
publicclassMain{
//_reset变量用于reset时用
staticintrows=12,cols=14;
staticintspeed_reset=50,speed=speed_reset;
staticJToggleButton[][]buttons;
staticWalkingwalking;
staticboolean[][]brick,brick_reset={
{true,true,true,true,true,false,true,true,true,true,
true,true,true,true,},
{true,false,false,false,true,false,true,true,true,true,
false,false,false,true,},
{true,false,true,false,true,false,false,false,false,true,
true,false,true,true,},
{true,false,true,false,true,false,true,true,true,false,
true,false,true,false,},
{true,true,true,false,false,false,true,false,true,false,
true,false,true,true,},
{true,false,true,true,true,true,true,false,true,false,
true,false,false,true,},
{true,false,true,true,true,true,true,false,true,false,
true,false,true,true,},
{true,false,false,false,false,false,true,true,true,false,
true,false,true,false,},
{true,false,true,true,true,false,false,false,false,false,
true,false,true,true,},
{true,false,true,false,true,false,true,true,true,true,
true,false,false,true,},
{true,false,true,false,true,false,true,false,false,false,
false,false,true,true,},
{true,true,true,false,true,true,true,true,true,true,
true,false,true,true,}
};
staticJFramejFrame;
staticUIui;
publicstaticvoidmain(String[]args){
//启动新线程,创建一个窗口
Runnable(){
publicvoidrun(){
//J.setLookAndFeel("Metal");
jFrame=newJFrame(
"isthereanywaytogo?
Maze---");//建立一个Swing窗体
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭图标后,程序退出并关闭
//add
Main.ui=newUI();
jFrame.add(ui,BorderLayout.CENTER);
jFrame.setSize(700,400);
//J.goCenter(jFrame);
Main.drawButtons();
Main.reset();
jFrame.setVisible(true);
}
});
}
//用于重置到软件开始
publicstaticvoidreset(){
if(walking!
=null){
;
}
clean();
brick=copyBoolean(brick_reset);
speed=speed_reset;
;
setBricks();
}
//用于清楚已标记上的数字
publicstaticvoidclean(){
if(walking!
=null){
;
}
for(inti=0;ifor(intj=0;jbuttons[i][j].setText("");//清除按钮的数字,设置名字为空
buttons[i][j].setForeground(null);
}
}
UI.jLabel_state.setText("Movenow?
");
}
//去掉全部砖
publicstaticvoidblank(){
if(walking!
=null){
;
}
for(inti=0;ifor(intj=0;jbuttons[i][j].setText("");
buttons[i][j].setForeground(null);
buttons[i][j].setSelected(true);
}
}
UI.jLabel_state.setText("Movenow?
");
}
//重画按钮图,根据rows、cols
publicstaticJPaneldrawButtons(){
buttons=newJToggleButton[rows][cols];
UI.jPanel_map=newJPanel(newGridLayout(rows,cols));
for(inti=0;ifor(intj=0;jbuttons[i][j]=newJToggleButton();
UI.jPanel_map.add(buttons[i][j]);
}
}
BorderLayout.CENTER);
;
returnUI.jPanel_map;
}
//根据brick[][]设置按钮障碍
publicstaticvoidsetBricks(){
for(inti=0;ifor(intj=0;jbuttons[i][j].setSelected(brick[i][j]);
}
}
}
//根据现在按钮情况设置brick[][]数组,用于move()内前面
publicstaticvoidreadBricks(){
for(inti=0;ifor(intj=0;jbrick[i][j]=buttons[i][j].isSelected();
}
}
}
//开始走
publicstaticvoidmove(){
if(walking!
=null){
;
}
clean();
readBricks();
//readToFile();
walking=newWalking(brick);
}
/**
//用于把绘制好地图数据写入文件
publicstaticvoidreadToFile(){
Stringout="";
for(inti=0;iout+="{";
for(intj=0;jif(brick[i][j]){
out+="true,";
}
else{
out+="false,";
}
}
out+="},\r\n";
}
"E:
/dest.txt");
}
*/
//复制二维数组
publicstaticboolean[][]copyBoolean(boolean[][]in){
introw=in.length,col=in[0].length;
boolean[][]out=newboolean[row][col];
for(inti=0;ifor(intj=0;j
out[i][j]=in[i][j];
}
}
returnout;
}
}
importjava.awt.*;
importjavax.swing.*;
importhartech.ui.*;
/**
*
Title:
mazeGlobalclass
|
*
*
Description:
*
*
Date:
2006-08-31
*/
publicclassMain{
//_reset变量用于reset时用
staticintrows=12,cols=14;
staticintspeed_reset=50,speed=speed_reset;
staticJToggleButton[][]buttons;
staticWalkingwalking;
staticboolean[][]brick,brick_reset={
{true,true,true,true,true,false,true,true,true,true,
true,true,true,true,},
{true,false,false,false,true,false,true,true,true,true,
false,false,false,true,},
{true,false,true,false,true,false,false,false,false,true,
true,false,true,true,},
{true,false,true,false,true,false,true,true,true,false,
true,false,true,false,},
{true,true,true,false,false,false,true,false,true,false,
true,false,true,true,},
{true,false,true,true,true,true,true,false,true,false,
true,false,false,true,},
{true,false,true,true,true,true,true,false,true,false,
true,false,true,true,},
{true,false,false,false,false,false,true,true,true,false,
true,false,true,false,},
{true,false,true,true,true,false,false,false,false,false,
true,false,true,true,},
{true,false,true,false,true,false,true,true,true,true,
true,false,false,true,},
{true,false,true,false,true,false,true,false,false,false,
false,false,true,true,},
{true,true,true,false,true,true,true,true,true,true,
true,false,true,true,}
};
staticJFramejFrame;
staticUIui;
publicstaticvoidmain(String[]args){
//启动新线程,创建一个窗口
Runnable(){
publicvoidrun(){
J.setLookAndFeel("Metal");
jFrame=newJFrame(
"isthereanywaytogo?
Maze---");//建立一个Swing窗体
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭图标后,程序退出并关闭
//add
Main.ui=newUI();
jFrame.add(ui,BorderLayout.CENTER);
jFrame.setSize(700,400);
J.goCenter(jFrame);
Main.drawButtons();
Main.reset();
jFrame.setVisible(true);
}
});
}
//用于重置到软件开始
publicstaticvoidreset(){
if(walking!
=null){
;
}
clean();
brick=copyBoolean(brick_reset);
speed=speed_reset;
;
setBricks();
}
//用于清楚已标记上的数字
publicstaticvoidclean(){
if(walking!
=null){
;
}
for(inti=0;ifor(intj=0;jbuttons[i][j].setText("");//清除按钮的数字,设置名字为空
buttons[i][j].setForeground(null);
}
}
UI.jLabel_state.setText("Movenow?
");
}
//去掉全部砖
publicstaticvoidblank(){
if(walking!
=null){
;
}
for(inti=0;ifor(intj=0;jbuttons[i][j].setText("");
buttons[i][j].setForeground(null);
buttons[i][j].setSelected(true);
}
}
UI.jLabel_state.setText("Movenow?
");
}
//重画按钮图,根据rows、cols
publicstaticJPaneldrawButtons(){
buttons=newJToggleButton[rows][cols];
UI.jPanel_map=newJPanel(newGridLayout(rows,cols));
for(inti=0;ifor(intj=0;jbuttons[i][j]=newJToggleButton();
UI.jPanel_map.add(buttons[i][j]);
}
}
BorderLayout.CENTER);
;
returnUI.jPanel_map;
}
//根据brick[][]设置按钮障碍
publicstaticvoidsetBricks(){
for(inti=0;ifor(intj=0;jbuttons[i][j].setSelected(brick[i][j]);
}
}
}
//根据现在按钮情况设置brick[][]数组,用于move()内前面
publicstaticvoidreadBricks(){
for(inti=0;ifor(intj=0;jbrick[i][j]=buttons[i][j].isSelected();
}
}
}
//开始走
publicstaticvoidmove(){
if(walking!
=null){
;
}
clean();
readBricks();
//readToFile();
walking=newWalking(brick);
}
/**
//用于把绘制好地图数据写入文件
publicstaticvoidreadToFile(){
Stringout="";
for(inti=0;iout+="{";
for(intj=0;jif(brick[i][j]){
out+="true,";
}
else{
out+="false,";
}
}
out+="},\r\n";
}
"E:
/dest.txt");
}
*/
//复制二维数组
publicstaticboolean[][]copyBoolean(boolean[][]in){
introw=in.length,col=in[0].length;
boolean[][]out=newboolean[row][col];
for(inti=0;ifor(intj=0;j
out[i][j]=in[i][j];
}
}
returnout;
}
}
2)UI模块——实现整个控制面板内组件的布局管理;
3)Walking模块——实现走迷宫的算法;
4)Applete模块——设置控制面板。
三、详细设计
1.UI模块
packagemg;
importjava.awt.*;
import;
importjavax.swing.*;
import;
/**
*
Title:
maze'sMainUI
|
*
*
Description:
*
*
Date:
2006-08-31
*/
publicclassUIextendsJPanel{
privatestaticfinallongserialVersionUID=008L;
staticJPaneljPanel_state,jPanel_map,jPanel_control;
staticJLabeljLabel_state;
staticJButtonjButton_move,jButton_clean,jButton_blank,jButton_reset;
staticJSliderjSlider;//添加面板,向面板里添