}
3.3 Body代码
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color; import java.util.List; /**
*“Body”是任何类型的对象在空间,有一个大的,或其他任何漂浮在周围空间。 */
public class Body extends SmoothMover{ private static final double GRAVITY = 7.8;
private static final Color defaultColor = new Color(255, 216, 0); // 黄色的球
private double mass; /**
*.构造一个球是默认大小,方向,运动,和颜色 */
public Body(){
this (20, 300, new Vector(0, 0.0), defaultColor); } /**
* 构造一个球是默认大小,方向,运动,和颜色 */
public Body(int size, double mass, Vector movement, Color color){ this.mass = mass; addForce(movement);
GreenfootImage image = new GreenfootImage (size, size); image.setColor (color);
第 - 11 - 页 共 14 页
image.fillOval (0, 0, size-1, size-1); setImage (image); } /**
*行为。那就是将引力部份从所有其他体的周围,然后移动。 */
public void act(){ applyForces(); move();
bounceAtEdge(); } /**
* 检查是否到达背景的边缘,如果是就反弹. */
private void bounceAtEdge(){
if (getX() == 0 || getX() == getWorld().getWidth()-1) { setLocation((double)getX(), (double)getY()); getMovement().revertHorizontal(); accelerate(0.9); }
else if (getY() == 0 || getY() == getWorld().getHeight()-1) { setLocation((double)getX(), (double)getY()); getMovement().revertVertical(); accelerate(0.9); } } /**
*应用重力的力量从这个宇宙中其他天体 */
第 - 12 - 页 共 14 页
private void applyForces(){ List
bodies
=
(List
)getWorld().getObjects(Body.class); for (Body body : bodies){ if (body != this){ applyGravity (body); } }
// 确保不会太快:如果当前速度非常快,减速. if (getSpeed() > 7){
accelerate (0.9); // 加速因子< 1实际上减慢 } } /**
*适用于一个给定的球的重力 */
private void applyGravity(Body other){
double dx = other.getExactX() - this.getExactX(); double dy = other.getExactY() - this.getExactY(); Vector force = new Vector (dx, dy);
double distance = Math.sqrt (dx*dx + dy*dy);
double strength = GRAVITY * this.mass * other.mass (distance * distance);
double acceleration = strength / this.mass; force.setLength (acceleration); addForce (force); } /**
* //适用于一个给定的身体的重力这一套
第 - 13 - 页 共 14 页
/ */
public double getMass(){ return mass; } }
第四部分 心得体会
经过一个星期对greenfoot的学习,我们基本掌握了greenfoot的比较基础的编程方法。因为greenfoot是以java语言为基础的游戏制作平台,它的语言标准和java的没有什么本质的不同,所以通过以往对java的学习和认识,真正的操作起来,并不是很难着手。只要上课认真听老师细心的讲解,我们觉得greenfoot这个软件还是很容易上手的,甚至在某些方面还比eclipse还容易一点。至少在greenfoot里面,有的类或者对象可以直接拖动,不用在生成和调用了。
看似简单容易操作的游戏背后,确实异常复杂的算法。在网上查看了类似的逻辑算法和代码,也是各有不同,让我们更认识到了自身学习的不足之处,也更进一步产生了对游戏开发的兴趣。受益匪浅,感悟颇多。游戏开发是一个创新的过程,不是一个人就能够完成的,它更需要的是团队合作,由于我们的编程能力有待进一步加强,所以就做了一个很普通的项目。我们相信只要多用心、多努力一定能做出更好的游戏。这次很感谢老师给我们提供这样一个平台,我们会加倍努力的!
第 - 14 - 页 共 14 页