面向对象文档 班级:0111030 学号:20030008 姓名:孙永生
面向对象文档 班级:01110301 学号:20030008 姓名:孙永生
源码正确编译的条件,软件运行的环境要求: Java: jdk5 eclipse?30开发开发环境: windows xpo运行需要 java. re5支持 数据结构 People类的主要数据结构。 mage bigImage, biglmagel, biglmage 2, biglmage3, biglmage4 放四幅可以替换的人物的素材图片 int girlInMapX=l, girlInMapY=I ∥人物在地图格子上的定位 int girlEnterx-0, girlEntery=0; ∥人物在大背景上的初始定位 int girlsX-0, girls=0, picX=O, beginPic=9, nowPic: ∥人物在大背景上移动时的贴图定位 int girls Xa=20, girls Ya=0 辅助定位指令(看得不顺眼时对位置的调整) Map Func类的主要数据结构 int enter=200, entery=0y/地图开始的横纵坐标 int grid X=5 grid=5/地图格子数 int印maze= new int[30J[30/地图数组 Int enter=300, width=20/对25D斜角地图的定位 mage walll wal/25dD墙的壁纸 Image walll2,wall2∥2D墙的壁纸 Graphics gwl,gw2/2d墙画面 intw=106h=85/墙的大小 double wa=0.53ha=0175wb=049,hb=024/∥构建单个地图坐标的加权值(辛 辛苦苦的试出来的,得到教训,数学不好就是不行) ApplemAn类的主要数据结构。 Med ia Tracker mt∥监测图片的下载 boolean initbool== false; complete= false mouseclick;/状态参量 Map Func mapl/地图对象 People peoplel/人物对象 Image buffer;利用双缓冲是的缓存图片 Graphics buffer上面的缓存的操作 三.算法分析 这个程序中主要运用到的算法就是地图的动态生成算法 个地图的结构,利用上墙和右墙就可以表述。也就是说,地图的就是下图 的集合。 个的:
一. 源码正确编译的条件,软件运行的环境要求: java:jdk1.5,eclipse3.0 开发,开发环境:windows xp。运行需要 java:jre1.5 支持。 二. 数据结构 People 类的主要数据结构。 Image bigImage,bigImage1,bigImage2,bigImage3,bigImage4; //存放四幅可以替换的人物的素材图片 int girlInMapX=1,girlInMapY=1; //人物在地图格子上的定位 int girlEnterx=0,girlEntery=0; //人物在大背景上的初始定位 int girlsX=0,girlsY=0,picX=0,beginPic=9,nowPic; //人物在大背景上移动时的贴图定位 int girlsXa=20,girlsYa=0; //辅助定位指令(看得不顺眼时对位置的调整) MapFunc 类的主要数据结构。 int enterx=200,entery=0;//地图开始的横纵坐标 int gridX=5,gridY=5;//地图格子数 int[][] maze=new int[30][30];//地图数组 int enter=300,width=20;//对 2.5D 斜角地图的定位 Image wall1,wall2;// 2.5dD 墙的壁纸 Image wall12,wall22;//2D 墙的壁纸 Graphics gw1,gw2;//2d 墙画面 int w=106,h=85;//墙的大小 double wa=0.53,ha=0.175,wb=-0.49,hb=0.24;//构建单个地图坐标的加权值(辛 辛苦苦的试出来的,得到教训,数学不好就是不行) AppletMain 类的主要数据结构。 MediaTracker MT;//监测图片的下载 boolean initbool=false,complete=false,mouseclick;//状态参量 MapFunc map1;//地图对象 People people1;//人物对象 Image bufferI;//利用双缓冲是的缓存图片 Graphics buffer;//对上面的缓存的操作 三. 算法分析 这个程序中主要运用到的算法就是地图的动态生成算法。 一个地图的结构,利用上墙和右墙就可以表述。也就是说,地图的就是下图 的集合。 一个的:
多个的 ■■■■■■■■■■ ■■■■■ 这样的图,只需加画左,下两边,在加开出口,在加算法就可以成为2维地 图 铺垫完成,言归正传 存储地图用的是int30[30]的数组,用第四位来表示边界(java中我没看到2 进制怎么用……是1000B),用第三位表示已经设置过(0100B),用第二位 表示当前位置右边的墙存在(0010B),用第二位表示当前位置上边的墙存在 (0001B)。 主要思想:当我站在上图中的任意点,我都有四种方向可选,当我选定要进 入的新格子,就拆除旧格子与新格子之间的墙。此算法开始于左上角点,终 止于右下角点。 以图说明:
多个的: 这样的图,只需加画左,下两边,在加开出口,在加算法就可以成为 2 维地 图 铺垫完成,言归正传。 存储地图用的是 int[30][30]的数组,用第四位来表示边界(java 中我没看到 2 进制怎么用……是 1000B),用第三位表示已经设置过(0100B),用第二位 表示当前位置右边的墙存在(0010B),用第二位表示当前位置上边的墙存在 (0001B)。 主要思想:当我站在上图中的任意点,我都有四种方向可选,当我选定要进 入的新格子,就拆除旧格子与新格子之间的墙。此算法开始于左上角点,终 止于右下角点。 以图说明:
左上角(0,0)开始 断是不是最 结束 随机取(1,4)的数 代表不同方向 向右则将本格子的右 墙置空 判断不同方向 向上则将本格子的 墙置空 向左则将左面格子的 右墙置空 下则将下面格子的 上墙置空 四.UML描述系统: UseCase描述系统功能 对各用例的描述: 1.控制人物行动 取得地图冲突信息 f左键then 人物向左移动 elseif右键then 人物向右移动 elseif上键then 人物向上移动 lef下键then 人物向下移动 end if 重绘窗口内所有元素 2.控制 applet流程 if人点击鼠标then 开始游戏 endif f到达结尾或有换人请求then
左上角(0,0)开始 随机取(1,4)的数 代表不同方向 判断不同方向 向左则将左面格子的 右墙置空 向右则将本格子的右 墙置空 向上则将本格子的上 墙置空 向下则将下面格子的 上墙置空 判断是不是最后 一个格子 No 结束 四. UML 描述系统:UseCase 描述系统功能 对各用例的描述: 1.控制人物行动 取得地图冲突信息 if 左键 then 人物向左移动 elseif 右键 then 人物向右移动 elseif 上键 then 人物向上移动 elseif 下键 then 人物向下移动 endif 重绘窗口内所有元素。 2.控制 applet 流程: if 人点击鼠标 then 开始游戏 endif if 到达结尾或有换人请求 then
电脑决策者控制 ndif 3.对地图作用 f用户行动then 地图进行碰撞检测分析 反馈 end if 重绘界面上所有元素。 结束4 制人物行动 结束3 结束1 对地图作用 用户 结束7 控制 applet流程 电脑决策者 五.类图和包图
电脑决策者控制 endif 3.对地图作用 if 用户行动 then 地图进行碰撞检测分析 反馈 endif 重绘界面上所有元素。 控制人物行动 用户 控制applet流程 -结束1 * -结束2 * -结束3 * -结束4 * 电脑决策者 对地图作用 -结束5 * -结束6 * -结束7 * * -结束8 -结束9 * -结束10 * 五. 类图和包图
buffer tinto minigame(O) paint( Graphics g) +key Pressed(KeyEvent argOX Isopod +mouse Pressed(Mouse Event argo) 结束4 MapFunc wall r-girlIn MapY wall12 *initPeople(MapFune mapl)0 +paintPeople(Graphies g) also mainit(X heckwalk(int key, Map Fune map l)o +girlAnioo ageNt( paintmaze 25d( Graphics g People peoplel)O Ppaintmare2d(Graphics g, People peoplel Mo 此处画出的都是人为创建的类,继承系统的类没有画出来 AppletMain继承 Japplet 六.序列图,交互图和活动图 计划是设计一个可以点击鼠标创建不同的地图,键盘控制走地图的游戏。 序列图:对用户已开始单击鼠标引发的初始化部分进行分析。 用户,单击鼠标,作用于 Appleman, AppletMain初始化时,调用 People 和 MapFunc初始化
此处画出的都是人为创建的类,继承系统的类没有画出来。 AppletMain 继承 Japplet 六. 序列图,交互图和活动图 计划是设计一个可以点击鼠标创建不同的地图,键盘控制走地图的游戏。 序列图:对用户已开始单击鼠标引发的初始化部分进行分析。 用户,单击鼠标,作用于 AppletMain,AppletMain 初始化时,调用 People 和 MapFunc 初始化
用户 ApplemAn 主角 消息1 peopleL 消息3 消息5 活动图:
主角1 AppletMain people1 map1 用户 消息1 消息2 消息3 消息4 消息6 消息5 活动图:
下载图片 点击鼠标初始化 AppletMain 在迷宫中移动k 初始化游戏 是否走到迷宫结尾 再来一局 七.技术要点 1.地图算法 之前介绍了,这里不再赘言 2.双缓冲 当功能基本齐全之后,目标就变成了让运行效率增高以及让图片在刷新 时不会出现闪动情况。所以应用了双缓冲 造成闪烁的原因是,当绘制部件时, update函数内部执行的是先清空当 前区域,在进行 paint。在要重绘的图很多的时候,就会出现闪烁。多次 重绘是没有意义的 我改动了绘图的方法,其主要机制是new一个新的mage对象,把对于 绘图的改动都画在这个对象上,全部画完后,再贴到界面上去。这样就 不会出现在界面上反复贴图的情况,因为每回合只贴了一次。如果此时 重载类的 update方法,使它只进行重绘,是十分合适的,但是我没有贸
点击鼠标初始化AppletMain 下载图片 在迷宫中移动 初始化游戏 是否走到迷宫结尾 再来一局 七. 技术要点 1.地图算法 之前介绍了,这里不再赘言 2.双缓冲 当功能基本齐全之后,目标就变成了让运行效率增高以及让图片在刷新 时不会出现闪动情况。所以应用了双缓冲。 造成闪烁的原因是,当绘制部件时,update 函数内部执行的是先清空当 前区域,在进行 paint。在要重绘的图很多的时候,就会出现闪烁。多次 重绘是没有意义的。 我改动了绘图的方法,其主要机制是 new 一个新的 image 对象,把对于 绘图的改动都画在这个对象上,全部画完后,再贴到界面上去。这样就 不会出现在界面上反复贴图的情况,因为每回合只贴了一次。如果此时 重载类的 update 方法,使它只进行重绘,是十分合适的,但是我没有贸
然行事,因为可能以后还要用到与之相关的东西。 3.25D贴图 贴图面临的最大难关就是角度问题,创建图形时候不觉得什么,但是往 上贴的时候就困难了。不得以这两个墙壁图每个用了两个辅助变量,用 以调整图形的角度和位置。说不出什么算法,但却是很浪费时间。几个 辅助变量花了很久才对好。 4.人物与地图的镶嵌 人物与地图的镶嵌只重在一点,就是画上人物之后,人物会压到本身应 该在上层的东西,就是说,应该覆盖人物的反而被人物覆盖了 一开始我打算画好地图,再贴上人,再补贴被盖掉的地图。但是经过实 践,发现这样不行。我的立体图片连接非常紧密,重贴一张就要重贴 排,十分得不偿失感觉。 于是,决定把人物对象在绘地图的时候传给地图对象。成功是成功了 却带来了新的烦恼。感觉上类的独立性受到了很大的损害。 貌似现在就是这样: 请用键盘上下左右控制 5.碰撞检测:让地图重绘的时候对人物位置作检查 6.换人 游戏中支持四个人可以换。按F3可以换人。(注明:素材是私自提取的游戏 素材,不能用于商业目的) A) romauge:南国的舞女。 B) dallas:圣骑士
然行事,因为可能以后还要用到与之相关的东西。 3.2.5D 贴图 贴图面临的最大难关就是角度问题,创建图形时候不觉得什么,但是往 上贴的时候就困难了。不得以这两个墙壁图每个用了两个辅助变量,用 以调整图形的角度和位置。说不出什么算法,但却是很浪费时间。几个 辅助变量花了很久才对好。 4.人物与地图的镶嵌 人物与地图的镶嵌只重在一点,就是画上人物之后,人物会压到本身应 该在上层的东西,就是说,应该覆盖人物的反而被人物覆盖了。 一开始我打算画好地图,再贴上人,再补贴被盖掉的地图。但是经过实 践,发现这样不行。我的立体图片连接非常紧密,重贴一张就要重贴一 排,十分得不偿失感觉。 于是,决定把人物对象在绘地图的时候传给地图对象。成功是成功了, 却带来了新的烦恼。感觉上类的独立性受到了很大的损害。 貌似现在就是这样: 5.碰撞检测:让地图重绘的时候对人物位置作检查。 6.换人: 游戏中支持四个人可以换。按 F3 可以换人。(注明:素材是私自提取的游戏 素材,不能用于商业目的) A) romauge:南国的舞女。 B) dagllas:圣骑士
C)flea:酒店老板的女儿 D) ruven:冒险者 7.人物动作:(这个在正式版中没有加上,但是可行性尝试的时候实现了流 畅的人物走动)。具体技术如下图 g會gg會響粤劉導 读的时候要把一整幅图读进来。在进行左上方运动的时候,要先画第一张小 图,等待125毫秒,第二张,等待,第一张,等待,第三张。周而复始,就 实现了流畅动作。 八.开发过程外加心得 这次开发,重点就在可行性分析上。因为这几乎是我第一次用java开发,基 本上类库,方法都不熟悉。为什么要用java开发呢?因为我认为这样能够更 深的了解面向对象的思想。开发过程中一直没有离开《java编程思想》这本 书,遇到困难就去查。但是还有很多知识是在网上找到的。可能从20几号 开始,我从java的 helloworld开始学习,一路走得十分坎坷,就像是踩着一 个个困难过来的。语法倒不是很成问题,主要是以前没有接触过的结构 ( applet),没有写过的内容(图片动画和游戏控制)让人感觉很困难,最困 难的就是昨晚打包jar,查了很多资料,还是不行。不过反正是 applet,用ie 打开倒也不是很麻烦,劳烦您了。 我的可行性准备:第一步是贴图,很顺利 第二步,试图让图片动起来,并使用了多线程,成功 第三步,写平面的迷宫,改进了书上提示的算法 第四步,写鼠标响应的程序 第五步,写键盘响应的程序,成功 第六步,滚屏,失败,而且遇到了无法刷新界面的困难,(这 个问题出在我对java的按钮响应的作用范围,以及容器 panel的使用在头脑
C) flea:酒店老板的女儿 D) ruven:冒险者 7.人物动作:(这个在正式版中没有加上,但是可行性尝试的时候实现了流 畅的人物走动)。具体技术如下图: 读的时候要把一整幅图读进来。在进行左上方运动的时候,要先画第一张小 图,等待 125 毫秒,第二张,等待,第一张,等待,第三张。周而复始,就 实现了流畅动作。 八. 开发过程外加心得 这次开发,重点就在可行性分析上。因为这几乎是我第一次用 java 开发,基 本上类库,方法都不熟悉。为什么要用 java 开发呢?因为我认为这样能够更 深的了解面向对象的思想。开发过程中一直没有离开《java 编程思想》这本 书,遇到困难就去查。但是还有很多知识是在网上找到的。可能从 20 几号 开始,我从 java 的 helloworld 开始学习,一路走得十分坎坷,就像是踩着一 个个困难过来的。语法倒不是很成问题,主要是以前没有接触过的结构 (applet),没有写过的内容(图片动画和游戏控制)让人感觉很困难,最困 难的就是昨晚打包 jar,查了很多资料,还是不行。不过反正是 applet,用 ie 打开倒也不是很麻烦,劳烦您了。 我的可行性准备:第一步是贴图,很顺利。 第二步,试图让图片动起来,并使用了多线程,成功 第三步,写平面的迷宫,改进了书上提示的算法 第四步,写鼠标响应的程序 第五步,写键盘响应的程序,成功 第六步,滚屏,失败,而且遇到了无法刷新界面的困难,(这 个问题出在我对 java 的按钮响应的作用范围,以及容器 panel 的使用在头脑