收藏 分销(赏)

JAVA实现走迷宫.doc

上传人:快乐****生活 文档编号:4374949 上传时间:2024-09-14 格式:DOC 页数:22 大小:196KB 下载积分:10 金币
下载 相关 举报
JAVA实现走迷宫.doc_第1页
第1页 / 共22页
JAVA实现走迷宫.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
//MazeWindow 主类 import javax、swing、*; import java、awt、*; import java、awt、event、*; import java、io、*; import java、util、Hashtable; import javax、swing、、*; public class MazeWindow extends JFrame implements ActionListener{ Maze maze; JMenuBar bar;//声明菜单条对象 JMenu menuChoice,menuImage,hero;//声明菜单对象 JMenuItem wallImage,roadImage,defaultImage,playerImage1,heroItem,heroclear;//声明菜单项对象 ; JButton renew;//声明按钮对象 String player="person、gif"; ShowRecord showRecord; //ShowRecord类 创建一个类对象 File 英雄榜=new File("英雄榜、txt"); File file[]=null; static String[] mazeName; static String currentMap; Hashtable hashtable=null; //哈希表 MazeWindow(){ wallImage File("wall、gif"); roadImage File("road、jpg"); bar=new JMenuBar();//创建菜单条对象 menuChoice=new JMenu("选择迷宫"); File("、"); (new (){ public boolean accept( name){ return name、endsWith("maze"); } } ); mazeName=new String[]; for(int i=0;i< ) { mazeName[i]=file[i]、getName()、substring(0, file[i]、getName()、length()-5);//substring(截取得起始位置,截取得长度); } for(int i=0;i< mazeName、length;i++) { JMenuItem item=new JMenuItem(mazeName[i]); item、addActionListener(this); menuChoice、add(item); } maze [0]、getName()); currentMap=mazeName[0]; init(); menuImage=new JMenu("选择墙与路得图像"); wallImage=new JMenuItem("墙得图像");//创建菜单项对象 roadImage=new JMenuItem("路得图像"); playerImage1=new JMenuItem("玩家图像"); defaultImage=new JMenuItem("墙与路得默认图像"); menuImage、add(wallImage);//菜单项添加到菜单上,如图3-5 menuImage、add(roadImage); menuImage、add(playerImage1); menuImage、add(defaultImage); hero=new JMenu("英雄榜"); heroItem=new JMenuItem("查瞧英雄榜"); heroclear=new JMenuItem("清空英雄榜"); hero、add(heroItem); hero、add(heroclear); bar、add(menuChoice); bar、add(menuImage);//菜单添加到菜单条上,如图3-5 bar、add(hero); setJMenuBar(bar); wallImage、addActionListener(this);//为菜单项添加监听器 roadImage、addActionListener(this); playerImage1、addActionListener(this); defaultImage、addActionListener(this); heroItem、addActionListener(this); heroclear、addActionListener(this); renew=new JButton(new ImageIcon("龙珠、gif"));//为“重新开始”按钮添加监听器 Font font=new Font("楷体",Font、BOLD,30); renew、setFont(font); renew、setVerticalAlignment(SwingConstants、TOP); renew、addActionListener(this); add(maze,BorderLayout、CENTER);//默认布局,如图3-7 add(renew,BorderLayout、SOUTH); hashtable=new Hashtable(); for(int i=0;i<) { hashtable、put(mazeName[i]+"1",mazeName[i]+"#"+100+"#匿名1"); hashtable、put(mazeName[i]+"2",mazeName[i]+"#"+100+"#匿名2"); hashtable、put(mazeName[i]+"3",mazeName[i]+"#"+100+"#匿名3"); } if(!英雄榜、exists()) {//英雄榜就是File类对象; boolean exists() 测试此抽象路径名表示得文件或目录就是否存在。 try{ out=new (英雄榜); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut、writeObject(hashtable); //void writeObject(Object obj) 将指定得对象写入 ObjectOutputStream。 objectOut、close(); //void close() 关闭流。 out、close(); //java、io 类 得方法 void close() 关闭此文件输出流并释放与此流有关得所有系统资源。 } catch(IOException e){} } showRecord =new ShowRecord(this,mazeName、length); setVisible(true); setBounds(60,60,1012,890); validate(); setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);/*EXIT_ON_CLOSE:退出应用程序后得默认窗口关闭操作*/ } public void init(){ if(maze!=null){ remove(maze); remove(maze、getHandleMove()); } maze=new Maze(); maze、setWallImage(wallImageFile); maze、setRoadImage(roadImageFile); maze、setMaze); maze、person、setImage(player); add(maze,BorderLayout、CENTER); add(maze、getHandleMove(),BorderLayout、NORTH); validate(); } public void actionPerformed(ActionEvent e){ if(e、getSource()==roadImage){ J chooser=new J();//文件对话框 filter=new ( "JPG&GIF Images","jpg","gif"); chooser、set(filter); int state=chooser、showOpenDialog(null); (); if(){ roadImage; maze、setRoadImage(roadImageFile); } } else if(e、getSource()==wallImage){ J chooser=new J(); filter=new ( "JPG&GIF Images","jpg","gif"); chooser、set(filter); int state=chooser、showOpenDialog(null); (); if(){ wallImage; maze、setWallImage(wallImageFile); } } else if(e、getSource()==playerImage1) { J chooser=new J(); filter=new ( "JPG&GIF Images","jpg","gif"); chooser、set(filter); int state=chooser、showOpenDialog(null); (); if(){ player=(); maze、person、setImage(player); } } else if(e、getSource()==defaultImage){ wallImage File("wall、gif"); roadImage File("road、jpg"); maze、setWallImage(wallImageFile); maze、setRoadImage(roadImageFile); } else if(e、getSource()==renew){ init(); } else if(e、getSource()==heroItem) //点击英雄榜 { showRecord、setMazeName(mazeName); showRecord、readAndShow(hashtable); showRecord、setVisible(true); } else if(e、getSource()==heroclear){ File("英雄榜、txt"); f、delete(); JFrame t=new JFrame("提示!"); t、setFont(new Font("楷体",Font、BOLD,30)); t、setSize(300,215); t、setLocationRelativeTo(null); JPanel pan=new JPanel(); t、setContentPane(pan); BorderLayout bLayout=new BorderLayout(20,20); pan、setLayout(bLayout); JLabel leb=new JLabel("英雄榜已清空,请重新载入游戏。"); pan、add(leb,BorderLayout、CENTER); t、setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE); t、setVisible(true); } else{ JMenuItem item=(JMenuItem)e、getSource(); maze ()+"、maze"); currentMap=item、getText(); maze、getHandleMove()、setMap(currentMap); init(); } } public static void main(String args[]){ new MazeWindow(); } } //Maze类 import java、awt、*; import java、awt、event、*; import javax、swing、*; import java、io、*; public class Maze extends JLayeredPane{ ; MazePoint[][] mazePoint; WallOrRoad[][] wallOrRoad; PersonInMaze person; HandleMove handleMove; ; int distance=45,m=0,n=0; public Maze(){ setLayout(null); wallImage=new File("wall、gif"); roadImage=new File("road、jpg"); person=new PersonInMaze(); handleMove=new HandleMove(); handleMove、initSpendTime(); person、addKeyListener(handleMove); setLayer(person,JLayeredPane、DRAG_LAYER); } public void setMaze f){ mazeFile=f; char [][]a; RandomAccess; String lineWord=null; try{ in=new RandomAccess,"r"); //创建RandomAccessFile类得只读对象 /*RandomAccessFile就是用来访问那些保存数据记录得文件得,这样您就可以用seek( )方法来访问记录,并进行读写了*/ long length=in、length(); long position=0; in、seek(position); while(position<length){ String str=in、readLine()、trim(); if(str、length()>=n) n=str、length(); position=in、get(); m++; } a=new char[m][n]; position=0; in、seek(position); m=0; while(position<length){ String str=in、readLine(); a[m]=str、toCharArray(); position=in、get(); m++; } in、close(); wallOrRoad=new WallOrRoad[m][n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ wallOrRoad[i][j]=new WallOrRoad(); if(a[i][j]=='1'){ wallOrRoad[i][j]、setIsWall(true); wallOrRoad[i][j]、setWallImage(wallImage); wallOrRoad[i][j]、repaint(); } else if(a[i][j]=='0'){ wallOrRoad[i][j]、setIsRoad(true); wallOrRoad[i][j]、setRoadImage(roadImage); wallOrRoad[i][j]、repaint(); } else if(a[i][j]=='*'){ wallOrRoad[i][j]、setIsEnter(true); wallOrRoad[i][j]、setIsRoad(true); wallOrRoad[i][j]、repaint(); } else if(a[i][j]=='#'){ wallOrRoad[i][j]、setIsOut(true); wallOrRoad[i][j]、setIsRoad(true); wallOrRoad[i][j]、repaint(); } } } mazePoint=new MazePoint[m][n]; int Hspace=distance,Vspace=distance; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ mazePoint[i][j]=new MazePoint(Hspace,Vspace); Hspace=Hspace+distance; } Hspace=distance; Vspace=Vspace+distance; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ add(wallOrRoad[i][j]); wallOrRoad[i][j]、setSize(distance,distance); wallOrRoad[i][j]、setLocation(mazePoint[i][j]、getX(),mazePoint[i][j]、getY()); wallOrRoad[i][j]、setAtMazePoint(mazePoint[i][j]); mazePoint[i][j]、setWallOrRoad(wallOrRoad[i][j]); mazePoint[i][j]、setIsWallOrRoad(true); if(wallOrRoad[i][j]、getIsEnter()){ person、setAtMazePoint(mazePoint[i][j]); add(person); person、setSize(distance,distance); person、setLocation(mazePoint[i][j]、getX(),mazePoint[i][j]、getY()); person、requestFocus(); person、repaint(); } } } handleMove、setMazePoint(mazePoint); } catch(IOException exp){ JButton mess=new JButton("无效得迷宫文件"); add(mess); mess、setBounds(30,30,100,100); mess、setFont(new Font("宋体",Font、BOLD,30)); System、out、println(exp+"mess"); } } public void setWallImage(File f){ wallImage=f; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(wallOrRoad[i][j]、getIsWall()) wallOrRoad[i][j]、setWallImage(wallImage); wallOrRoad[i][j]、repaint(); } } } public void setRoadImage(File f){ roadImage=f; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(wallOrRoad[i][j]、getIsRoad()) wallOrRoad[i][j]、setRoadImage(roadImage); wallOrRoad[i][j]、repaint(); } } } public HandleMove getHandleMove(){ return handleMove; } } //WallOrRoad类 import javax、swing、*; import java、awt、*; import javax、swing、border、*; import java、io、*; public class WallOrRoad extends JPanel{ boolean isRoad,isWall,isEnter,isOut,havePassed; MazePoint point; ; Toolkit tool; WallOrRoad(){ tool=getToolkit(); } public void setIsEnter(boolean boo){ isEnter=boo; if(isEnter==true) add(new JLabel("入口"));//定义迷宫得入口 } public boolean getIsEnter(){ return isEnter; } public void setIsOut(boolean boo){ isOut=boo; if(isOut==true) add(new JLabel("出口"));//定义迷宫得出口 } public boolean getIsOut(){ return isOut; } public void setIsRoad(boolean boo){ isRoad=boo; if(isRoad==true){ setBorder(null);//置此组件得边框,无 } } public boolean getIsRoad(){ return isRoad; } public void setIsWall(boolean boo){ isWall=boo; if(isWall==true) setBorder(new SoftBevelBorder(BevelBorder、RAISED));/* SoftBevelBorder就是实现某种斜面得类,这种斜面要么凸出要么凹入且拐角圆滑,BevelBorder该类实现简单得双线斜面边框,RAISED:凸出斜面类型。*/ } public boolean getIsWall(){ return isWall; } public void setAtMazePoint(MazePoint p){ point=p; } public MazePoint getAtMazePoint(){ return point; } public void setWallImage(File f){ wallImage=f; } public void setRoadImage(File f){ roadImage=f; } public void setPassed(boolean b) { havePassed=true; } public void paintponent(Graphics g){ super、paintponent(g); int w=getBounds()、width; int h=getBounds()、height; try{ if(isRoad==true){ Image image=tool、getImage(roadImage、toURI()、toURL()); g、drawImage(image,0,0,w,h,this); } else if(isWall=true){ Image image=tool、getImage(wallImage、toURI()、toURL()); g、drawImage(image,0,0,w,h,this); } } catch(Exception exp){} } } //MazePoint类 public class MazePoint{ int x,y; boolean haveWallOrRoad; WallOrRoad wallOrRoad=null; public MazePoint(int x,int y){ this、x=x; this、y=y; } public boolean isHaveWallOrRoad(){ return haveWallOrRoad; } public void setIsWallOrRoad(boolean boo){ haveWallOrRoad=boo; } public int getX(){ return x; } public int getY(){ return y; } public boolean equals(MazePoint p){ if(p、getX()==this、getX()&&p、getY()==this、getY())/*如果MazePoint得对象p得x、y值与上面返回得x、y值相同,则返回true,否则返回false*/ return true; else return false; } public void se
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服