学号 1208020211 2013-2014学年第二学期
《面向对象程序设计》
课程设计报告
网络工程
题目: 专业: 班级: 姓名: 指导教师: 成绩: 大鱼吃小鱼
徐宁
网络工程12⑵
管蔚雄
计算机与信息工程系 2014年6月6日
目录
计算机与信息工程系《面向对彖程序设计》课程设计报告
第一章 设计的目的与要求 ................................ 2
1.1设计目的 .................................................... 2 1.2设计要求 .................................................... 2 1.3实现功能 .................................................... 2 1.4界面设计 .................................................... 2
第二章开发平台与技术 ................................... 3
2.1java 语言 ................................................... 3 2e2greenfoot .................................................................................................. 4 2.3环境配置 .................................................... 5
第三章模块具体实现禾口主要动画触发 ...................... 7
小结 .................................................. 8 参考文献 .............................................. 8 附录 .................................................. 9
计算机与信息工程系《面向对象程序设计》课程设计报告
大鱼吃小鱼
第一章设计目的与要求
1.1设计目的
通过用greenfoot来设计“大鱼吃小鱼”这个游戏,来熟悉 并学会运用greenfoot这个软件的同时巩固我们专业课java知识。
1.2设计要求
1.熟悉GreenFoot平台; 2 •对游戏中所需类进行设计; 3 •写出源程序文件; 4.对游戏进行调试和分析。
1. 3实现功能
敌方有三类鱼(鲨鱼、蓝鱼和小黄鱼),每一类鱼的对象出现后,在游戏中 处于随机自由移动状态,敌方大鱼能吃小鱼;主角为红鱼且红鱼只有一条,玩家 通过键盘方向键控制移动,红鱼有两级状态,初始时处于低级状态,只能吃黄鱼, 能被蓝鱼或鲨鱼吃掉。初级状态的红鱼经过重重险恶且吃掉一定数量的黄鱼升级 后,能吃黄鱼和蓝鱼,但还是能被鲨鱼吃。
吃掉一定数量的鱼,则显示成功信息,结束游戏;若红鱼被鲨鱼或蓝鱼吃掉, 则显示失败信息。
1.4界面设计
红鱼是主角,玩家通过键盘方向键控制移动,红鱼有两级状态:初级状态只 能吃小黄鱼,会被蓝鱼和鲨鱼吃掉;吃掉20条小黄鱼后回升级即长大,能吃掉 蓝鱼,但还是能被鲨鱼吃掉。红鱼升级后,吃黄鱼数量达到40,蓝鱼数量达到 20,显示成功信息,结束游戏;若红鱼被鲨鱼或蓝鱼吃掉,显示失败信息。
敌方大鱼能吃小鱼,即鲨鱼吃蓝鱼和黄鱼,蓝鱼吃黄鱼。
2
计算机与信息工程系《面向对象程序设计》课程设计报告
第二章开发平台和技术
2. 1 Java 语言
简单性:Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必 须简单明了。Java语言的简单性主要体现在以下三个方面:
Java的风格类似于C++,但是Java摒弃了 C++中容易引发程序错误的地方,如 指针和内存管理。
Java提供了丰富的类库。
Java自身的基本系统所占用空间小于250KB (即编译器和解释器),它实现了垃 圾自动收集,简化了内存的管理工作。
可靠性和安全性:Java不支持指针,这杜绝了内存的非法访问。 Java的自动单元收集防止了内存丢失等动态内存分配导致的问题。
Java解释器运行时实施检査,可以发现数组和宇符串访问的越界;Java提供了异 常处理机制,以便从错误处理任务恢复。
Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁 破坏。当Java字节码进进入解释器时,首先必须经过字节码校验器的检査,然后 Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类 装载到单独的内存区域。
3
计算机与信息工程系《面向对象程序设计》课程设计报告
跨平台性:
面向对象:把程序实现的每一个具体功能作为类,然后用类来构成对象。 优点是代码可重用、系统易扩展。
多线程:通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为, 提高系统的运行效率。
分布性:分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的 不同主机上;操作分布是指把一个计算分散在不同主机上处理。它支持以上两种 分布性。
对前者,Java提供了一个叫做URL的对象,利用这个对象,可以访问Internet 上的所有网络资源;对于后者,Java提供的基于流套接字的网络编程接口,为 实现网络的应用和Web应用提供了方便。 丰富的类库和API文档
2.2 GreenFoot
Greenfoot是由肯特大学的Michael和Martin开发的一款游戏程序设计平 台,主要用于程
序设计的辅助教学。它是一个功能完整的开发环境,可以方便地 编写游戏和进行游戏模拟。Greenfoot也可看做是一个二维图形程序框架和集成 开发环境的结合体,它支持面向对象程序设计的全部特性,特别适;合进行基于 组件的可视化编程。
Greenfoot具备以卜•几个特点: (1) 可视化程序设计界面 (2) 游戏案例作为项目单元 (3) 良好的社区支持
4
计算机与信息工程系《面向对象程序设计》课程设计报告
2.3 环境配置
开发运行环境:
JDK (Java Development Kit) + 文本编辑器(UltraEdit )
JDK是java开发工具包,包括java类库、java编译器、java解释器、java 运行环境和java命令行工具。
http://www・ oracle. com/technetwork/java/javase/downloads/index・ html IDE:集成
开发工具
JCreator (Xinox) www. jcreator. com JBuilder (Borland) www. borland・ com/jbuiIder/ Visual J++(Microsoft) VisualAge for Java(IBM)
www-3・ ibm・ com/software/vajava/about/index・ html NetBeans www. netbeans・ org Eclipse http://www・ eclipse・ org/downloads
Java SE Development Kit 7ufi1
YOM muni McetM th« Of・ew iHnnm
I tcmiM Mreement fat
•oftwar*.
-
i to oowmgd tht*
you for accept mg the Oracle flinary Cod*
download this sortwatvu
Product i r” D« script ion
Linuc ARM YOIVT Horn Float ABI LlHUt ARM 90ft FIO41 Afil Linut <86 Linux
LIHU4 * Linui
Mac OSXAM
SalMtlt JiflO(SVH4 Solaris ifiA
Sol arts .«C4 (SVR4 Solans .
Solaris S尸ARC (SVR4 p4CkM0«l Solans 9PARC
$Ola4tS SPARC 6a mi (SVR4 Sotans SPARC Windows EO Windows « OowtiKMHl • |Uk linuM «irn» vfp hVitMr ♦ l 04 MB 125 40 MB JDK的安装 安装:和一般应用程序相似,有向导指引。 5 计算机与信息工程系《面向对象程序设计》课程设计报告 Java(TK) SE Development Kit 6 Update 5 -自定义安装 区] 自定义安装 选择要安装的程期能- 辭着珈 g 癘険圖驚安装完如您牺使用•控制面板冲的添如 功能说明 JavafTM) SE Deve 安装到: D:\\3ava\\jok\\ <■上一步下一步(LD a ] 环境变量的设置: Path使得系统可以在任何路径下识别java命令。 Classpath 为 java 加载类(class or lib)路径,只有类在 classpath 中,java 命令才 能识别。 JDK的安装路径:C:\\Java\\jdk path 路径为:C:\\Java\\jdk\\bin classpath 路径为:.;C:\\Java\\jdk\\lib Greenfoot 安装: 6 计算机与信息工程系《面向对象程序设计》课程设计报告 Greenfoot软件直接在自己的pc机上安装即可用。 第三章模块具体实现和主要动画触发 涉及的类及类名 本实验中world类中有一个子类sea, actor类中有十个子类,分别是主角 类即红鱼类Redfish,黄鱼两个类yellowfishl与yellowfish2,蓝鱼两个类 bluefishl 与 bluefish2,鲨鱼类 shark,水泡类 blister, 一个计数器 Counter, 一个 Scoreboard, 一个 successo 各类实现的效果 sea类:添加了一个红鱼的对象即主角;计数器的两个对象分别是用于计数吃掉 黄鱼 的数量和吃掉蓝鱼的数量;黄鱼与蓝鱼在世界里处于随机出现自由移动状 态;实现计数器加一的方法;游戏结束的方法;游戏成功的方法;背景音乐循环 播放。 Redfish类:红鱼设置四种状态,在构造方法中设置了其初始状态,然后通过if 判断语句来它的状态;在act方法中设置了关联键盘向左移游戏动作;吃黄 鱼蓝鱼动作,具体实现通过if语句控制;鱼升级及游戏成功也是在act方法中 用if语句来限定。 yellowfishl与yellowfish2类:黄鱼在边界消失。 bluefishl与bluefish2类:蓝鱼在边界消失;在其act方法里设置了吃黄鱼, 通过if语句,并调用sea类的getCount ()方法,其数值小于等于20情况下 可以吃红鱼。 shark类:鲨鱼在边界消失;在act方法中设置了吃黄鱼,蓝鱼,红鱼,并且当 吃到红鱼,游戏结束,调用sea类的gameover方法。 blister类:水泡在边界消失。 ScoreBoard与success类:主要是绘制分数界面背景。 Counter类:用于计数的类。 7 计算机与信息工程系《面向对象程序设计》课程设计报告 小结 此次课程设计,使我更扎实的掌握了本学期专业课java知识。当然,设计 过程中遇到了一些困难和问题,实在想不出来的问同学或请教老师,终于游逆而 解。 课程设计体现出自己综合运用知识的能力,体会了学以致用、突出自己劳动 成果的喜悦心情,从中发现自己平时学习的不足和薄弱之处。 实践出真知,通过亲自设计,使我们掌握的知识不再是是纸上谈兵。说实话, 本次课程设计花了不少时间,时间主要花在游戏设计即代码上,游戏做好后,感 觉所花时间是值得的,个人对自己设计游戏较满意,虽然不是做得那么精致,还 存在些许需要改进的地方,我想以后有机会继续完善它。 我认为,在这次课程设计中,不仅培养了思考、动手操作的能力,在各 种其它能力上也都有了提高。更重耍的是,在实验中,我学会了很多学习的方法。 而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、 实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦, 我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡 的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的 事情。此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教 或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。 参考文献: Greenfoot官方网站; Java程序设计教程(牛晓太主编)。 8 计算机与信息工程系《面向对象程序设计》课程设计报告 附录:(部分代码) sea 类: import greenfoot.*; public class sea extends World { Counter mycounter; Counter mycounterl; GreenfootSound music; public seaO { super (800, 600, 1); addObject(new Redfish 0,400, 300); mycou nt er=new Cou nt er (〃吃掉的 yellowfish 数量:“); mycounterl=new Counter (z,吃掉的 blue 数量:“); addObject(mycounter, 100, 20); z, addObject(mycounterl, 300, 20); music=new Greenf oot Sound (jus tin bieber - mis tleto e. mp3〃); } public void act () { music. playLoop (); if(Greenfoot. getRandomNumber (100)<3) {addObject(new yellowfishl(), 0, Greenfoot, getRandomNumber(600)); addObject(new yellowfish2(), 800, Greenfoot. getRandomNumber (600)); } if(Greenfoot. getRandomNumber (100)<1) { addObject(new bluefishl(), 0, Greenfoot. getRandomNumber(600)); addObject(new bluefish2 0,800, Greenfoot. getRandomNumber (600)); addObject(new shark(), 0, Greenfoot, getRandomNumber(600)); addObject(new blister (), Greenfoot, getRandomNumber(800), 600); } } public void countChange(){ mycouriter. setValue (mycounter. getValue ()+1); } public void countChangel(){ mycounterl. setValue (mycounterl. getValue 0+1); } 9 计算机与信息工程系《面向对象程序设计》课程设计报告 public int getCount(){ return mycounter. getValue0;} public int getCountl(){ return mycounterl. getValue0;} public void gameOver() {addObject(new ScoreBoard(10*(mycouliter. getValue()) +20*(mycounterl. getValue())), getWidth ()/2, getHeight ()/2); } public void gameWin() {addObject(new success(10*(mycounter. getValue())+20*(mycounterl. getValue())), getWidt h 0 /2, getHeight ()/2); } } Redfish 类: import greenfoot.*; public class Redfish extends Actor { Greenfootlmage Greenfootlmage smallL=new Greenfootlmage(〃Z1L png〃); Greenfootlmage smallR=new Greenfootlmage(〃Z1R・png〃); Greenfootlmage oldL=new Greenfootlmage(〃Z2L png〃); oldR二new Greenfootlmage (,zZ2R・ public Redfish0 {setlmage(smallL); 〃)} public void act() {if(Greenfoot. isKeyDown(\"right\")){ if (((sea) getWorld ()). getCount () >20 ) { setlmdge(oldR) ;} else {setlmage(smallR) ;} move(5) ;} if(Greenfoot. isKeyDown(\"left〃)){ if (((sea) getWorld ()). getCount () >20 ) { setlmage(oldL) ;} else {setlmage(smallL) ;} move (-5); } 10 计算机与信息工程系《面向对象程序设计》课程设计报告 if(Greenfoot. isKeyDown(〃up〃)) {setLocation (getX (), getY () -5); } if(Greenfoot. isKeyDown(〃dowrT)) {setLocation (getX(), getY () +5); } if (((sea)getWorld()). getCount ()>20 ) {if (ge tl mage () ==smallL) { setlmage(oldL) ;} if (getImage()==smallR) { setlmage(oldR) ;} getbluefish 0; } getyellowfish(); if (((sea) getWorld ()). getCount () >40&& ((sea) getWorld ()). getCount 1 () >20) { Green foot, sto p(); ((sea) get World ()). music, stop (); ((sea) getWorld ()). gameWin (); } } public void getyellowfishO { yellowfishl yellowl=(yellowfishl)getOnelntersectingObject(yellowfishl. class); yellowfish2 yellow2=(ye11owfish2)getOnelntersectingObject (yellowfish2・ class); if(yellowl!=null) { Greenfoot. playSound (z/pop. wav〃); yellowl. disappear 0 ; ((sea) get World ()) • cou nt Change (); } if(yellow2!=null) { Greenfoot. playSound (zzpop. wavzz); yellow2. disappear 0; ((sea) get World ()) • cou nt Change (); } public void getbluefishO { 11 计算机与信息工程系《面向对象程序设计》课程设计报告 bluefishl bluel=(bluefishl)getOnelntersectingObject(bluefishl. class); bluefish2 blue2=(bluefish2)getOnelntersectingObject(bluefish2. class); if(bluel!=null) {bluel. disappear 0; Greenfoot. playSound (zzeating. wav〃); ((sea) get World ()). cou nt Changel (); } if(blue2!=null) {blue2. disappear 0; Greenfoot. playSound (z,eating. wav〃); ((sea) get World ()). cou nt Changel (); } } } 12 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务