资源描述
《Java实训汇报》
——Green foot游戏程序设计
班 级:微应1211
成 员:胡文亚
吴 桐
安徽水利水电职业技术学院
第一部分
1.1 设计目标 2
1.2 设计要求 2
1.3 实现功效 2
1.4 界面设计 3
第二部分
2.1开发平台 3
2.2环境搭配 4
第三部分
3.1 Space代码 4
3.2 Obstacle代码 6
3.3 SmoothMover代码 7
3.4 Body代码 11
第四部分 心得体会
第一部分
1.1设计目标
Green foot是针对那些想让自己熟悉怎样使用JAVA人而设计,是一个功效完整开发环境,能够使用Java方便地编写游戏和进行模拟。我们设计是一款简单易操作游戏,我们期望能经过自己所学知识把它分析开来,真正了解它本质。即使我们编程能力不是很强,不过我们组有信心,经过本学期对JAVA语言程序设计学习,经过老师对greenfoot软件介绍及实际举例、耐心讲解,我们能够试着用greenfoot来制作简单小游戏了,即使不娴熟还有待提升,不过部分技术含量较低小游戏还是很轻易让我们掌握。
此次游戏程序设计目标,关键是经过greenfoot来制作游戏来愈加好掌握java语言。经过greenfoot这个平台,熟习greenfoot在制作游戏方面所需要技巧,将自己游戏尽可能多利用所学到技术,而且将在平时java课程上面学到知识付诸于实践,并从实践和实际项目中提升自己编程能力。找出自己不足之处进行填补。
1.2设计要求:
这次实训任务课程设计要求是选择greenfoot软件作为我们游戏编程平台。因为我们平时学习就是java语言,而greenfoot便是一个以Java语言为基础游戏开发平台,所以在编程过程中能够提升效率,也让我对java语言和greenfoot之间衔接关系有了更深了解,一样,也让我愈加熟习了这个游戏开发平台环境。
1.3 实现功效
此款《疯狂之音》游戏设计思绪就是解放双手弹奏,经过向空白处随意放入不一样颜色、不一样大小球,当球下落和上升时触碰到黄色板块会触发出不一样音调,当多个声音同时出现时能够正确分辨出来。就成为了一首自己创作优美神曲,并给大家带来娱乐,为听者增加不少乐趣。
1.4 界面设计
第二部分
2.1开发平台
greenfoot是一个以Java语言为基础游戏开发平台,编程过程中能够提升效率,而且对象可视化和对象交互性比较清楚。
2.2 环境配置
1、计算机环境变量需要设置,计算机需要安装JDK版本为1.6。因为greenfoot需要绑定JDK。
2、greenfoot安装,需要到官网上下载正确greenfoot版本,安装后需要测试时候能够使用,是否和JDK绑定。
第三部分
3.1 Space代码
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;
public class Space extends World{
private String[] soundFiles = { "2c", "2d", "2e", "2f", "2g", "2a", "2b", "3c", "3d", "3e", "3f", "3g", "3a", "3b" };//十四个声音档
/**
*对于类空间对象结构函数。
*/
public Space() {
super(960, 620, 1);
createObstacles();
randomBodies(5);//初始球数量
}
/**
*创建一个排在我们世界中障碍。
*/
public void createObstacles(){
int i = 0;
while (i < soundFiles.length) { //声音档长
addObject (new Obstacle (soundFiles[i] + ".wav"), 80 + i*60, 310); //声音资源文件
i++;
}
}
/**
*创建一个给定宇宙中物体数量。每一个身体全部有一个随机初始状态(size 大小,mass集中, direction方向, speed速度, color颜色, location位置). //世界里创建了一个给定数量球,每个球全部有一个随机初始状态
*/
public void randomBodies(int number){
while (number > 0) {
int size = 20 + Greenfoot.getRandomNumber(30); //从一组数据中随机取出一定数量随机数
double mass = size * 7.0;
int direction= Greenfoot.getRandomNumber(360);//方向
double speed = Greenfoot.getRandomNumber(150) / 100.0; //速度
int x = Greenfoot.getRandomNumber(getWidth()); //取宽度
int y = Greenfoot.getRandomNumber(getHeight()); //取长度
int r = Greenfoot.getRandomNumber(255);
int g = Greenfoot.getRandomNumber(255);
int b = Greenfoot.getRandomNumber(255);
addObject (new Body (size, mass, new Vector(direction, speed), new Color(r, g, b)), x, y);
number--;
}
}
}
3.2 Obstacle代码
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Obstacle extends Actor{
private String sound;
private boolean touched = false;
/**
*创建一个含有相关声音文件一个障碍。
*/
public Obstacle(String soundFile){
sound = soundFile;//声音档
}
/**
*每一次循环,检验是否被击中。假如我们发挥我们声音。
*/
public void act()
{
Actor body = getOneIntersectingObject(Body.class);
if (touched && body == null) //不用触碰
{
touched = false;
setImage ("block.png");
}
else if (!touched && body != null){ //临时触碰
touched = true;
setImage ("block-light.png");
Greenfoot.playSound(sound); //播放声音
}
}
public void playSound(){
Greenfoot.playSound(sound);
}
}
3.3 SmoothMover代码
import greenfoot.*;// (World,Actor,GreenfootImage,and Greenfoot)
/**
*一个改变一个Actor,保持正确位置(使用双打坐标而不是整数)。它还保持当*前运动矢量运动形式。
*/
public abstract class SmoothMover extends Actor{
private Vector movement;
private double exactX;
private double exactY;
public SmoothMover(){
this(new Vector());
}
/**
* 发明新事物以给定速度初始化
*/
public SmoothMover(Vector movement){
this.movement = movement;
}
/**
* 在目前运动方向移动
*/
public void move(){
exactX = exactX + movement.getX();
exactY = exactY + movement.getY();
super.setLocation((int) exactX, (int) exactY);
}
/**
* 设置位置使用正确坐标(double)
*/
public void setLocation(double x, double y){
exactX = x;
exactY = y;
super.setLocation((int) x, (int) y);
}
/**
* 设置位置。重新定义标准Greenfoot方法来确定
*确切坐标更新同时
*/
public void setLocation(int x, int y){
exactX = x;
exactY = y;
super.setLocation(x, y);
}
/**
* 返回确切x
*/
public double getExactX(){
return exactX;
}
/**
* Return the exact y co-ordinate (as a double).返回确切y
*/
public double getExactY(){
return exactY;
}
/**
*修改目前运动经过添加一个新向量到现有运动
*/
public void addForce(Vector force){
movement.add(force);
}
/**
*加速这种原动力速度给定原因。(因子小于1
* 减速)。方向保持不变。
*/
public void accelerate(double factor){
movement.scale(factor);
if (movement.getLength() < 0.15) {
movement.setNeutral();
}
}
/**
* 返回这个球速度.
*/
public double getSpeed(){
return movement.getLength();
}
/**
* 返回该对象目前运动
*/
public Vector getMovement(){
return movement;
}
}
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);
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);
}
}
/**
*应用重力力量从这个宇宙中其它天体
*/
private void applyForces(){
List<Body> bodies = (List<Body>) 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);
}
/**
* //适适用于一个给定身体重力这一套
*/
public double getMass(){
return mass;
}
}
第四部分 心得体会
经过一个星期对greenfoot学习,我们基础掌握了greenfoot比较基础编程方法。因为greenfoot是以java语言为基础游戏制作平台,它语言标准和java没有什么本质不一样,所以经过以往对java学习和认识,真正操作起来,并不是极难着手。只要上课认真听老师细心讲解,我们认为greenfoot这个软件还是很轻易上手,甚至在一些方面还比eclipse还轻易一点。最少在greenfoot里面,有类或对象能够直接拖动,不用在生成和调用了。
看似简单轻易操作游戏背后,确实异常复杂算法。在网上查看了类似逻辑算法和代码,也是各有不一样,让我们更认识到了本身学习不足之处,也更深入产生了对游戏开发爱好。受益匪浅,感悟颇多。游戏开发是一个创新过程,不是一个人就能够完成,它更需要是团体合作,因为我们编程能力有待深入加强,所以就做了一个很一般项目。我们相信只要多用心、多努力一定能做出愈加好游戏。这次很感谢老师给我们提供这么一个平台,我们会加倍努力!
展开阅读全文