JAVA 课程设计实验报告.docx
《JAVA 课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《JAVA 课程设计实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
JAVA课程设计实验报告
课程设计报告
课程名称Java语言程序设计
班级10计算机1班
姓名赵阳阳
学号10138005
指导教师乐毅
报告提交日期2012年5月8日
简易迷宫系统的设计与实现
一、课程设计的目的
为了培养学生结构化程序设计的思想,加深对JAVA语言基本语言要素和控制结构的理解与运用,针对java语言中的重点和难点内容进行训练,独立完成程序设计任务,锻炼学生动手操作能力。
二、系统分析与设计
1.需求分析
基于java实现的简易迷宫系统,通过判断棋子所走路径是wall还是road,来实现从入口到出口的整个流程,并可任意选择五种不同的迷宫。
2.概要设计
首先使用maze类实现整个迷宫的图形用户界面,然后根据Handlemove和WallorRoad来判断旗子下一步路径,并根据主页面的两个menuitem选项来转换不同风格的迷宫。
3.总体设计
简易迷宫系统主要包括6个类,它们的功能如下。
(1)Maze类和MazeWindow其主要功能为实现整个迷宫的图形用户界面,根据函数来选择之前准备好的maze类型的六种不同迷宫。
(2)HandleMove类用来控制旗子所走路径,并添加textfield来限制所用时间,通过timer定时器来进行控制
(3)MazePoint类用来确定旗子的横纵坐标,通过isHaveWallOrRoad和setIsWallOrRoad两个函数来实现坐标选择。
(4)personMaze类来对所用旗子进行图形选择。
(5)WallOrRoad类来判断是Wall还是Road。
流程图:
简易迷宫系统实现功能图:
主要代码的方法调用:
三、补充功能
1.添加、查看英雄榜
记录每次用时并将用时最少的前三名放入英雄排行榜,用户可以随时查看英雄榜的记录。
结构图:
英雄榜:
2.当完成任务时,发出庆祝的声音!
3.本程序允许用户更改迷宫中的“墙”和“路”上的图像!
4.规定一个时间上限,如果用时超过所规定的上限,“走迷宫者”上的图像变为pig.jpg!
四、部分代码实现
HandleMove()throwsMalformedURLException{
musicFile=newFile("hello.wav");
uri=musicFile.toURI();
url=uri.toURL();
clip=Applet.newAudioClip(url);
recordTime=newjavax.swing.Timer(1000,this);
showTime=newJTextField(16);
tool=getToolkit();
showTime.setEditable(false);
showTime.setHorizontalAlignment(JTextField.CENTER);
showTime.setFont(newFont("楷体",Font.BOLD,16));
JLabelhitMess=newJLabel("单击走迷宫者,按键盘方向键",JLabel.CENTER);
hitMess.setFont(newFont("楷体",Font.BOLD,18));
add(hitMess);
add(showTime);
setBackground(Color.cyan);
}
publicvoidsetMazePoint(MazePoint[][]point){
p=point;
}
publicvoidinitSpendTime(){
recordTime.stop();
spendTime=0;
showTime.setText(null);
}
publicvoidkeyPressed(KeyEvente){
recordTime.start();
PersonInMazeperson=null;
person=(PersonInMaze)e.getSource();
intm=-1,n=-1;
MazePointstartPoint=person.getAtMazePoint();
for(inti=0;i
for(intj=0;j
if(startPoint.equals(p[i][j])){
m=i;
n=j;
break;
}
}
}
if(e.getKeyCode()==KeyEvent.VK_UP){
intk=Math.max(m-1,0);
if(p[k][n].getWallOrRoad().getIsRoad()){
tool.beep();//发出嘟的一声
person.setAtMazePoint(p[k][n]);
person.setLocation(p[k][n].getX(),p[k][n].getY());
}
}
elseif(e.getKeyCode()==KeyEvent.VK_DOWN){
intk=Math.min(m+1,p.length-1);
if(p[k][n].getWallOrRoad().getIsRoad()){
tool.beep();
person.setAtMazePoint(p[k][n]);
person.setLocation(p[k][n].getX(),p[k][n].getY());
}
}
elseif(e.getKeyCode()==KeyEvent.VK_LEFT){
intk=Math.max(n-1,0);
if(p[m][k].getWallOrRoad().getIsRoad()){
tool.beep();
person.setAtMazePoint(p[m][k]);
person.setLocation(p[m][k].getX(),p[m][k].getY());
}
}
elseif(e.getKeyCode()==KeyEvent.VK_RIGHT){
intk=Math.min(n+1,p[0].length-1);
if(p[m][k].getWallOrRoad().getIsRoad()){
tool.beep();
person.setAtMazePoint(p[m][k]);
person.setLocation(p[m][k].getX(),p[m][k].getY());
}
}
}
publicvoidactionPerformed(ActionEvente){
spendTime++;
showTime.setText("您的用时:
"+spendTime+"秒");
}
publicvoidkeyReleased(KeyEvente){
PersonInMazeperson=(PersonInMaze)e.getSource();
intm=-1,n=-1;
MazePointendPoint=person.getAtMazePoint();
if(endPoint.getWallOrRoad().getIsOut()){
clip.loop();
recordTime.stop();
JOptionPane.showMessageDialog(this,"您成功了!
","消息框",
JOptionPane.INFORMATION_MESSAGE);
}
}
publicvoidkeyTyped(KeyEvente){}
}
注:
完整代码见源代码文档
运行界面:
四、运行调试与分析讨论
由于没有把所有的类放在一个java文件中,而是放在了几个不同的java文件里,然而每个文件又要相互使用定义的类,导致不能编译运行。
同时,没有把类之间的关系处理好,也造成了不能运行的原因。
在上网查阅资料后,使问题的根源得以解决,使得程序终于能顺利运行。
五、总结
JAVA语言课程设计是我们学完理论课程之后对自己动手操作能力的一次锻炼,也是自己对JAVA学习结果的一次很好的检验,在学习过程中,能够了解到自己的不足,对自己不熟悉的,能够及时查阅资料,不仅让我们巩固了原有的理论知识,培养了我们把所学的运用到实际。
同时,也让我了解到学习的重要性,有些还有待今通后慢慢学习,只要认真学就会有更多的收获。
总之这次课程设计使我更多的掌握了所学的知识,并运用到实践上,了解了java的重要性,对以后的学习起了重要作用。
对以后作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现己的意义。
希望自己以后会做的越来越好。