Итак, я хочу создать программу, которая генерирует прыгающие шары.
Эта программа вызывается из командной строки, и каждый аргумент имеет размер шара:
java -cp biuoop-1.4.jar:bin MultipleBouncingBallsAnimation 12 2 3 4 2 9
Это создаст анимацию из 6 шаров размером 12, 2, 3, 4, 2 и 9 соответственно. Каждый шар будет запускаться в случайном месте на экране. Каждый шар будет начинаться с разной скоростью - мы хотим, чтобы большие шары были медленнее (но шары выше 50-го размера могут иметь одинаковую медленную скорость). Каждый шар меняет направление при попадании на границу окна.
Обратите внимание, что количество шариков не фиксировано - используйте массив для хранения шариков.
и этот код, который Я написал:
import biuoop.GUI;
import biuoop.DrawSurface;
import biuoop.Sleeper;
import java.util.Random;
import java.awt.Color;
public class MultipleBouncingBallsAnimation {
private Ball[] balls;
//constructor
public MultipleBouncingBallsAnimation(int arraySize) {
balls = new Ball[arraySize];
}
public Ball[] createBalls(int arraySize, int size) {
for (int i = 0; i < arraySize; i++) {
Random rand = new Random();
balls[i] = new Ball(new Point(rand.nextInt(400) + 1, rand.nextInt(300) + 1), size, java.awt.Color.BLUE);
}
return balls;
}
public void drawRandomBall(DrawSurface d, Ball[] balls) {
Sleeper sleeper = new Sleeper();
Random rand = new Random();
for (int i = 0; i < balls.length; i++){
if (balls[i].getSize() > 50) // slower speed for big balls
balls[i].setVelocity(1, 1);
else
balls[i].setVelocity(rand.nextInt(10) + 1, rand.nextInt(10) + 1); //smaller balls are faster
while (true) {
balls[i].moveOneStep(d.getHeight(), d.getWidth());
balls[i].drawOn(d);
sleeper.sleepFor(50); // wait for 50 milliseconds.
}
}
}
public static void main(String[] args) {
MultipleBouncingBallsAnimation example = new MultipleBouncingBallsAnimation(args.length);
GUI gui = new GUI("Multiple Balls Bouncing", 400, 300);
DrawSurface d = gui.getDrawSurface();
for (int i = 0; i < args.length; i++) {
Ball[] balls = example.createBalls(args.length,Integer.parseInt(args[i]));
example.drawRandomBall(d, balls);
}
gui.show(d);
}
}
Компилируется и открывается пустое java окно. Нет рисования на всех. Ни одного шара.
Это объяснение пакета, который я использовал: http://planet.cs.biu.ac.il/~kleinay/biuoop-1.4-doc/
Моя основа c Идея была:
-создать функцию, которая создает массив шариков и генерирует их по заданному размеру из командной строки через аргументы [i].
создать функцию который запускает все oop через массив шаров, и др aws их (с анимацией).
вот и все.
Что ты мне точно знаешь? Все функции, которые здесь используются, работают на 100%. Я говорю о: setVelocity, moveOneStep. Я знаю это, потому что, как я уже сказал, это последняя часть очень очень длинного проекта, поэтому я использовал эти функции в предыдущих частях программы. (Предыдущая часть создавала только один прыгающий мяч, и мне удалось сделать это с помощью кодов, которые я здесь использую).
moveOneStep:
public void moveOneStep(int width, int height) {
if (this.center.getX() + this.getVelocity().dx + r > width) {
this.setVelocity(-(this.getVelocity().dx), this.getVelocity().dy);
}
if (this.center.getX() + this.getVelocity().dx < 0) {
this.setVelocity(-(this.getVelocity().dx), this.getVelocity().dy);
}
if (this.center.getY() + this.getVelocity().dy + r > height) {
this.setVelocity(this.getVelocity().dx, -(this.getVelocity().dy));
}
if (this.center.getY() + this.getVelocity().dy < 0) {
this.setVelocity(this.getVelocity().dx, -(this.getVelocity().dy));
}
moveOneStep();
}
public void moveOneStep() {
this.center = this.getVelocity().applyToPoint(this.center);
}
Так что вы думаете?