当前位置:文档之家› “大鱼吃小鱼”课程设计报告

“大鱼吃小鱼”课程设计报告

《面向对象程序设计》课程设计报告题目:大鱼吃小鱼专业:网络工程班级:网络工程12(2)姓名:管蔚雄指导教师:徐宁成绩:计算机与信息工程系2014 年 6 月 6 日目录设计的目的与要求..............................2 设计目的 ................................................................. .. (2)设计要求.............................................2 实现功能 .................................................................2 界面设计 ................................................................. .. (2)第二章开发平台与技术..............................3 语 (3)4 环境配置 ................................................................. . (5)第三章模块具体实现和主要动画触发 (7)小结.............................. .. (8)参考文献 ....................... .. (8)附录. ...................................................... (9)第一章设计目的与要求设计目的通过用greenfoot 来设计“大鱼吃小鱼”这个游戏,来熟悉并学会运用greenfoot 这个软件的同时巩固我们专业课java 知识设计要求1. 熟悉GreenFoot 平台;2. 对游戏中所需类进行设计;3. 写出源程序文件;4. 对游戏进行调试和分析。

实现功能敌方有三类鱼(鲨鱼、蓝鱼和小黄鱼),每一类鱼的对象出现后,在游戏中处于随机自由移动状态,敌方大鱼能吃小鱼;主角为红鱼且红鱼只有一条,玩家通过键盘方向键控制移动,红鱼有两级状态,初始时处于低级状态,只能吃黄鱼,能被蓝鱼或鲨鱼吃掉。

初级状态的红鱼经过重重险恶且吃掉一定数量的黄鱼升级后,能吃黄鱼和蓝鱼,但还是能被鲨鱼吃。

吃掉一定数量的鱼,则显示成功信息,结束游戏;若红鱼被鲨鱼或蓝鱼吃掉,则显示失败信息。

界面设计红鱼是主角,玩家通过键盘方向键控制移动,红鱼有两级状态:初级状态只能吃小黄鱼,会被蓝鱼和鲨鱼吃掉;吃掉20 条小黄鱼后回升级即长大,能吃掉蓝鱼,但还是能被鲨鱼吃掉。

红鱼升级后,吃黄鱼数量达到40,蓝鱼数量达到20,显示成功信息,结束游戏;若红鱼被鲨鱼或蓝鱼吃掉,显示失败信息。

敌方大鱼能吃小鱼,即鲨鱼吃蓝鱼和黄鱼,蓝鱼吃黄鱼。

第二章开发平台和技术Java 语言简单性:Java 最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。

Java 语言的简单性主要体现在以下三个方面:?Java 的风格类似于C++,但是Java 摒弃了C++中容易引发程序错误的地方,如指针和内存管理。

?Java 提供了丰富的类库。

?Java 自身的基本系统所占用空间小于250KB(即编译器和解释器),它实现了垃圾自动收集,简化了内存的管理工作。

可靠性和安全性:Java 不支持指针,这杜绝了内存的非法访问。

Java 的自动单元收集防止了内存丢失等动态内存分配导致的问题。

Java解释器运行时实施检査,可以发现数组和宇符串访问的越界;Java 提供了异常处理机制,以便从错误处理任务恢复。

Java 通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。

当Java 字节码进进入解释器时, 首先必须经过字节码校验器的检查,然后Java 解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域。

跨平台性:面向对象:把程序实现的每一个具体功能作为类,然后用类来构成对象。

优点是代码可重用、系统易扩展。

多线程:通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,提高系统的运行效率。

分布性:分布式包括数据分布和操作分布。

数据分布是指数据可以分散在网络的不同主机上;操作分布是指把一个计箅分散在不同主机上处理。

它支持以上两种分布性。

对于前者,Java 提供了一个叫做URL的对象,利用这个对象,可以访问Internet 上的所有网络资源;对于后者,Java 提供的基于流套接字的网络编程接口,为实现网络的应用和Web应用提供了方便。

丰富的类库和API 文档GreenFootGreenfoot 是由肯特大学的Michael 和Martin 开发的一款游戏程序设计平台,主要用于程序设计的辅助教学。

它是一个功能完整的开发环境,可以方便地编写游戏和进行游戏模拟。

Greenfoot 也可看做是一个二维图形程序框架和集成开发环境的结合体,它支持面向对象程序设计的全部特性,特别适;合进行基于组件的可视化编程。

Greenfoot 具备以下几个特点:(1)可视化程序设计界面(2)游戏案例作为项目单元(3)良好的社区支持环境配置开发运行环境:JDK( Java Development Kit )+文本编辑器( UltraEdit )JDK是java 开发工具包,包括java 类库、java 编译器、java 解释器、java 运行环境和java 命令行工具。

IDE:集成开发工具Visual J++(MicroSoft)VisualAge for Java(IBM)EclipseJDK的安装安装:和一般应用程序相似,有向导指引。

环境变量的设置:Path 使得系统可以在任何路径下识别java 命令。

Classpath 为java 加载类(class or lib) 路径,只有类在classpath 中,java 命令才能识别。

JDK 的安装路径:C:\Java\jdk path 路径为:C:\Java\jdk\bin classpath 路径为:. ; C:\Java\jdk\lib Greenfoot 安装:Greenfoot 软件直接在自己的pc 机上安装即可用。

第三章模块具体实现和主要动画触发涉及的类及类名本实验中world 类中有一个子类sea,actor 类中有十个子类,分别是主角类即红鱼类Redfish ,黄鱼两个类yellowfish1 与yellowfish2 ,蓝鱼两个类bluefish1 与bluefish2 ,鲨鱼类shark ,水泡类blister ,一个计数器Counter ,一个Scoreboard ,一个success 。

各类实现的效果sea 类:添加了一个红鱼的对象即主角;计数器的两个对象分别是用于计数吃掉黄鱼的数量和吃掉蓝鱼的数量;黄鱼与蓝鱼在世界里处于随机出现自由移动状态;实现计数器加一的方法;游戏结束的方法;游戏成功的方法;背景音乐循环播放。

Redfish 类:红鱼设置四种状态,在构造方法中设置了其初始状态,然后通过if 判断语句来限制它的状态;在act 方法中设置了关联键盘向左移游戏动作;吃黄鱼蓝鱼动作,具体实现通过if 语句控制;鱼升级及游戏成功也是在act 方法中用if 语句来限定。

yellowfish1 与yellowfish2 类:黄鱼在边界消失。

bluefish1 与bluefish2 类:蓝鱼在边界消失;在其act 方法里设置了吃黄鱼,通过if 语句,并调用sea 类的getCount ()方法,其数值小于等于20 情况下可以吃红鱼。

shark 类:鲨鱼在边界消失;在act 方法中设置了吃黄鱼,蓝鱼,红鱼,并且当吃到红鱼,游戏结束,调用sea 类的gameover 方法。

blister 类:水泡在边界消失。

ScoreBoard 与success 类:主要是绘制分数界面背景。

Counter 类:用于计数的类。

小结此次课程设计,使我更扎实的掌握了本学期专业课java 知识。

当然,设计过程中遇到了一些困难和问题,实在想不出来的问同学或请教老师,终于游逆而解。

课程设计体现出自己综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱之处。

实践出真知,通过亲自设计,使我们掌握的知识不再是是纸上谈兵。

说实话,本次课程设计花了不少时间,时间主要花在游戏设计即代码上,游戏做好后,感觉所花时间是值得的,个人对自己设计游戏较满意,虽然不是做得那么精致,还存在些许需要改进的地方,我想以后有机会继续完善它。

我认为,在这次课程设计中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

更重要的是,在实验中,我学会了很多学习的方法。

而这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

这对于我们的将来也有很大的帮助。

以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。

就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。

参考文献:Greenfoot 官方网站;Java 程序设计教程(牛晓太主编)。

附录:(部分代码)sea 类:import greenfoot.*;public class sea extends World{Counter mycounter;Counter mycounter1;GreenfootSound music;public sea(){super(800, 600, 1);addObject(new Redfish(),400,300);mycounter=new Counter(" 吃掉的yellowfish 数量:"); mycounter1=newCounter(" 吃掉的blue 数量:"); addObject(mycounter,100,20);addObject(mycounter1,300,20);music=new GreenfootSound("justin bieber - ");}public void act(){();if(100)<3){addObject(new yellowfish1(),0,(600));addObject(new yellowfish2(),800,(600));}if(100)<1){ addObject(new bluefish1(),0,(600));addObject(new bluefish2(),800,(600));addObject(new shark(),0,(600));addObject(new blister(),(800),600);}}public void countChange(){()+1);}public void countChange1(){()+1);}public int getCount(){return ();}public int getCount1(){return ();}public void gameOver(){addObject(new ScoreBoard(10*())+20*())), getHeight()/2);getWidth()/2, }public void gameWin(){addObject(new success(10*())+20*())),getWidth()/2, getHeight()/2); }}Redfish 类:import greenfoot.*;public class Redfish extends Actor{ GreenfootImage smallL=new GreenfootImage("");GreenfootImage smallR=new GreenfootImage("");GreenfootImage oldL=new GreenfootImage("");GreenfootImage oldR=new GreenfootImage("");public Redfish() {setImage(smallL);}public void act(){if("right")){ if(((sea)getWorld()).getCount()>20 ){ setImage(oldR);} else {setImage(smallR);}move(5);}if("left")){ if(((sea)getWorld()).getCount()>20 ){ setImage(oldL);} else {setImage(smallL);} move(-5);}if("up")) {setLocation(getX(),getY()-5);}if("down")) {setLocation(getX(),getY()+5);} if(((sea)getWorld()).getCount()>20 ){if(getImage()==smallL){ setImage(oldL);} if(getImage()==smallR){ setImage(oldR);} getbluefish();}getyellowfish();if(((sea)getWorld()).getCount()>40&&((sea)getWorld()).getCount1()>20) { ();((sea) getWorld()).();((sea) getWorld()).gameWin();}}public void getyellowfish(){yellowfish1 yellow1=(yellowfish1)getOneIntersectingObject;yellowfish2 yellow2=(yellowfish2)getOneIntersectingObject;if(yellow1!=null){("");();((sea) getWorld()).countChange();}if(yellow2!=null){("");();((sea) getWorld()).countChange();}}public void getbluefish(){bluefish1 blue1=(bluefish1)getOneIntersectingObject; bluefish2 blue2=(bluefish2)getOneIntersectingObject; if(blue1!=null){();("");((sea) getWorld()).countChange1();}if(blue2!=null){();("");((sea) getWorld()).countChange1();}}}。

相关主题