Ich bekomme einen Fehler außerhalb der Reichweite für meine Kugeln Array und ich weiß nicht warum. Ich habe es i von 0 bis 1000 durchlaufen, aber es sagt, es ist außerhalb der Reichweite. Ich habe das Array auch auf 1000 eingestellt. Ich verstehe nicht, warum ich größer als 1000 bin. Danke!Warum ist der Bereich der Kugeln größer als 1000
import java.awt.event.KeyEvent;
public class VideoGame {
public static void main(String[] args) {
while (true) {
StdDraw.enableDoubleBuffering();
int score = 0;
// background variable
double backX = .5;
double backY = .5;
double backWidth = 1.25;
double backLength = 1.25;
// draw player coordinates
double playerX = .5;
double playerY = .2;
double playWidth = .1;
double playLength = .1;
// bullets array
double[] bulletsX = new double[1000];
double[] bulletsY = new double[1000];
double[] bulletsDX = new double[1000];
double[] bulletsDY = new double[1000];
boolean[] visible = new boolean[1000];
int lastBullet = 0;
boolean mouseWasPressed = false;
double bWidth = 0.05;
double bLength = .05;
// meteors array
double[] meteorsX = new double[10000];
double[] meteorsY = new double[10000];
double[] meteorsDX = new double[10000];
double[] meteorsDY = new double[10000];
boolean[] meteorsVisible = new boolean[10000];
int lastMeteor = 0;
double meteorWidth = .15;
double meteorLength = .15;
/* double[] meteorsRightX = new double[10000];
double[] meteorsRightY = new double[10000];
double[] meteorsRightDX = new double[10000];
double[] meteorsRightDY = new double[10000];
boolean[] meteorsRightVisible = new boolean[10000];
int lastRightMeteor = 0;
double rightMeteorWidth = .08;
double rightMeteorLength = .08;*/
for (int i = 0; i < 5000; i++) {
meteorsX[i] = Math.random() * (-0.1 - -0.2) + -0.2;
meteorsY[i] = Math.random() * (1.0 - 0.5) + 0.5;
meteorsDX[i] = Math.random() * (0.01 - -0.01) + -0.01;
meteorsDY[i] = Math.random() * (0.0005 - -0.002) + -0.002;
}
for (int i = 5000; i < 10000; i++) {
meteorsX[i] = Math.random() * (1.2 - 1.1) + 1.1;
meteorsY[i] = Math.random() * (1.0 - 0.5) + 0.5;
meteorsDX[i] = Math.random() * (-0.01 - -0.01) - 0.01;
meteorsDY[i] = Math.random() * (0.0008 - 0.002) + -0.002;
}
//StdDraw.picture(backX, backY, "GameBackground.png");
boolean gameOver = false;
while (gameOver == false) {
StdDraw.clear();
// draw background
StdDraw.picture(backX, backY, "GameBackground.png", backWidth, backLength);
StdDraw.picture(playerX, playerY, "GamePlayer.png", playWidth, playLength);
// keep score
//move character
if (StdDraw.isKeyPressed(KeyEvent.VK_W)) {
playerY += .005;
} else if (StdDraw.isKeyPressed(KeyEvent.VK_S)) {
playerY -= .005;
} else if (StdDraw.isKeyPressed(KeyEvent.VK_A)) {
playerX -= .005;
} else if (StdDraw.isKeyPressed(KeyEvent.VK_D)) {
playerX += .005;
}
if (StdDraw.mousePressed() && !mouseWasPressed) {
mouseWasPressed = true;
visible[lastBullet] = true;
meteorsVisible[lastMeteor] = true;
StdAudio.play("shoot.wav");
bulletsX[lastBullet] = playerX;
bulletsY[lastBullet] = playerY;
bulletsDX[lastBullet] = 0;
bulletsDY[lastBullet] = .02;
lastBullet++;
lastMeteor++;
if (lastBullet >= 1000) {
StdDraw.text(.5, .5, "You lost, because you ran out of ammo. Press space to play again!");
gameOver = true;
}
}
if (!StdDraw.mousePressed()) {
mouseWasPressed = false;
}
//draw the bullets
for (int i = 0; i < bulletsX.length; i++) {
if (visible[i]) {
StdDraw.picture(bulletsX[i], bulletsY[i] + .09, "lazer.png", bWidth, bLength);
bulletsX[i] += bulletsDX[i];
bulletsY[i] += bulletsDY[i];
}
}
for (int i = 0; i < bulletsX.length; i++) {
for (int j = 0; j < meteorsX.length; i++) {
//draw the meteors
if (meteorsVisible[j] == true) {
StdDraw.picture(meteorsX[j], meteorsY[j], "meteor.png", meteorLength, meteorWidth);
// StdDraw.picture(meteorsX[5000 + j], meteorsY[5000 +j],"meteor.png", meteorLength, meteorWidth);
meteorsX[j] += meteorsDX[j];
meteorsY[j] += meteorsDY[j];
meteorsX[5000 + j] += meteorsDX[j];
meteorsY[5000 + j] += meteorsDY[j];
}
/* if(meteorsVisible[i])
{
StdDraw.picture(meteorsX[i], meteorsY[i],"meteor.png", meteorLength, meteorWidth);
meteorsX[i] += meteorsDX[i];
meteorsY[i] += meteorsDY[i];
}*/
// collision detection
double xDiff = playerX - meteorsX[j];
double yDiff = playerY - meteorsY[j];
double xDiffBullets = bulletsX[i] - meteorsX[j];
double yDiffBullets = bulletsY[i] - meteorsY[j];
double xDiff2 = playerX - meteorsX[5000 + j];
double yDiff2 = playerY - meteorsY[5000 + j];
double xDiffBullets2 = bulletsX[i] - meteorsX[5000 + j];
double yDiffBullets2 = bulletsY[i] - meteorsY[5000 + j];
double meteorRadius = .02;
double playerRadius = .03;
double bulletRadius = .42;
double distance = Math.sqrt(xDiff * xDiff + yDiff * yDiff);
double distanceB = Math.sqrt(xDiffBullets * xDiffBullets + yDiffBullets * yDiffBullets);
double distance2 = Math.sqrt(xDiff2 * xDiff2 + yDiff2 * yDiff2);
double distanceB2 = Math.sqrt(xDiffBullets2 * xDiffBullets2 + yDiffBullets2 * yDiffBullets2);
if (distance < (playerRadius + meteorRadius) || distance2 < (playerRadius + meteorRadius)) {
StdDraw.setPenColor(StdDraw.WHITE);
StdDraw.picture(playerX, playerY, "explosion.png", .3, .3);
StdDraw.text(0.5, 0.85, "You lose. Pess space to play again!");
StdAudio.play("shipExplosion.wav");
StdDraw.show();
gameOver = true;
}
if (distanceB < (bulletRadius + meteorRadius) || distanceB2 < (bulletRadius + meteorRadius)) {
score++;
meteorsVisible[i] = false;
}
StdDraw.setPenColor(StdDraw.WHITE);
StdDraw.text(.85, .95, "Score:");
StdDraw.text(.95, .95, String.valueOf(score));
}
}
StdDraw.show();
StdDraw.pause(1000/60);
}
while (!StdDraw.isKeyPressed(KeyEvent.VK_SPACE)) {
}
}
}
}
Müssen Sie uns wirklich so viel Code zeigen? Sie sollten wissen, in welcher Zeile der Fehler auftritt. –
Es wird nicht der gesamte Code benötigt, wenn Sie keine anderen Klassen wie "StdDraw" oder "StdAudio" anzeigen. –
'double [] bulletsX = new double [1000];' – matt