如果问题不清楚,我深表歉意,但我想不出另一种表达方式。
这是我整个周末都在 BlueJ 工作的课堂作业。我必须更改一种方法(反弹),让用户选择应该反弹多少球。
其他要求是:球应具有不同的大小,并应在它们反弹之前沿屏幕顶部连续显示。
为了做到这一点,我必须使用一个集合(ArrayList、HashMap、HashSet)。到目前为止,我已经使用了 HashMap 并且已经能够让用户选择一些随机大小的“球”,它们将自己放置在屏幕上半部分的随机位置。
当我尝试让每个球从屏幕顶部的位置反弹时,在右侧结束时,我卡住了。我可以让代码画一个球,反弹它然后再画另一个球,反弹它等等,直到用户选择的球数循环。
还有另外两个类,一个用于绘制画布,一个用于绘制球并移动它们。这两个我都不允许碰。
我做错的事情可能就在我面前,但我一直盯着这段代码很久,我想我会问。
我当前版本的代码如下所示:
import java.awt.Color;
import java.util.HashMap;
import java.util.Random;
import java.util.Iterator;
public class BallDemo
{
private Canvas myCanvas;
private HashMap<Integer, BouncingBall> ballMap;
private int n;
private int j;
private BouncingBall ball;
/**
* Create a BallDemo object. Creates a fresh canvas and makes it visible.
*/
public BallDemo()
{
myCanvas = new Canvas("Ball Demo", 600, 500);
}
我必须编辑以反弹球的方法:
public void bounce(int numBalls)
{
ballMap = new HashMap<Integer, BouncingBall>();
int ground = 400; // position of the ground line
Random randomD1 = new Random();
Random xpos = new Random();
myCanvas.setVisible(true);
// draw the ground
myCanvas.drawLine(50, ground, 550, ground);
// add balls to HashMap
for(n = 0; n < numBalls; n++) {
ballMap.put(numBalls, (ball = new BouncingBall(xpos.nextInt(300), 50, randomD1.nextInt(200), Color.BLUE, ground, myCanvas)));
//
for(j= 0; j < ballMap.size(); j++) {
ball.draw();
boolean finished = false;
while(!finished) {
myCanvas.wait(50); // small delay
ball.move(); // bounce the ball
// stop once ball has travelled a certain distance on x axis
if(ball.getXPosition() >= 550) {
finished = true;
}
}
}
}
}
}
我是否使用 HashMap 在正确的线路上?键、值的组合似乎是最好的方法。我想我需要以某种方式遍历集合中放置的项目,以使它们使用 move() 方法反弹。但首先我需要球保持在屏幕顶部的一排,无论用户定义了多少。
我是编程新手,我只是难过。
谢谢你的帮助!