- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的子弹数组出现超出范围的错误,但我不知道为什么。我让它从 0 - 1000 迭代 i,但它说它超出了范围。我也将数组设置为 1000。我不明白为什么 i 大于 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)) {
}
}
}
}
最佳答案
例如,您有一个条件:
lastBullet++;
lastMeteor++;
if (lastBullet >= 1000) {
StdDraw.text(.5, .5, "You lost, because you ran out of ammo. Press space to play again!");
gameOver = true;
}
这里只检查lastBullet,还可以多,尝试一下,例如:
if (lastBullet >= 999) {
关于java - 为什么子弹射程大于1000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723746/
是否可以用按钮替换 ul 元素符号?我知道您可以使用 CSS 更改为图像,但如果我想要一个实际的元素呢? 最佳答案 这不可能如您所问,但您也许可以效仿它: some button textL
我在让元素符号显示在无序列表中时遇到了一些问题。如果我更改 css 以在内部显示元素符号,它们应该向上,但紧挨着文本。我的伙伴想要的是元素符号显示在框架的最左侧,并且在它和文本之间有几个标签值的空间。
我正在使用 the Orbit component of Foundation 5并想知道是否有办法将出现在幻灯片下方的元素符号移动到幻灯片本身的内容区域中。基本上,将元素符号放在图片上方。 有很多
我有一个从 wordpress 帖子生成的 ul li 边栏。客户为每个 LI 的元素符号使用了不同的图像。与其手动添加单独的元素符号,不如从一组(比如说 10 个)选项中进行选择? 正在考虑 Jqu
我有一个带有方向键和 2 个按钮的游戏 handle 。所有这些都是数字的(不是模拟的)。 我有一个处理他们的事件的程序: -(void)gamepadTick:(float)delta {
稍微注释掉后,我发现当我在 JavaScript 中运行此命令时,我的无序列表中的元素符号消失了(每个“页面”都是我的无序列表中的一个元素。): pages[i].style.display = "b
假设我想存储所有子弹,任何人在我的游戏中射击以计算每帧的新位置等。 如果有 10 名玩家,并且每个人的射击速率为每秒 10 次射击,我们可能需要在 10 秒后跟踪 1000 个物体。 我们确实知道,数
这是我所拥有的: import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt
我正在通过 ant-design (antd) 库开发一个 reactjs 元素。我想在我的元素中使用 Carousel 组件。当我将内容的背景色 - 应显示在轮播内 - 设置为#FFF 时,元素符号
我是一名优秀的程序员,十分优秀!