Java课程设计走迷宫.doc

上传人:jian****018 文档编号:9008382 上传时间:2020-04-02 格式:DOC 页数:33 大小:1.72MB
返回 下载 相关 举报
Java课程设计走迷宫.doc_第1页
第1页 / 共33页
Java课程设计走迷宫.doc_第2页
第2页 / 共33页
Java课程设计走迷宫.doc_第3页
第3页 / 共33页
点击查看更多>>
资源描述
Java 语 言 与 面 向 对 象 技 术 课 程 设 计 报 告 2014 2015 年度第 1 学期 走迷宫 目 录 目 录 2 1 概 述 1 1 1 课程设计目的 1 1 2 课程设计内容 1 2 系统需求分析 2 2 1 系统目标 2 2 2 主体功能 2 2 3 开发环境 3 3 系统概要设计 3 3 1 系统的功能模块划分 3 3 2 系统流程图 4 4 系统详细设计 6 4 1 系统的主界面设计 6 4 2 MAZE 的设计 7 4 3 PERSONINMAZE 的设计 8 4 4 WALLORROAD 的设计 8 4 5 MAZEPOINT 的设计 9 4 6 SOUND 的设计 10 4 7 RECORD 的设计 10 5 测试 11 5 1 测试方案 11 5 2 测试结果 11 6 小结 16 参考文献 17 附录 1 源程序清单 18 走迷宫的设计 1 概 述 1 1 课程设计目的 1 加深对 Java 语言与面向对象技术 课程基础知识的理解 掌握 Java 语 言面向对象程序设计的开发方法和步骤 2 进一步理解面向对象程序设计的思想和方法 利用 Java 语言进行程序设 计的能力 3 课程设计将课本上的理论知识和实际应用相结合 锻炼学生发现问题 分 析问题和解决问题的能力 加强学生研发 编写 调试程序的能力 4 培养学生在项目开发中团队合作精神 创新意识及能力 5 提高学生科技论文写作能力 规范完成课程设计报告 1 2 课程设计内容 设计 GUI 界面的走迷宫游戏 游戏的目的是让走迷宫者从迷宫的入口处进从 迷宫出口处出 具体内容如下 1 程序根据文本文件生成迷宫 这些文本文件称作迷宫文件 迷宫文件的扩 展名为 maze 其中的文本内容有着特殊的组织结构 任意两行文本所含有的字符 个数必须相同 而且字符只可以是 0 或 1 迷宫文件中的 和 分别代表迷宫的入口和出口 0 和 1 分别代表迷宫中的 路 和 墙 例如 迷宫文件 中等迷宫 maze 所生成的迷宫如图 1 1 所示 中等迷宫 maze 文件 000000101000101001010 010010100010100001010 00001010100010100101 010001000100000101010 00101000101011010010 101000010100000010001 010101001001101010010 101000100011101001010 001010100101010100100 图 1 1 中等迷宫界面 2 用户可以通过界面上提供的菜单选项 选择 迷宫文件 来生成对应的 迷宫类型 3 用户可以通过界面上提供的菜单选项 选择迷宫中的 墙 和 路 的 外观图像以及默认 墙 和 路 的图像 同时用户也可以更改迷宫中 走迷宫 者 的图像 4 当用户开始玩游戏时想重新开始 用户可以随时单击界面上下方图片位 置提供的按钮 重新开始走迷宫 5 本程序还具有音乐播放的功能 当用户成功移动走迷宫者后 程序播放 简短的一声音乐 6 本迷宫程序增加 英雄榜 功能既排名功能 当用户成功将迷宫中的走 迷宫者从入口移动到出口 如果成绩能排进前三名 就弹出一个对话框 将用户 的成绩保存到 英雄榜 中 并且可以查看 英雄榜 以及删除 英雄榜 2 系统需求分析 2 1 系统目标 设计一个基于 java 的走迷宫小游戏 游戏的结果是让走迷宫者从迷宫的入口 处走到迷宫的出口处 根据已有的走迷宫小游戏进行新功能的增加 2 2 主体功能 1 玩家可以任意选择不同的迷宫图进行走迷宫游戏 2 玩家可以自定义玩家头像 墙的图像以及路的图像 3 游戏进行时可以点击提示按钮重新开始游戏 4 根据玩家所玩的记录进行排行榜设置 分别列出保存各类型迷宫 简单 迷宫 中等迷宫 复杂迷宫 的前三名 玩家完后可以点击英雄榜自行查看 5 玩家可以清除英雄榜并且重新载入游戏 2 3 开发环境 Eclipse 3 系统概要设计 3 1 系统的功能模块划分 1 系统的总体设计 在设计走迷宫时 需要编写 6 个 java 源文件 MazeWindow java Maze java WallOrRoad java MazePoint java PersonInMa ze java HandleMove java Record java ShowRecord java 和 Sound java 走 迷宫除了上述 6 个 java 源文件所给出的类外 还需要 Java 系统提供的一些重要 的类 如 JmenuItem 和 File 等类 走迷宫所用到的一些重要的类以及之间的组合 关系如下图所示 图 3 1 各类之间的关系 2 系统模块划分 本系统主要有以下几个功能模块 创建走迷宫的主窗口 创建迷宫 创建墙 和路及确定位置的对象 创建走迷宫者 创建处理键盘事件对象 创建英雄榜及 显示英雄榜 该软件主要组成模块和各个模块之间的调用关系如下图所示 MazelWindow Maze PersonInMazeHandleMoveRecord ShowRecordSound File JMenuItemWallOrRoadMazePoint 创建迷宫 创 建 主 窗 口 编 写 迷 宫 文 件 创 建 墙 创 建 路 确定 墙和 路的 位置 创建 走迷 宫者 创建处 理键盘 事件对 象 创建及 显示英 雄榜 图 3 2 功能模块图 3 2 系统流程图 玩家开始打开界面进行游戏 通过菜单选项选择简单 中等 复杂迷宫中的 一种进行游戏 开始的界面各个图像是程序默认的图像 玩家也可以根据自己的 喜好自行选择文件夹里的图像来设置墙的图像 路的图像以及走迷宫者的图像 然后玩家根据提示点击走迷宫者开始游戏 玩家通过对键盘的操作来控制走迷宫 者 使其从入口进入从出口出来 在玩的期间如果玩家在十秒内没能从出口出来 则玩家的图像会变成猪的图像 游戏结束后如果玩家破纪录则根据提示进入英雄 榜 同时可以查看英雄榜 玩家还可以清除英雄榜重新打开界面进行游戏 具体 活动流程图如下所示 像像像像 中中 中中 中中像像 像 中中中 像像像 像像中中 中中像像 像中中中 像像 像像 图 3 3 活动流程图 4 系统详细设计 4 1 系统的主界面设计 1 成员变量 maze 是 Maze 类声明的对象 用来刻画迷宫 是 MazeWindow 类中最重要的成 员之一 MazeWindow 类根据迷宫文件 即根据该类中的 mazeFile 来创建 maze 对 象 bar 是 JMenuBar 创建的菜单条 用来添加菜单 bar 被放置在窗口的顶部 menuChoice 是 JMenu 创建的菜单 其名字为 选择迷宫文件 menuChoice 和 menuImage 被添加到菜单条 bar 中 wallImage roadImage 和 defaultImage 是 JMenuItem 创建的菜单项 名字 依次为 墙的图像 路的图像 和 墙和路的默认图像 这三个菜单项被添加 到菜单 menuImage 中 wallImage roadImage 和 defaultImage 都将当前窗口注册 为自己的 ActionEvent 事件监控器 mazeFile wallImageFile 和 roadImageFile 是 File 的对象 其中 mazeFile 用来存放迷宫文件的引用 而 wallImageFile 和 roadImageFile 分别用来存放迷 宫中 墙 和 路 的外观图像文件的引用 renew 是 JButton 创建的按钮对象 名字为 重新开始 Renew 将当前窗口 注册为自己的 ActionEvent 事件监控器 2 方法 MazeWindow 是构造方法 负责完成窗口的初始化操作 其重要的操作之 一是 读取当前目录中扩展名为 maze 的迷宫文件 并根据迷宫文件的名字创建 JMenuItem 菜单项添加到 menuChoice 菜单中 然后将当前窗口注册为每个菜单上 的 ActionEvent 事件监控器 另外 该构造方法在执行过程中 将 mazeFile 初始 化为 menuChoice 菜单中的第一个菜单项所代表的迷宫文件 并根据该迷宫文件创 建 MazeWindow 窗口中的 maze 对象 该构造方法还对 wallImageFile 和 roadImageFile 进行了初始化 并指定迷宫中 墙 和 路 所使用的默认图像 init 方法根据迷宫文件初始化 maze 对象 完成必要的初始化操作 actionPerformed ActionEvent 方法是 MazeWindow 类实现的 ActionListener 接口中的方法 MazeWindow 类创建的窗口时 menuChoice 菜单和 menuImage 菜单中的菜单项以及 renew 按钮上的 ActionEvent 事件监控器 当用户 选中某个菜单项或单击按钮时 窗口将执行 actionPerformed ActionEvent 方 法进行想应得操作 如果用户选中 menuChoice 菜单中的某个菜单项 即用户选择 了一个迷宫文件 actionPerformed ActionEvent 方法所执行的操作就是改变 mazeFile 所引用的迷宫文件 然后调用 init 方法 如果用户选中 menuImage 菜单中的 wallImage 或 roadImageFile 菜单项时 actionPerformed ActionEvent 方法所执行的操作就是分别改变 wallImage 和 roadImage 所引用的图像文件 从而让 maze 对象改变 墙 或路的图像 如果用 户选中 menuImage 菜单中的 defaultImage 菜单项 actionPerformed ActionEvent 方法所执行的操作就是将 wallImage 和 roadImageFile 所引用的图像文件恢复到默认设置 并让 maze 对象恢复 墙 或 路 的默认图像 当用户单击 rennew 按钮时 actionPerformed ActionEvent 方法所进行的操作时保持当前的 mazeFile 所引 用的迷宫文件 并执行 init 方法 main String 方法是程序运行的入口方法 3 主界面效果图如下图所示 图 4 1 主界面图 4 2Maze 的设计 1 成员变量 mazeFile 是 File 类声明的对象 用来存放迷宫文件的引用 mazePoint 是 MazePoint 类型的二位数组 其单元为 MazePoint 类创建的对象 用来确定 墙 和 路 以及 走迷宫者 的位置 即确定 WallOrRoad 以及 PersonInMaze 对象在 maze 对象中的位置 wallOrRoad 是 WallOrRoad 类型的二维数组 七单元为 WallOrRoad 类索川江 的对象 用来表示迷宫中的 墙 或 路 person 是 PersonInMaze 类创建的对象 用来表示迷宫中的 走迷宫者 handleMove 是 HandleMove 类创建的对象 负责处理 person 对象上的键盘事 件 wallImage 和 roadImage 是 File 类声明的对象 用来存放绘制 墙 和 路 的外观的图文件的引用 distance m 和 n 是 int 型数据 mazePoint 对象根据 distance 的值来进行 初始化 以便确定 mazePoint 对象之间的距离 m 和 n 的值是二维数组 mazePoint 的行数和列数 2 方法 maze 是构造方法 负责创建 maze 对象 maze 对象调用 setmazeFile File 方法可根据参数指定的迷宫文件完成必 要的初始化 例如 创建 mazePoint 和 wallOrRoad 数组等 maze 对象调用 setWallImage File 方法可以设置 wallImage 文件对象 maze 对象调用 setRoadImage File 方法可以设置 roadImage 文件对象 maze 对象调用 getHandleMove 返回到 handleMove 对象 3 根据编写的简单迷宫文件所显示的迷宫图像如下图所示 图 4 2 简单迷宫图像 4 3PersonInMaze 的设计 1 效果图 PersonInMaze 创建的对象效果如图所示 图 4 3 走迷宫者图像 2 类的主要成员变量和方法 成员变量 point 是 MazePoint 型对象 用来确定 PersonInMaze 对象在 Maze 所创建的迷 宫容器的位置 tool 是 Toolkit 对象 用来获得 Inage 对象 方法 MazePoint 是构造方法 负责完成 MazePoint 对象的初始化 PersonInMaze 对象调用 setAtMazePoint MazePoint 方法设置自己所在的 点 即设置属性 point 的对象引用 PersonInMaze 对象电影 getAtMazePoint 返回自己所在的 点 即返回 point 对象的引用 PersonInMaze 对象调用 painTComponent Graphics 方法绘制图形 即绘制 tool 对象所获得的 Image 对象 4 4WallOrRoad 的设计 1 成员变量 isRoad isWall isEnter 和 isOut 是 boolean 型数据 取值为 true 或 false 分别用了表示 WallOrRoad 对象是否为 路 墙 入口 和 出口 point 是 MazePoint 型对象 用来确定 WallOrRoad 对象在 Maze 所创建的迷宫 容器中的位置 wallImage 和 roadImage 是 File 类型的对象 用来确定 WallOrRoad 对象上所 绘制的图像文件 tool 是 Toolkit 型对象 负责创建 Image 对象 2 方法 WallOrRoad 是构造方法 负责完成 WallOrRoad 对象的初始化 WallOrRoad 对象调用 setIsEnter boolean 方法设置自己是否为迷宫的 入口 WallOrRoad 对象调用 getIsEnter 方法判断自己是否为迷宫的 入口 即返回 isEnter 属性的值 WallOrRoad 对象调用 setIsOut boolean 方法设置自己是否为迷宫的 出 口 WallOrRoad 对象调用 getIsOut 方法判断自己是否为迷宫的 出口 即 返回 isOut 属性的值 WallOrRoad 对象调用 setIsRoad boolean 方法设置自己是否为迷宫的 路 WallOrRoad 对象调用 getIsRoad 方法判断自己是否为迷宫的 路 即返 回 isRoad 属性的值 WallOrRoad 对象调用 setIsWall boolean 方法设置自己是否为迷宫的 墙 WallOrRoad 对象调用 getIsWall 方法判断自己是否为迷宫的 墙 即返 回 isWall 属性的值 WallOrRoad 对象调用 setAtMazePoint MazePonit 方法设置自己所在的 点 及设置 point 对象的引用 WallOrRoad 对象调用 getAtMazePoint 方法返回到自己所在的 点 即 返回 point 对象的引用 WallOrRoad 对象调用 setWallImage File 方法设置 wallImage 文件对象 WallOrRoad 对象调用 setRoadImage File 方法可以设置 roadImage 文件对 象 WallOrRoad 对象调用 paintComponent Graphics 方法绘制图像 即绘制 tool 对象根据 roadImage 或 wallImage 文件所见获得的 Image 对象 4 5MazePoint 的设计 1 效果图 MazePoint 创建的对象负责确定 WallOrRoad 对象和 PersonInMaze 对象在 Maze 容器中的所在位置 MazePoint 创建的对象没有可现实的效果图 2 类的主要成员变量和方法 1 成员变量 x 和 y 是 MazePoint 对象中的两个 int 型数据 分别用来表示容器坐标系中的 x 轴坐标和 y 轴坐标值 havaWallOrRoad 是 boolean 型数据 如果有 WallOrRoad 对象在该 MazePoint 对象上时 haveWallOrRoad 的值是 true 否则为 false wallOrRoad 是 WallOrRoad 类声明的对象 用来存放一个 WallOrRoad 对象的 引用 表明该 WallOrRoad 对象在当前 MazePoint 对象上 2 方法 MazePoint int int 是构造方法 用来创建 MazePoint 对象 MazePoint 对象上是否有 WallOrRoad 对象 isHaveWallOrRoad 方法返回 true 否则返回 false MazePoint 对象调用 setIsWallOrRoad boolean 方法可以根据参数的值设 置当前 MazePoint 对象上是否有 WallOrRoad 对象 MazePoint 对象调用 getX 和 getY 方法可以返回其中的 x 轴坐标和 y 轴坐标 MazePoint 对象调用 equls TowerPoint 方法可以判断当前 MazePoint 对象 是否和参数指定的 MazePoint 对象相同 Point 对象调用 setWallOrRoad WallOrRoad 方法 将参数指定的 WallOrRoad 对象放置在当前 MazePoint 对象上 Point 对象调用 getWallOrRoad 方法可以返回当前 MazePoint 对象上的 WallOrRoad 对象 4 6Sound 的设计 1 成员变量 AudioClip 声明对象 aau String 类声明 soundname 确定铃声的名字 设定 boolean 型的对象 b 初始值为 false 2 方法 makeSound String soundname 制作铃声 setSound String soundname 设置 铃声 stop 使铃声停止 boolean isPlaying 判断铃声是否播放 4 7Record 的设计 1 成员变量 Time 为时间 设定其初始值为 0 Maze 为 String 类声明的对象 用来确定人物所处的迷宫 message 用来输出 信息 textName 为 JTextField 声明的对象 用来设置文本名称 label 为 Label 声明的对象 其值为空 Jbutton 声明两个对象 分别为确定 取消 2 方法 Record 方法用来记录成绩 setMaze String maze 用来设置迷宫类型 actionPerformed ActionEvent e 用来记录走迷宫者的表现 isBrokenRecord String key int time 在 HandleMove 中调用 key 是迷宫名 此 方法用来判断是否破纪录了 writeRecord String key String message key 是 迷宫文件名 message 是记录地图名 时间 用户名的字符串 写下记录 3 记录英雄榜效果图如下所示 图 4 4 记录成绩效果图 5 测试 5 1 测试方案 首先打开游戏查看游戏的主界面是否符合要求 然后根据提示开始进行游戏 根据菜单栏选项任意选择一种迷宫游戏看是否根据自己的选择而改变 点击菜单 栏墙和路的图像选择默认的图像检查是否跟代码编写时设置相同 然后根据自己 喜好选择不同的图片作为墙和路的背景 开始游戏根据提示点击走迷宫者图像开有游戏 检查键盘方向键是否控制走 迷宫者走的方向 根据键盘的上下左右的控制是否会分别四种不同的声音发出 检测是否遇到墙就不能走 当走迷宫者在迷宫内十秒内还没有走出看走迷宫者的 图像是否变成猪的图像 当玩家走出迷宫破纪录是否记录个人信息 检查英雄榜 是否真有前三名的成绩 清空英雄榜重新开始游戏查看英雄榜是否真的被清空 5 2 测试结果 1 选择迷宫种类的测试 在原文件内编写不同三种迷宫文件 在主界面中根据选择会出现不同的迷宫 如下图所示 图 5 1 中等迷宫图像 图 5 2 复杂迷宫图像 图 5 3 简单迷宫图像 2 迷宫图片的设置测试 以上的图像都是默认的图像 玩家可以更改墙 路以及走迷宫者的图像 在 玩家玩超过十秒还没出来的时候走迷宫者会变成猪的头像 点击窗口下方可重新 开始游戏 图 5 4 选择图片是打开的文件 图 5 5 修改路 墙走迷宫者后的迷宫图像 3 开始游戏的测试 玩家根据提示点击走迷宫者进行游戏同时开始计时 用键盘上 下 左 右 键控制走迷宫者开始走迷宫 只有从入口进从出口处出来游戏才结束 如果在迷 宫内时间超过十秒钟则走迷宫者的图像变成猪的图像 图 5 6 开始游戏的界面 图 5 7 游戏超过十秒走迷宫者的图像变化 图 5 8 上图有小人图像按钮为重新开始按钮 4 破纪录记录成绩的测试 玩家通过迷宫后程序会根据玩家的成绩做出不同响应 并把玩该种迷宫成绩 的前三名列入英雄榜 图 5 9 游戏完成超过十秒界面 图 5 10 闯关成功界面 图 5 11 记录成绩界面 图 5 12 查看英雄榜界面 6 小结 走迷宫的游戏功能已经基本实现 在此次课程设计过程中 我遇到了一些问 题在程序中各类的反复关联和依赖关系让类与类之间的关系复杂 不是能很好的 把握 这样对游戏的实现造成了一定的麻烦 通过向同学请教渐渐地摸索了一些 而当把各个类都编写完之后 程序运行不起来 当时觉得很困惑 明明自己编写 的类已经没什么差错 可就是运行不起来有点小郁闷 再经同学指点发现原来是 一些必要的文件的存放路径不对 当一切都整合完毕之后 程序运行起来了 这 让我十分开心 同时我也意识到团队合作的重要性 个人的力量在某些方面是有 限的 而一个团队的智慧是无穷大的 通过这次 走迷宫 的课程设计更让我意识到了理论与事件结合的在重要性 只有理论知识是完全不够的 我们还要学会将它运用到实践中 用它来实现我们 所要做的项目 亲身的实践让我们对理论知识的一些难点和不懂的地方有了更好 地理解与认识 希望以后能有更多的机会动手来进行操作 参考文献 1 耿祥义 张跃平 Java2 实用教程 第三版 M 北京 清华大学出版社 2006 2 耿祥义 Java 课程设计 第三版 M 北京 清华大学出版社 2004 3 张跃平 Java2 实用教程实验指导与习题解答 第三版 M 北京 清华大学 出版社 2004 附 录 附录 1 源程序清单 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 人 jpg ShowRecord showRecord ShowRecord类 创建一个类对象 File 英雄榜 new File 英雄榜 txt File file null static String mazeName static String currentMap Hashtable hashtable null 哈希表 英雄榜 MazeWindow wallImageFile new File 墙 jpg roadImageFile new File 路 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 String file length for int i 0 i file length 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 mazeFile new File file 0 getName currentMap mazeName 0 init menuImage new JMenu 选择墙和路的图像 wallImage new JMenuItem 墙的图像 创建菜单项对象 roadImage new JMenuItem 路的图像 playerImage1 new JMenuItem 玩家的图像 defaultImage new JMenuItem 墙和路的默认图像 menuImage add wallImage 菜单项添加到菜单上 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 菜单添加到菜单条上 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 人 jpg 为 重新开始 按钮添加监听器 Font font new Font 楷体 Font BOLD 30 renew setFont font renew setVerticalAlignment SwingConstants TOP renew addActionListener this add maze BorderLayout CENTER 默认布局 add renew BorderLayout SOUTH hashtable new Hashtable for int i 0 i file length 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 FileOutputStream out new FileOutputStream 英雄榜 ObjectOutputStream objectOut new ObjectOutputStream out objectOut writeObject hashtable objectOut close void close 关闭流 out close catch IOException e showRecord new ShowRecord this mazeName length setVisible true setBounds 60 60 1012 890 validate setDefaultCloseOperation JFrame 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 chooser setFileFilter filter int state chooser showOpenDialog null File file chooser getSelectedFile if file null maze setRoadImage roadImageFile else if e getSource wallImage JFileChooser chooser new JFileChooser FileNameExtensionFilter filter new FileNameExtensionFilter JPG chooser setFileFilter filter int state chooser showOpenDialog null File file chooser getSelectedFile if file null maze setWallImage wallImageFile else if e getSource playerImage1 JFileChooser chooser new JFileChooser FileNameExtensionFilter filter new FileNameExtensionFilter JPG chooser setFileFilter filter int state chooser showOpenDialog null File file chooser getSelectedFile if file null maze person setImage player else if e getSource defaultImage wallImageFile new File 墙 jpg roadImageFile new File 路 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 HandleMove import java awt event import java awt import javax swing public class HandleMove extends JPanel implements KeyListener ActionListener MazePoint p p是MazePoint类型二维数组 用来存放Maze容器中数组引用 int spendTime 0 记录走迷宫者移动的时间 javax swing Timer recordTime 计时器 JTextField showTime 创建文本框 负责显示用时 Toolkit tool 负责调用beep 方法发出的声音 String maze MazeWindow currentMap MazeWindow类创建一个对象指向 currentMap 字符串 Sound sound int step HandleMove recordTime new javax swing Timer 1000 this 开始游戏计时 showTime new JTextField 16 设置计时时间可以容纳16个字符 tool getToolkit 工具对象 sound new Sound showTime setEditable false showTime setHorizontalAlignment JTextField CENTER showTime setFont new Font 楷体 GB2312 Font BOLD 16 JLabel hitMess new JLabel 单击走迷宫者 按键盘方向键 new ImageIcon 大白菜 jpg JLabel CENTER hitMess setFont new Font 楷体 GB2312 Font BOLD 18 add hitMess add showTime setBackground Color red 设置界面上面的图像字体 public void setMazePoint MazePoint point p point public void setMap String maze this maze maze public void initSpendTime 设置开始时间为0 recordTime stop spendTime 0 showTime setText null public void keyPressed KeyEvent e HandleMove类实现的KeyListener 接 口中的方法 主要判断用户是否已经成功地将走迷宫者移动到迷宫出口 recordTime start PersonInMaze person null person PersonInMaze e getSource int m 1 n 1 MazePoint startPoint person getAtMazePoint for int i 0 i p length i for int j 0 j10 person setImage 猪 jpg if e getKeyCode KeyEvent VK UP int k Math max m 1 0 if p k n getWallOrRoad getIsRoad 逻辑真时 走迷宫者不能 穿进墙 if sound isPlaying true sound stop sound makeSound walk wav person setAtMazePoint p k n person setLocation p k n getX p k n getY else if e getKeyCode KeyEvent VK DOWN int k Math min m 1 p length 1 if p k n getWallOrRoad getIsRoad if sound isPlaying true sound stop sound makeSound walk2 wav person setAtMazePoint p k n person setLocation p k n getX p k n getY else if e getKeyCode KeyEvent VK LEFT int k Math max n 1 0 if p m k getWallOrRoad getIsRoad if sound isPlaying true sound stop sound makeSound walk3 wav person setAtMazePoint p m k person setLocation p m k getX p m k getY else if e getKeyCode KeyEvent VK RIGHT int k Math min n 1 p 0 length 1 if p m k getWallOrRoad getIsRoad if sound isPlaying true sound stop sound makeSound walk4 wav person setAtMazePoint p m k person setLocation p m k getX p m k getY public void actionPerformed ActionEvent e spendTime showTime setText 您的用时 spendTime 秒 public void keyReleased KeyEvent e 显示用户的当前用时 PersonInMaze person PersonInMaze e getSource MazePoint endPoint person getAtMazePoint if endPoint getWallOrRoad getIsOut recordTime stop if spendTime 10 JOptionPane showMessageDialog this 恭喜您闯关成功 亲 但 用时超过10秒钟 速度慢了些哦 用时 spendTime 秒 消息框 JOptionPane INFORMATION MESSAGE else JOptionPane showMessageDialog this 恭喜您闯关成功 亲 用 时 spendTime 秒 消息框 JOptionPane INFORMATION MESSAGE Record record new Record if record isBrokenRecord maze spendTime true 判断是否破纪 录 record setMaze maze record setTime spendTime record setVisible true public void keyTyped KeyEvent e 键盘 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 狗 jpg PersonInMaze tool getToolkit 获得工具包 setEditable false 不可见 setBorder null 无边框 setOpaque false 非透明的 setToolTipText 单击我 然后按键盘方向键 提示信息 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 Record import java io import java util import javax swing import java awt event import java awt public class Record extends JDialog implements ActionListener int time 0 String maze String message JTextField textName JLabel label null JButton 确定 取消 public Record setTitle 记录你的成绩 setBounds 200 200 320 300 setResizable false setModal true 确定 new JButton 确定 取消 new JButton 取消 textName new JTextField 8 textName setText 匿名 确定 addActionListener this 取消 addActionListener this setLayout new GridLayout 2 1 label new JLabel 您现在是 高手 输入您的大名上榜啊 add label JPanel p new JPanel p add textName p add 确定 p add 取消 add p setDefaultCloseOperation JFrame HIDE ON CLOSE public void setMaze String maze this maze maze label setText 恭喜 你破纪录了 请输入您的名字 public void setTime int time this time time public void actionPerformed ActionEvent e if e getSource 确定 message maze time textName getText writeRecord maze message setVisible false if e getSource 取消 setVisible false public boolean isBrokenRecord String key int time 在HandleMove中调用 key是迷宫名 boolean b false File f new File 英雄榜 txt try int n 0 Hashtable hashtable null 构造一个哈希表 FileInputStream in new FileInputStream f ObjectInputStream object in new ObjectInputStream in hashtable Hashtable object in readObject object in close in close String temp3 String hashtable get key 3 返回此哈希表 中指定键所映射到的值 StringTokenizer fenxi new StringTokenizer temp3 fenxi nextToken n Integer parseInt fenxi nextToken if time n b true System out println 破纪录了 catch Exception e System out println e return b public void writeRecord String key String message key是迷宫文件名 message是记录地图名 时间 用户名的字符串 File f new File 英雄榜 txt try int n1 0 n2 0 n3 0 String a Hashtable hashtable null FileInputStream in new FileInputStream f ObjectInputStream object in new ObjectInputStream in hashtable Hashtable object in readObject object in close in close String temp1 String hashtable get key 1 String temp2 String hashtable get key 2 String temp3 String hashtable get key 3 StringTokenizer fenxi1 new StringTokenizer temp1 StringTokenizer fenxi2 new StringToken
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!