




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/MazeWindow 主类import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.Hashtable;import javax.swing.filechooser.*;public class MazeWindow extends JFrame implements ActionListener Maze maze; JMenuBar bar;/声明菜单条对象 JMenu menuChoice,menuImage,hero;/声明菜单对象 JMenuItem wallImage,roadImage,defaultImage,playerImage1,heroItem,heroclear;/声明菜单项对象 File mazeFile,wallImageFile,roadImageFile; 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() wallImageFile=new File(wall.gif); roadImageFile=new File(road.jpg); bar=new JMenuBar();/创建菜单条对象 menuChoice=new JMenu(选择迷宫); File dir=new File(.); file=dir.listFiles(new FilenameFilter() public boolean accept(File dir,String name) return name.endsWith(maze); ); mazeName=new Stringfile.length; for(int i=0;i file.length;i+) mazeNamei=filei.getName().substring(0, filei.getName().length()-5);/substring(截取的起始位置,截取的长度); for(int i=0;i mazeName.length;i+) JMenuItem item=new JMenuItem(mazeNamei); item.addActionListener(this); menuChoice.add(item); mazeFile=new File(file0.getName(); currentMap=mazeName0; 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-5bar.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;ifile.length;i+) hashtable.put(mazeNamei+1,mazeNamei+#+100+#匿名1); hashtable.put(mazeNamei+2,mazeNamei+#+100+#匿名2); hashtable.put(mazeNamei+3,mazeNamei+#+100+#匿名3); if(!英雄榜.exists() /英雄榜是File类对象; boolean exists() 测试此抽象路径名表示的文件或目录是否存在。 try FileOutputStream out=new FileOutputStream(英雄榜); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(hashtable); /void writeObject(Object obj) 将指定的对象写入 ObjectOutputStream。 objectOut.close(); /void close() 关闭流。 out.close(); /java.io 类 FileOutputStrea的方法 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.setMazeFile(mazeFile); maze.person.setImage(player); add(maze,BorderLayout.CENTER); add(maze.getHandleMove(),BorderLayout.NORTH); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=roadImage) JFileChooser chooser=new JFileChooser();/文件对话框 FileNameExtensionFilter filter=new FileNameExtensionFilter( JPG&GIF Images,jpg,gif); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) roadImageFile=file; maze.setRoadImage(roadImageFile); else if(e.getSource()=wallImage) JFileChooser chooser=new JFileChooser(); FileNameExtensionFilter filter=new FileNameExtensionFilter( JPG&GIF Images,jpg,gif); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) wallImageFile=file; maze.setWallImage(wallImageFile); else if(e.getSource()=playerImage1) JFileChooser chooser=new JFileChooser(); FileNameExtensionFilter filter=new FileNameExtensionFilter( JPG&GIF Images,jpg,gif); chooser.setFileFilter(filter); int state=chooser.showOpenDialog(null); File file=chooser.getSelectedFile(); if(file!=null&state=JFileChooser.APPROVE_OPTION) player=file.getName(); maze.person.setImage(player); else if(e.getSource()=defaultImage) wallImageFile=new File(wall.gif); roadImageFile=new 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 f=new 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(); mazeFile=new File(item.getText()+.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 File mazeFile; MazePoint mazePoint; WallOrRoad wallOrRoad; PersonInMaze person; HandleMove handleMove; File wallImage,roadImage; 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 setMazeFile(File f) mazeFile=f; char a; RandomAccessFile in=null; String lineWord=null; try in=new RandomAccessFile(mazeFile,r); /创建RandomAccessFile类的只读对象 /*RandomAccessFile是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了*/ long length=in.length(); long position=0; in.seek(position); while(position=n) n=str.length(); position=in.getFilePointer(); m+; a=new charmn; position=0; in.seek(position); m=0; while(positionlength) String str=in.readLine(); am=str.toCharArray(); position=in.getFilePointer(); m+; in.close(); wallOrRoad=new WallOrRoadmn; for(int i=0;im;i+) for(int j=0;jn;j+) wallOrRoadij=new WallOrRoad(); if(aij=1) wallOrRoadij.setIsWall(true); wallOrRoadij.setWallImage(wallImage); wallOrRoadij.repaint(); else if(aij=0) wallOrRoadij.setIsRoad(true); wallOrRoadij.setRoadImage(roadImage); wallOrRoadij.repaint(); else if(aij=*) wallOrRoadij.setIsEnter(true); wallOrRoadij.setIsRoad(true); wallOrRoadij.repaint(); else if(aij=#) wallOrRoadij.setIsOut(true); wallOrRoadij.setIsRoad(true); wallOrRoadij.repaint(); mazePoint=new MazePointmn; int Hspace=distance,Vspace=distance; for(int i=0;im;i+) for(int j=0;jn;j+) mazePointij=new MazePoint(Hspace,Vspace); Hspace=Hspace+distance; Hspace=distance; Vspace=Vspace+distance; for(int i=0;im;i+) for(int j=0;jn;j+) add(wallOrRoadij); wallOrRoadij.setSize(distance,distance); wallOrRoadij.setLocation(mazePointij.getX(),mazePointij.getY(); wallOrRoadij.setAtMazePoint(mazePointij); mazePointij.setWallOrRoad(wallOrRoadij); mazePointij.setIsWallOrRoad(true); if(wallOrRoadij.getIsEnter() person.setAtMazePoint(mazePointij); add(person); person.setSize(distance,distance); person.setLocation(mazePointij.getX(),mazePointij.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;im;i+) for(int j=0;jn;j+) if(wallOrRoadij.getIsWall() wallOrRoadij.setWallImage(wallImage); wallOrRoadij.repaint(); public void setRoadImage(File f) roadImage=f; for(int i=0;im;i+) for(int j=0;jn;j+) if(wallOrRoadij.getIsRoad() wallOrRoadij.setRoadImage(roadImage); wallOrRoadij.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; File wallImage,roadImage,personImage; 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 paintComponent(Graphics g) super.paintComponent(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 setWallOrRoad(WallOrRoad obj) wallOrRoad=obj; public WallOrRoad getWallOrRoad() return wallOrRoad; /PersonInMaze类import javax.swing.*;import java.awt.*;import javax.swing.filechooser.*;import java.io.*;public class PersonInMaze extends JTextField MazePoint point; Toolkit tool; String person=person1.gif; PersonInMaze() tool=getToolkit(); /获得工具包 setEditable(false);/不可见 setBorder(null);/无边框 setOpaque(false);/非透明的 setToolTipText(单击我,然后按键盘方向键);/提示信息,如图3-1所示。 public void setAtMazePoint(MazePoint p) point=p; public MazePoint getAtMazePoint() return point; public void paintComponent(Graphics g)/设置走迷宫者的图片 super.paintComponent(g); int w=getBounds().width; int h=getBounds().height; Image image=tool.getImage(person);/获得image图像 g.drawImage(image,0,0,w,h,this);/绘制image图像 public void setImage(String person) this.person=person;/HandleMove类import java.awt.event.*;import java.awt.*;import javax.swing.*;public class HandleMove extends JPanel implements KeyListener,ActionListener MazePoint p; int spendTime=0; javax.swing.Timer recordTime; JTextField showTime; Toolkit tool; String maze=MazeWindow.currentMap; /MazeWindow类创建一个对象指向curr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东湛江遂溪县第二轮招聘教师50人笔试模拟试题及答案解析
- 2025中国能建数科集团湖北楚韵储能科技公司招聘8人考试参考题库附答案解析
- 2025年甘肃省天水市张家川县招聘城镇公益性岗位工作人员76人考试参考题库附答案解析
- 年度工作总结报告范文2024年(3篇)
- 2025年高效砖厂经营权转让协议示例
- 毕业论文的任务书是什么
- 委托收款协议书模板
- 单位公务车辆定点维修协议
- 柴油机毕业论文
- 2025年土地出让合同代理协议书
- 部编(统编)版-小学语文六年级教科书培训-讲座课件
- 门卫24小时值班登记表
- 幼儿园大型器械玩具安全检查记录表
- 肩袖撕裂讲课课件
- 1药历20份教学1mck广州市妇女儿童医疗中心
- 医院学术委员会及工作职责制度的通知
- 比亚迪速锐智能钥匙系统维修手册
- 三节有机磷杀虫剂课件
- DB37∕T 5081-2016 住宅厨房卫生间排烟气系统应用技术规程
- CPK计算表格EXCEL模板
- 车工技师论文 细长轴的加工技术方法
评论
0/150
提交评论