碰撞小球游戏课程设计网络工程2班.docx

上传人:b****8 文档编号:30384329 上传时间:2023-08-14 格式:DOCX 页数:16 大小:54.77KB
下载 相关 举报
碰撞小球游戏课程设计网络工程2班.docx_第1页
第1页 / 共16页
碰撞小球游戏课程设计网络工程2班.docx_第2页
第2页 / 共16页
碰撞小球游戏课程设计网络工程2班.docx_第3页
第3页 / 共16页
碰撞小球游戏课程设计网络工程2班.docx_第4页
第4页 / 共16页
碰撞小球游戏课程设计网络工程2班.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

碰撞小球游戏课程设计网络工程2班.docx

《碰撞小球游戏课程设计网络工程2班.docx》由会员分享,可在线阅读,更多相关《碰撞小球游戏课程设计网络工程2班.docx(16页珍藏版)》请在冰豆网上搜索。

碰撞小球游戏课程设计网络工程2班.docx

碰撞小球游戏课程设计网络工程2班

学号

2013-2014学年第二学期

 

《Java软件开发课程设计》

课程设计报告

 

题目:

碰撞小球游戏

专业:

网络工程

班级:

网络工程12

(2)

姓名:

指导教师:

成绩:

计算机与信息工程系

2014年6月22日

目录

第一章设计目的与要求﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒2

1.1设计目的

1.2设计要求

1.3实现功能

1.4界面设计

第二章开发平台和技术﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒4

2.1Java语言

2.2GreenFoot

2.3环境配置

第三章模块具体实现和主要动画触发﹒﹒﹒﹒﹒﹒5

第四章小结﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒7

 

课程设计题目

第一章设计目的与要求

1.1设计目的

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

游戏程序设计的目的,主要是通过greenfoot来制作游戏,进而更好的掌握java语言。

通过greenfoot这个平台,熟习greenfoot在制作游戏方面所需要的技巧,将自己的游戏尽可能多的运用所学到的技术,并且将在平时java课程上面学到的知识付诸于实践,并从实践和实际的项目中提高自己的编程能力。

找出自己的不足之处进行弥补。

1.2设计要求

1、系统设计要实用,用户界面简洁美观;

2、编程简练,可用,功能完整;

3、有清晰的注释,易于阅读。

1.3实现功能

一个小球位于矩形框中心,开始运动时,小球的运动方向是任意的,移动到边框时,发生碰撞,向另一方向移动,如此反复,检测到鼠标单击时,游戏结束。

1.4界面设计

游戏界面简洁,显示为一个矩形边框,中心有一个小球,小球通过撞击边框和反弹不断运动。

图1

图2

图3

第二章开发平台和技术

2.1Java语言

Java语言诞生于20世纪90年代,1991年美国sun公司成立了名为Green的项目组,研发消费类电子产品的分布式软件系统。

团队负责人JamesGosling首先考虑采用C++来编程,但是这种语言比较复杂,安全性差,存在许多容易混淆和出错的功能。

于是他们着手开发出一种新的语言,称作Oak。

它保留了C++语言的大部分语法规定,但是删去了头文件、预处理文件、指针运算、操作符重载、多重继承等功能。

Oak是一种可以移植的语言,具有平台独立性。

后来经过改进,把Oak更名为Java后,Sun公司于1995年5月23日正式对外发布。

Java这个名字源于印度尼西亚的爪哇岛,它以盛产咖啡闻名。

Java语言的标志就是一杯热咖啡。

Java语言问世后,很快由于“一次编程,到处运行”的口号引起广泛关注,经过不断使用,也确实得到了大量的好评。

它主要具有以下特点:

1、跨平台性

2、简单性

3、面向对象

4、多线程

5、分布性

6、安全性

7、丰富的类库和API文档

2.2GreenFoot

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

它还可以被用来作为Java语言的教程,以及设计2D小游戏,可以使用于所有年龄段的用户,而不仅仅是初学者。

Greenfoot框架可以用来实现基于二维网格的很多程序。

它负责两部分工作:

简便的产生对象的图形化显示,按照模拟的线路运行。

为了实现这些功能,Greenfoot框架提供了一个Actor基类,其他任何想实现可视化的类都要继承它。

必须执行的两个重要方法是:

getImage()返回对象的图形,act()将在模拟路线中调用。

2.3环境配置

1、安装JDK

2、设置环境变量

3、安装配置Greenfoot

1、获取Greenfoot

2、安装Greenfoot

3、配置环境

第三章模块具体实现和主要动画触发

1、BallWorld类

publicclassBallWorldextendsWorld

{

publicGreenfootImageimage;

GreenfootSoundvoice=newGreenfootSound("123.wav");

GreenfootSoundsong=newGreenfootSound("music.mp3");

/**

*ConstructorforobjectsofclassBallWorld.

*

*/

publicBallWorld()

{

//Createanewworldwith20x20cellswithacellsizeof10x10pixels.

super(600,400,1);//初始化屏幕显示窗口,宽为600,高为400,故显示为矩形

addObject(newBall(),getWidth()/2,getHeight()/2);//在矩形的中心放置一个小球

song.playLoop();//背景音乐循环

}

publicvoidgameOver()

{song.stop();//背景音乐停止

Greenfoot.stop();}//游戏停止

}

2、Ball类

publicclassBallextendsActor

{

privateVectorvel;

privateintcount;

publicBall(){

this(-5+Greenfoot.getRandomNumber(5),-5+Greenfoot.getRandomNumber(5));

//构造函数,初始化对象,因为需要将小球刚开始运动的方向设定为任意方向。

//所以需要将小球速度的x方向变量和y方向变量均控制-5~5的范围,

//这样就可以实现小球开始时朝任意方向运动

}

3、publicvoidmove(){//此处为整个程序的为关键,move解释了如何让小球运动起来

Vectorpos=newVector(getX(),getY());;//取得小球的当前位置,并初始化一个Vector对象

pos=pos.add(vel);//更新pos的数据,此时pos表示的是小球运动过后的坐标,

//小球的新坐标x=x+小球x方向的速度(正负表示方向),

//y=y+小球y方向的速度(正负表示方向)

setLocation(pos.x(),pos.y());//设置小球的新坐标

}

publicbooleanhitTopWall(){//检测小球是否触碰到上壁

returngetY()-getImage().getHeight()/2<0;

}

publicbooleanhitBottomWall(){//检测小球是否触碰到下壁

returngetY()+getImage().getHeight()/2>getWorld().getHeight()-1;

}

publicbooleanhitLeftWall(){//检测小球是否触碰到左壁

returngetX()-getImage().getHeight()/2<0;

}

publicbooleanhitRightWall(){//检测小球是否触碰到右壁

returngetX()+getImage().getHeight()/2>getWorld().getWidth()-1;

}

第四章小结

经过这段时间的学习和动手操作我收获不小,总结起来有如下几点:

1、更进一步理解和熟悉了Java编程的思想,体会到Java语言与其他编程语言的不同。

对于这种面向对象的编程思想,是刚入门的人很快就能写出自己的程序。

2、锻炼了自己的动手和自学能力,编程中遇到的一些问题都能通过查阅资料和请教别人解决。

3、体会到写程序最重要的是程序思想,而不是单纯地写代码。

如何解决类之间的关联和继承关系,如何组织类是很关键的。

此外对于接口和变量的私有还是公有以及参数传递等方面也收获不小。

4、在实验的过程中,总有一些错误,必须仔细检查并结合课本知识进行对比、揣摩才能找出错误的语句代码,进而进行改正,才能得到需要的结果。

参考文献:

1.牛晓太《Java程序设计教程》2013年6月第1版清华大学出版社

2.GreenFoot程序员手册:

3.greenfoot安装目录下的例子

默认路径:

C:

\ProgramFiles(x86)\Greenfoot\scenarios

4.GreenFoot中文API文档:

http:

//www.greenfoot.org/files/translations/Chinese/API/index.html

附录:

importgreenfoot.*;

importgreenfoot.GreenfootImage;

importgreenfoot.GreenfootSound;

//importgreenfoot.GreenfootImage;

//(World,Actor,GreenfootImage,GreenfootandMouseInfo)

/**

*WriteadescriptionofclassBallWorldhere.

*

*@author(yourname)

*@version(aversionnumberoradate)

*/

publicclassBallWorldextendsWorld

{

publicGreenfootImageimage;

GreenfootSoundvoice=newGreenfootSound("123.wav");

GreenfootSoundsong=newGreenfootSound("music.mp3");

/**

*ConstructorforobjectsofclassBallWorld.

*

*/

publicBallWorld()

{

//Createanewworldwith20x20cellswithacellsizeof10x10pixels.

super(600,400,1);//初始化屏幕显示窗口,宽为600,高为400,故显示为矩形

addObject(newBall(),getWidth()/2,getHeight()/2);//在矩形的中心放置一个小球

song.playLoop();//背景音乐循环

}

publicvoidgameOver()

{song.stop();//背景音乐停止

Greenfoot.stop();}//游戏停止

}

importgreenfoot.*;

//importgreenfoot.MouseInfo;

//(World,Actor,GreenfootImage,GreenfootandMouseInfo)

/**

*WriteadescriptionofclassBallhere.

*

*@author(yourname)

*@version(aversionnumberoradate)

*/

importgreenfoot.World;

importgreenfoot.GreenfootSound;

publicclassBallextendsActor

{

privateVectorvel;

privateintcount;

publicBall(){

this(-5+Greenfoot.getRandomNumber(5),-5+Greenfoot.getRandomNumber(5));//构造函数,初始化对象,因为需要将小球刚开始运动的方向设定为任意方向,

//所以需要将小球速度的x方向变量和y方向变量均控制-5~5的范围,

//这样就可以实现小球开始时朝任意方向运动

}

publicBall(intxVel,intyVel){

vel=newVector(xVel,yVel);//初始化Vector对象

}

publicvoidact()

{

if(Greenfoot.mouseClicked(this.getWorld()))//如果接受到鼠标点击,则暂停程序

{

//count++;

Greenfoot.stop();//暂停程序

((BallWorld)getWorld()).gameOver();

}

//mouseClicked(java.lang.Objectobj)

move();//小球运动

handleWallCollision();

handleBallCollision();

}

publicvoidmove(){//此处为整个程序的为关键,move解释了如何让小球运动起来

Vectorpos=newVector(getX(),getY());;//取得小球的当前位置,并初始化一个Vector对象

pos=pos.add(vel);//更新pos的数据,此时pos表示的是小球运动过后的坐标,

//小球的新坐标x=x+小球x方向的速度(正负表示方向),

//y=y+小球y方向的速度(正负表示方向)

setLocation(pos.x(),pos.y());//设置小球的新坐标

}

publicbooleanhitTopWall(){//检测小球是否触碰到上壁

returngetY()-getImage().getHeight()/2<0;

}

publicbooleanhitBottomWall(){//检测小球是否触碰到下壁

returngetY()+getImage().getHeight()/2>getWorld().getHeight()-1;

}

publicbooleanhitLeftWall(){//检测小球是否触碰到左壁

returngetX()-getImage().getHeight()/2<0;

}

publicbooleanhitRightWall(){//检测小球是否触碰到右壁

returngetX()+getImage().getHeight()/2>getWorld().getWidth()-1;

}

publicvoidbounceX(){

vel=vel.verticalFlip();

}//bounceX()函数调用vel对象的verticalFlip()方法,将当前的vel对象的xVel反向

publicvoidbounceY(){

vel=vel.horizontalFlip();

}//bounceY()函数调用vel对象的horizontalFlip方法,将当前的vel对象的yVel反向

publicvoidhandleWallCollision(){

if(hitLeftWall()||hitRightWall()){//如果小球碰到左面或者右面

bounceX();

Greenfoot.playSound("123.wav");//碰撞声音

}

if(hitTopWall()||hitBottomWall()){//如果小球碰到上面或者下面

bounceY();

Greenfoot.playSound("123.wav");//碰撞声音

}

}

publicVectorgetVelocity(){//返回velocity对象(小球的速度对象)

returnvel;

}

publicvoidsetVelocity(VectornewVel){

vel=newVel;//设置velocity对象(小球的速度对象)

}

publicbooleanhitBall(){

returngetCollidingBall()!

=null;

}

publicBallgetCollidingBall(){

Ballb=(Ball)this.getOneIntersectingObject(Ball.class);

returnb;

}

publicvoidhandleBallCollision(){

Ballb=(Ball)this.getOneIntersectingObject(Ball.class);

if(b!

=null){

Vectortmp=getVelocity();

setVelocity(b.getVelocity());

b.setVelocity(tmp);

}

}

}

importgreenfoot.*;

publicclassVector

{

privateintx;//速度x的方向向量

privateinty;//速度y的方向向量

publicVector(intx0,inty0){

x=x0;

y=y0;

}//构造函数,初始化对象

publicintx(){returnx;}//返回速度的速度x的方向向量

publicinty(){returny;}//返回速度的速度y的方向向量

publicVectoradd(Vectorrhs){

returnnewVector(x()+rhs.x(),y()+rhs.y());

}

publicVectorverticalFlip(){

returnnewVector(-x(),y());//如果小球碰到左壁和右壁,则速度的x方向向反向,-x()仅方向改变

//大小不变,故反弹后角度和入射角对称

}

publicVectorhorizontalFlip(){

returnnewVector(x(),-y());//如果小球碰到左壁和右壁,则速度的y方向方向反向-y();,

//仅是方向改变,大小不变,故反弹后小球与反弹前的入射角度和出射角度对称

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1