When I run the following code:
I get this:
I edited Builderboy's scenario to version 3.1.0.
import greenfoot.Color;
import greenfoot.Greenfoot;
import greenfoot.GreenfootImage;
import greenfoot.UserInfo;
import greenfoot.World;
import java.util.List;
/**
* Write a description of class RaY here.
*
* @author Builderboy2005
* @version Uploaded: 2009/1/31
*/
public class RaY extends World
{
int[] obbX = {900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900};
double[] obbY = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290};
int x, y, color = 0, score = 0, bestScore = 0, health = 3, offY, alpha = 128, accel;
double slant;
double speed = .7, offX = 0, count = -1;
boolean scored = false;
String me;
GreenfootImage screen = new GreenfootImage(500, 300);
List<UserInfo> highscores;
List<UserInfo> nearbyscores;
final static int SCORES_TO_DISPLAY = 10;
Color flash;
boolean scoreScreen = false;
/**
* Constructor for objects of class RaY.
*
*/
public RaY() {
// Create a new world with 500x300 cells with a cell size of 1x1 pixels.
super(500, 300, 1);
for (int f = 8; f < 20; f++) obbX[f] = Greenfoot.getRandomNumber(80) - 40;
screen = getBackground();
}
/**
* Act - do whatever the RaY wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
@Override
public void act()
{
// Add your action code here.
screen.setColor(new Color(color, 0, 0, alpha));
screen.fillRect(0, 0, 500, 300);
count = count + speed;
if (count > 15) {
flash = new Color(Greenfoot.getRandomNumber(200) + 50, Greenfoot.getRandomNumber(200) + 50, Greenfoot.getRandomNumber(200) + 50);
if (scored) flash = new Color(Greenfoot.getRandomNumber(100), Greenfoot.getRandomNumber(100), Greenfoot.getRandomNumber(100));
count = 0;
}
if (health <= 0 && !scored) {
UserInfo myInfo = UserInfo.getMyInfo();
if (myInfo != null) {
bestScore = myInfo.getScore();
if (score > bestScore) {
myInfo.setScore(score);
}
for (int i = 0; i < UserInfo.NUM_INTS; i++) myInfo.setInt(i, 0xAABBCCDD);
for(int i = 0; i < UserInfo.NUM_STRINGS; i++) myInfo.setString(i, "TESTSTRING");
myInfo.store();
}
scored = true;
highscores = UserInfo.getTop(10);
nearbyscores = UserInfo.getNearby(10);
}
if (scored) {
screen.setColor(flash);
screen.drawString("Final Score: " + score, 5, 15);
screen.drawString("Previous Best: " + bestScore, 5, 30);
screen.drawString("Top Scores", 120, 60);
for (int i = 0; i < highscores.size(); i++) {
UserInfo u = highscores.get(i);
screen.drawString(u.getRank() + ". " + u.getUserName() + ": " + u.getScore(), 100, i * 20 + 80);
if (nearbyscores != null) {
screen.drawString("Similar Scores", 320, 60);
u = nearbyscores.get(i);
screen.drawString(u.getRank() + ". " + u.getUserName() + ": " + u.getScore(), 300, i * 20 + 80);
}
}
return;
}
screen.setColor(new Color(70, 70, 70));
x = 250 + (int) (270 * Math.atan2(40 - offX, 0));
y = (int) (5000 / Math.sqrt((40 - offX) * (40 - offX)));
screen.drawLine(250, 150, x, 150 - (int) (y / 2) + (int) (.002 * (250 - x) * slant));
x = 250 + (int) (270 * Math.atan2(-40 - offX, 0));
y = (int) (5000 / Math.sqrt((-40 - offX) * (-40 - offX)));
screen.drawLine(250, 150, x, 150 - (int) (y / 2) + (int) (.002 * (250 - x) * slant));
for(int f = -40; f <= 40; f += 5) {
x = 250 + (int) (270 * Math.atan2(f - offX, 0));
y = (int) (5000 / Math.sqrt((f - offX) * (f - offX)));
screen.drawLine(250, 150, x, 150 + (int) (y / 2) + (int) (.002 * (250 - x) * slant));
}
screen.setColor(flash);
screen.drawString(" " + score, 0, 12);
for (double k = 0; k < 1; k += 0.05) {
for (int f = 0; f < 30; f++) {
x = 250 + (int) (270 * Math.atan2(obbX[f] - offX, obbY[f]));
y = (int) (400 / Math.sqrt((obbX[f] - offX) * (obbX[f] - offX) + obbY[f] * obbY[f]));
offY = 150 + (int) (270 * Math.atan2(4, obbY[f]));
screen.drawOval(x - (int) (y / 2), offY - (int) (y / 2) + (int) (.002 * (250 - (x - (int) (y / 2))) * slant), y, y);
obbY[f] -= speed * 0.05;
if (obbY[f] < 9 && obbY[f] > 6 && Math.abs(obbX[f] - offX) < 1) {
color = 254;
obbY[f] = 290;
obbX[f] = Greenfoot.getRandomNumber(80) - 40;
health--;
}
if (obbY[f] < 5) {
obbY[f] = 290;
obbX[f] = Greenfoot.getRandomNumber(80) - 40;
}
}
}
if (Greenfoot.isKeyDown("left")) accel -= 5;
if(Greenfoot.isKeyDown("right")) accel += 5;
slant += (accel - slant) / 5.0;
if (offX + accel / 100.0 > 39 || offX + accel / 100.0 < -39) accel = -accel;
offX += accel / 100.0;
if (accel > 0) accel--;
if (accel < 0) accel++;
speed += .0005;
if (color > 0) color -= 2;
score++;
screen.drawRect(240, 290, 20, 10);
if (Greenfoot.isKeyDown("t") && alpha > 0) alpha--;
if (Greenfoot.isKeyDown("y") && alpha < 255) alpha++;
}
}java.lang.NullPointerException at greenfoot.GreenfootImage.initGraphics(GreenfootImage.java:354) at greenfoot.GreenfootImage.getGraphics(GreenfootImage.java:342) at greenfoot.GreenfootImage.drawString(GreenfootImage.java:692) at RaY.act(RaY.java:112) at greenfoot.core.Simulation.actWorld(Simulation.java:610) at greenfoot.core.Simulation.runOneLoop(Simulation.java:545) at greenfoot.core.Simulation.runContent(Simulation.java:221) at greenfoot.core.Simulation.run(Simulation.java:211)
