Генерировать прыгающие шары, вызываемые из командной строки - JAVA - PullRequest
0 голосов
/ 23 апреля 2020

Итак, я хочу создать программу, которая генерирует прыгающие шары.

Эта программа вызывается из командной строки, и каждый аргумент имеет размер шара:

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);
}

Так что вы думаете?

...