版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江苏理工学院省级大学生创新训练计划项目研究总结一、项目研究背景及意义产业作为现代电脑电子技术的产物,正在以其独特的在全世界的娱乐领域占据主流地位,在成人广大网民的选择空间狭小的同时,也必须明确的一点就是本身所具有的强大的。的主要在于,它在让玩家打发时间的同时,可以让人在紧张的工作之余带来最大程度的放松,也可以增进人们之间的交流、沟通,通过还可以认识的朋友。现在小、下“走网页越来越受网民欢迎,除了玩的方法简单外(不像其他还需要之一。载繁琐过程),很多不乏经典。走迷宫也是经典的小迷宫”顾名思义就是从迷宫中走出去,走迷宫在网上基本是用在小中。选择用 J2ME 来实现迷宫的设计,主要是迷宫可以锻炼人的
2、思维,锻炼的协调能力,运用理论去处理问题的能力,实验能力,课程设计能力。 同时,此次开发是初步尝试使用基于 JAVA Web,利用 J2SE 的技术设计实现程序,这让更加了解 JAVA Web 在计算机领域和生活中的广泛应用,也为今后的 JAVA Web 学习打下良好基础。二、课题分工:项目规划、项目、系统设计、系统编码;月 :系统设计、系统编码、部分材料的编写;:系统设计、系统编码、检查程序提供意见工作。三、课题研究方法、步骤如图1所示是流程。开发的最基本的流程。本的开发亦遵循这个最基本的图1开发基本流程对照原定的考核指标,逐条说明实际完成情况计划进度:(1)2011 年 6 月7 月,制定
3、明细工作计划,梳理文献资料,整理文献综述;(2)2011 年 7 月8 月,设计与访谈;(3)2011 年 8 月10 月,对问卷,选取典型对象,开展结果进行统计分析,并撰写;(4)2011 年 10 月12 月,修改实施进度:,整个课题于 12 月完成。(1)在 6 月初,进行工作分配。然后大家在网上、文献,并且对文献中查找到的信息进行了系统的整理。馆找寻资料、搜集(2)7 月份,小组在暑期开始前由筹划了具体的调研方法和实施步骤月同学和同学负责问卷的制作和打印工作,并且各自在暑假期间进问卷,访谈获得了需要的各类资料。(3)小组成员在 8、9、10 这三个月中进行了资料的整理和数据分析,并完成
4、了初步的工作以及总结。(4)小组在 11、12 月中,跟老师及时交流,逐步完善于 12 月正式完成。四、课题研究的过程1 功能设计,整个课题(1)用户可以通过键盘来走迷宫的表情图像,当小人开始移动时,系统其走过的路线,并可以根据用户选择显示已经过的路线。(2)用户可以自行选择生成地图的大小,默认大小为 20*20.(3)用户每通过一关,后一关则自动2 数据库设计,否则用户无法进行下一关。首先有一个用户表。用来保存用户的信息。create table userinfo(userididentity(1,1) primary key,用户IduserName varchar(50) not nul
5、l,用户名us)ass varchar(50) not null 用户其次用户表。用来保存用户的信息。create table user_game_info(usergameid number stepNumgametimeidentity(1,1) primary key, UsergameId,/标识列not null, not null,not null,/等级/通过本关所走步数/通过本关所花的时间/用户IduserId)not null用户表和用户表之间存在主外键关系。alter table user_game_info add constra userinfo(userId);3 主
6、要类的设计与数据库交互的主要类有:fk_useridforeign key (userId) referenBase Base.java,User.java,UserGame.java。.java 主要用户与数据库建立连接,User.java 与数据库交互,用户信息(用户名,CreateGame 类介绍:),UserGame.java 类用于存放用户信息。public sic List getGames(List list)String numbers = 第一重,第二重,第三重,第四重,第五重 flag = false;String info = ;List games = new Arra
7、yList();for(i = 0;i5;i+)Game game = new Game();trygame.setGam(numbersi);info = 时间:+list.get(i).getGameTime()+游戏步数:+list.get(i).getStepNumber()+; game.setGameSrc(开始);catch(Exception e)if(flag)info = 尚未else/通过标记来判断下一关是否;info = 尚未通过;if(flag)game.setGameSrc(请先通过前面else game.setGameSrc(a href=mg/mg.jsp?w=
8、+(20*(i+1)+&ga戏);flag=true;);mber=+(i+1)+ 开 始 游CreateGame 类控制了的主页面.如图 2 所示:的开始,并是否进行下一关的标记,调用图 2主页面4 迷宫算法介绍(1)深度优先算法:将起点作为当前格并标记。当还存在未标记的格时如果当前格有未标记的邻格随机选择一个未标记的邻格,将当前格入栈,移除当前格与邻格的墙,标记邻格并用它作为当前格。反之,如果栈不空栈顶的格子出栈,令其成为当前格。反之,随机选择一个格子为当前格并标记。通俗的说,就是从起点开始随机走,走不通就原路返回,从下一个能走的地方再走。这一个迷宫是基于平面上的方格的,每一个格子有上、下
9、、左、右四个方向,每个方向上可能有墙(不能通过),也可能没墙(可以通过)。这样,每个格子实际上就有 16 种可能的状态,3 所示。用 0 15 来给每一种状态编一个号。如下图图 3 状态十进制对照注意,上面的并不是随意的。由于每个格子有四条边,每个边有两种状态(可通过与不可通过),如果用 0 表示某一条边不可通过,1 表示可通过,这样,四条边的状态就能组成一个四位的二进制数。把四条边按从上方开始按顺时针方向的上、右、下、左四个方向的状态分别代表二进制数的个、十、百、千位的话,得到的二进制数的十进制值就作为这个格子的。如图 4 所示。图 4 状态二进制对照这样做的好处:首先,只要用一个 0 15
10、 之间的数字就能表示某个格子的状态了,便于地数数据的。另外,更重要的是,对于任意一个格子,我们要判断它的某个方向是否可通过时,只需要做一个简单的按位与,看结果是否为 0 就可以了。如上面所说,的上、右、下、左四个方向分别代表这个二进制数的个、十、百、千位,即:上:0001,即十进制 1右:0010,即十进制下:0100,即十进制左:1000,即十进制248要判断某个格子(比如它的状态是 6)的上方是否可通过时,只要计算:6 & 1 = 0,可知上方不可通过,类似地,想知道它的右方是否可通过时,只要计算:6 & 2 = 2,可知右方可以通过。这样,当确定了迷宫地图的宽与高时,只需要一个简单的一维
11、数组,每一项的值为 0 15 之间的整数,就足以这个迷宫的地图信息,并且能很方便高效地判断每个格子某个方向的可通过性。确定了地图的表示方法,接下来就是怎么生成地图。在这个中,生成地图的方法比较简单:从某个格子开始,随机地遍历周边的未到达过的格子,如周边没有没到达过的格子了则后退一步,如地图上所有点都已到达则遍历完成,地图也就生成了。见下面的流程图。这个过程,实际上就相当于一个人先随机地在地图上走一遍,并且把他走过的地方标记为可通过。这样就保证了地图上每一个格子都是连通的(任意一个格子总有某一条路能到达),并且保证有且仅有一条路可以从起点连到终点(事实上,地图上任意两个格子之间都有且仅有一条路相
12、连)。最终生成的迷宫地图如图 7 所示:图 7 迷宫地图另外,这个算法生成的迷宫属于单连通迷宫,这类迷宫都有一个通用的简单解法“扶墙法”,即从起点开始,伸出一只手(左手右手都可以,看个人喜好)扶住墙壁,接下来就一直沿着这一边的墙走,无论转弯还是直走,都要保证这只手不要离开墙,这样虽然走的路线很可能不是最短的,但是能保证让你到达终点。只生成地图,显然趣味性还不够,于是我又添加了一个小头像,再用了一个jquery 的键盘事件插件(js-hotkeys)接收按键事件控制小头像的移动。(2)标注路线图 8 标注路线标示意图(3)提示图 9 当用无路可走时,给出提示图 10 当用户长期无反应时,给出提示
13、如图 10 所示图 9 中的笑脸变成了图 10 中的惊讶示,实现图 10 中表情变化的代码如下所示:function MG_Me(mg) this.mg = mg | null;,并且给出了相应的提this.= 0;this.history = 0;this.history2 this.isMoving this.lastMove this.finishedthis.emotions=0;false;new Date();false;/定义了几种不同表情的normal: mg/img/me.gif,happy: mg/img/me_happy.gif,unhappy: mg/img/me_un
14、happy.gif,surprised: mg/img/me_surprised.gif, tongue: mg/img/me_tongue.gif;if (this.mg) this.init();MG_Mtotype = init: function () var tmpOb =.createElement(div),tmpImg = tmpInfo =tmpSpan =.createElement(img),.createElement(div),.createElement(p),_this =tmpInfo.se tmpInfo.sethis;tribute(class,
15、inform);tribute(claame, inform);rmBox = tmpInfo; rmSpan = tmpSpan; tmpInfo.appendChild(tmpSpan);tmpOb.appendChild(tmpInfo);tmpImg.se this.meImg tmpOb.setmpOb.setribute(src, mg/img/me.gif);= tmpImg; tribute(class, me);tribute(claame, me);tmpOb.appendChild(tmpImg);tmpOb.style.width =
16、 this.mg.gridSize + px;tmpOb.style.height = this.mg.gridSize this.ob = tmpOb;this.mg.ob.appendChild(this.ob);+px;$.hotkeys.add(up, function () _this.move(0););$.hotkeys.add(right, function () _this.move(1););$.hotkeys.add(down, function () _this.move(2););$.hotkeys.add(left, function () _this.move(3
17、););setTimeout(function () if (_this.mg.isMoved) return;_rm(提示:您可以使用键盘上的上、下、左、右方向键控制移动。);, 3000);this.itvl = seterval(function () if (!_this.mg.isMoved) return; var now = new Date();if (now - _this.lastMove 10000) _rm(o?);_this.setEmotion(surprised);, 3000);this.setMark(1, this.mg.
18、markHistory);/this.setMark(2,this.mg.markHistory2);,move: function (d) /alert(i); i+;if (this.isMovingthis.mg.isMoved =| this.finished) return;true;var v = this.mg.gridsthis.if (v & Math.(2, d) ;if(d = 0)this.moveTo(this. (d = 1)this.moveTo(this. (d = 2)this.moveTo(this. (d = 3)this.moveTo(this.-thi
19、s.mg.w);if+1);if+this.mg.w);if-1);this.lastMove = new Date();,moveTo: function (p) this.isMoving = true; rm(); this.setEmotion(normal); this.history.unshift(p); if (this.mg.markHistory)this.mg.gridObthis.history0.sty#fcc;/*if (this.history20 = p) this.history2.shift(); else if (this.mg.mark
20、History2)ackgroundColor=this.mg.gridObthis.history20.styackgroundColor= #f99;this.history2.unshift(p);*/var x = p % this.mg.w,y = Math.floor(p / this.mg.w),top = y * this.mg.gridSize + px, left = x * this.mg.gridSize + px,_this = this;$(this.ob).animate(top: top, left: left, 100, , function () _this
21、.= p;_this.isMoving = false; var v = _this.mg.gridsp;if (p = _this.mg.grids.length - 1) clearTimeout(timerInstance);了下一重!O(_)O哈哈);alert(location.href=game.do?op=addUserGame&time=+time+&stepNumber=+i+&gamber=+number;/结束_rm(YEAH! 到终点啦!);_this.finished = true;_this.setEmotion(happy); clearerva
22、l(_this.itvl); else if (p != 0 & (v = 1 | v = 2 | v = 4 | v =8) _rm(哎呀,好像走进死胡同了!);_this.setEmotion(unhappy); else if (p = 0) _rm(咦,我怎么又回到起点了?);_this.setEmotion(surprised););,五、课题研究的结果“走迷宫”的基本功能都已实现,在此程序中各类间反复的关联和依赖关系让类与类之间的关系复杂,稍有不明白程序就无法继续下去。但是该仅仅对几个简单的迷宫进行了设计,没有实现平常的通关模式的设计,这是此应该改进的地方。在本系统的设计上,课题组成员可以充分利用面象语言的,处理各个类的封装和它们之间的联系,实现各个类之间的数据通信。本系统是对 Java编程的一次综合演练,它涉及了 Java 编程的多个方面,对提高设计者的系统设计能力和开发水平有很大帮助。六、经验体会该中最有问题的要数地图的生成了,地图的生成采用的是二叉树的遍历来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广安移动警亭施工方案(3篇)
- 支护施工方案图文版(3篇)
- 晋中pc构件施工方案(3篇)
- 海尔家电营销方案(3篇)
- 烘焙营销打折方案(3篇)
- 电梯施工方案自检表(3篇)
- 继续加班施工方案(3篇)
- 荧幕漆的施工方案(3篇)
- 袋装土护坡施工方案(3篇)
- 车间高架模板施工方案(3篇)
- 2026届高三毕业班适应性练习(四月)英语 参考答案、评分细则及听力录音稿
- 2026年中国烟草总公司四川省公司校园招聘笔试参考试题及答案解析
- 2026宁夏宁国运新能源盐池区域管理中心招聘14人备考题库附答案详解(培优a卷)
- 2025年甘肃化学专升本考试试题及答案
- 北京大兴国际机场国航基地项目水土保持方案报告表
- 贵州事业单位考编真题及答案
- 闽教版小学英语六年级下册全册教案
- 2025年开封文化艺术职业学院单招职业技能考试题库带答案解析
- 2026年国企法务岗位招聘面试案例分析与实务考核含答案
- 福建省房屋建筑和市政基础设施工程概算编制规程(2026版)
- 2025年大学机械设计制造及其自动化(机械制造技术)试题及答案
评论
0/150
提交评论