Это из лаборатории, которая была сосредоточена на наследовании. Хотя я понимаю все аспекты наследования кода и успешно завершил лабораторную работу, теперь я хочу создать некий цикл, который будет запускать мою анимацию несколько раз.
Код, который я предоставляю, представляет собой анимацию фигур (точка, линия, текст, прямоугольник, квадрат, эллипс и круг), которые наследуют код друг от друга (например, линия, текст, прямоугольник, эллипс расширяет точку, квадрат расширяет прямоугольник, а круг расширяет эллипс).
В целом я хочу сделать этот код более эффективным в его исполнении.
package lab04.shapes;
import java.awt.Color;
/**
*
* This is an animated picture of an object falling out of one portal into another.
* The light gray Rectangle represents the beam in which the object transports through.
* A black Circle represents the object being transported.
* The two dark gray Ellipses represent the portals.
* The Squares represent the lights of the portal.
*
*/
public class Portal {
public static void main(String args[]) {
DrawableObjectList objList = new DrawableObjectList();
DrawingTablet tablet = new DrawingTablet("Mysterious Portal", 500, 500, objList);
// === Layout === //
Rectangle r1 = new Rectangle(200, 100, 235, 100, Color.gray);
objList.addDrawable(r1);
Square s1a = new Square(170, 100 , 20, Color.red);
objList.addDrawable(s1a);
Square s1b = new Square(310, 100, 20, Color.red);
objList.addDrawable(s1b);
Square s2a = new Square(170, 130, 20, Color.orange);
objList.addDrawable(s2a);
Square s2b = new Square(310, 130, 20, Color.orange);
objList.addDrawable(s2b);
Square s3a = new Square(170, 160, 20, Color.yellow);
objList.addDrawable(s3a);
Square s3b = new Square(310, 160, 20, Color.yellow);
objList.addDrawable(s3b);
Square s4a = new Square(170, 190, 20, Color.green);
objList.addDrawable(s4a);
Square s4b = new Square(310, 190, 20, Color.green);
objList.addDrawable(s4b);
Square s5a = new Square(170, 220, 20, Color.cyan);
objList.addDrawable(s5a);
Square s5b = new Square(310, 220, 20, Color.cyan);
objList.addDrawable(s5b);
Square s6a = new Square(170, 250, 20, Color.blue);
objList.addDrawable(s6a);
Square s6b = new Square(310, 250, 20, Color.blue);
objList.addDrawable(s6b);
Square s7a = new Square(170, 280, 20, Color.magenta);
objList.addDrawable(s7a);
Square s7b = new Square(310, 280, 20, Color.magenta);
objList.addDrawable(s7b);
Square s8a = new Square(170, 310, 20, Color.pink);
objList.addDrawable(s8a);
Square s8b = new Square(310, 310, 20, Color.pink);
objList.addDrawable(s8b);
Text t1 = new Text(185, 40, "Mysterious Portal Lit", Color.orange);
objList.addDrawable(t1);
Circle c1 = new Circle(250, 82, 25, Color.BLACK);
objList.addDrawable(c1);
Ellipse e1 = new Ellipse(250, 70, 50, 10, Color.darkGray);
objList.addDrawable(e1);
Ellipse e2 = new Ellipse(250, 375, 50, 10, Color.darkGray);
objList.addDrawable(e2);
/*
* Each time a change is made to the DrawableObjectList or to one of
* the Drawable objects that it contains you need to invoke repaint()
* on the DrawingTablet. This causes the Drawing tablet to repaint
* the scrren reflecting the changes.
*/
tablet.repaint();
/*
* sleep is a static method in the AnimationTimer class that causes
* the program to pause for a specified number of milliseconds when
* it is invoked. This line sleeps for 3 seconds.
*/
AnimationTimer.sleep(500);
// Object falls from the top Ellipse
// Each progression are the lights that are going to
// cycle down and return back to their original position
s1a.setColor(Color.red);
s1b.setColor(Color.red);
s2a.setColor(Color.orange);
s2b.setColor(Color.orange);
s3a.setColor(Color.yellow);
s3b.setColor(Color.yellow);
s4a.setColor(Color.green);
s4b.setColor(Color.green);
s5a.setColor(Color.cyan);
s5b.setColor(Color.cyan);
s6a.setColor(Color.blue);
s6b.setColor(Color.blue);
s7a.setColor(Color.magenta);
s7b.setColor(Color.magenta);
s8a.setColor(Color.pink);
s8b.setColor(Color.pink);
c1.move(250, 150);
tablet.repaint();
AnimationTimer.sleep(500);
// 1st Progression
s1a.setColor(Color.pink);
s1b.setColor(Color.pink);
s2a.setColor(Color.red);
s2b.setColor(Color.red);
s3a.setColor(Color.orange);
s3b.setColor(Color.orange);
s4a.setColor(Color.yellow);
s4b.setColor(Color.yellow);
s5a.setColor(Color.green);
s5b.setColor(Color.green);
s6a.setColor(Color.cyan);
s6b.setColor(Color.cyan);
s7a.setColor(Color.blue);
s7b.setColor(Color.blue);
s8a.setColor(Color.magenta);
s8b.setColor(Color.magenta);
c1.move(250, 180);
tablet.repaint();
AnimationTimer.sleep(500);
// 2nd Progression
s1a.setColor(Color.magenta);
s1b.setColor(Color.magenta);
s2a.setColor(Color.pink);
s2b.setColor(Color.pink);
s3a.setColor(Color.red);
s3b.setColor(Color.red);
s4a.setColor(Color.orange);
s4b.setColor(Color.orange);
s5a.setColor(Color.yellow);
s5b.setColor(Color.yellow);
s6a.setColor(Color.green);
s6b.setColor(Color.green);
s7a.setColor(Color.cyan);
s7b.setColor(Color.cyan);
s8a.setColor(Color.blue);
s8b.setColor(Color.blue);;
c1.move(250, 210);
tablet.repaint();
AnimationTimer.sleep(500);
// 3rd Progression
s1a.setColor(Color.blue);
s1b.setColor(Color.blue);
s2a.setColor(Color.magenta);
s2b.setColor(Color.magenta);
s3a.setColor(Color.pink);
s3b.setColor(Color.pink);
s4a.setColor(Color.red);
s4b.setColor(Color.red);
s5a.setColor(Color.orange);
s5b.setColor(Color.orange);
s6a.setColor(Color.yellow);
s6b.setColor(Color.yellow);
s7a.setColor(Color.green);
s7b.setColor(Color.green);
s8a.setColor(Color.cyan);
s8b.setColor(Color.cyan);
c1.move(250, 240);
tablet.repaint();
AnimationTimer.sleep(500);
// 4th Progression
s1a.setColor(Color.green);
s1b.setColor(Color.green);
s2a.setColor(Color.cyan);
s2b.setColor(Color.cyan);
s3a.setColor(Color.blue);
s3b.setColor(Color.blue);
s4a.setColor(Color.magenta);
s4b.setColor(Color.magenta);
s5a.setColor(Color.pink);
s5b.setColor(Color.pink);
s6a.setColor(Color.red);
s6b.setColor(Color.red);
s7a.setColor(Color.orange);
s7b.setColor(Color.orange);
s8a.setColor(Color.yellow);
s8b.setColor(Color.yellow);
c1.move(250, 270);
tablet.repaint();
AnimationTimer.sleep(500);
// 5th Progression
s1a.setColor(Color.yellow);
s1b.setColor(Color.yellow);
s2a.setColor(Color.green);
s2b.setColor(Color.green);
s3a.setColor(Color.cyan);
s3b.setColor(Color.cyan);
s4a.setColor(Color.blue);
s4b.setColor(Color.blue);
s5a.setColor(Color.magenta);
s5b.setColor(Color.magenta);
s6a.setColor(Color.pink);
s6b.setColor(Color.pink);
s7a.setColor(Color.red);
s7b.setColor(Color.red);
s8a.setColor(Color.orange);
s8b.setColor(Color.orange);
c1.move(250, 300);
tablet.repaint();
AnimationTimer.sleep(500);
// 6th Progression
s1a.setColor(Color.orange);
s1b.setColor(Color.orange);
s2a.setColor(Color.yellow);
s2b.setColor(Color.yellow);
s3a.setColor(Color.green);
s3b.setColor(Color.green);
s4a.setColor(Color.cyan);
s4b.setColor(Color.cyan);
s5a.setColor(Color.blue);
s5b.setColor(Color.blue);
s6a.setColor(Color.magenta);
s6b.setColor(Color.magenta);
s7a.setColor(Color.pink);
s7b.setColor(Color.pink);
s8a.setColor(Color.red);
s8b.setColor(Color.red);
c1.move(250, 330);
tablet.repaint();
AnimationTimer.sleep(500);
// 7th Progression
s1a.setColor(Color.red);
s1b.setColor(Color.red);
s2a.setColor(Color.orange);
s2b.setColor(Color.orange);
s3a.setColor(Color.yellow);
s3b.setColor(Color.yellow);
s4a.setColor(Color.green);
s4b.setColor(Color.green);
s5a.setColor(Color.cyan);
s5b.setColor(Color.cyan);
s6a.setColor(Color.blue);
s6b.setColor(Color.blue);
s7a.setColor(Color.magenta);
s7b.setColor(Color.magenta);
s8a.setColor(Color.pink);
s8b.setColor(Color.pink);
c1.move(250, 360);
tablet.repaint();
AnimationTimer.sleep(500);
// Circle disappears when reaches the bottom portal
// The lights have cycled through to their starting position
s1a.setColor(Color.red);
s1b.setColor(Color.red);
s2a.setColor(Color.orange);
s2b.setColor(Color.orange);
s3a.setColor(Color.yellow);
s3b.setColor(Color.yellow);
s4a.setColor(Color.green);
s4b.setColor(Color.green);
s5a.setColor(Color.cyan);
s5b.setColor(Color.cyan);
s6a.setColor(Color.blue);
s6b.setColor(Color.blue);
s7a.setColor(Color.magenta);
s7b.setColor(Color.magenta);
s8a.setColor(Color.pink);
s8b.setColor(Color.pink);
c1.setVisible(false);
tablet.repaint();
AnimationTimer.sleep(500);
}
}
1 ответ
Чтобы изменить цвета, может быть, это лучше
private void changeColors(List<DrawableObjectList> objList) {
//distinct square in vetor
List<Square> squareList = new ArrayList<>();
objList.stream().filter(r -> r instanceof Square).map (r -> (Square) r).forEach(r-> squareList.add(r));
//new vetor with new colors
List<Square> newColors = new ArrayList<>();
squareList.stream().forEach(r-> newColors.add(squareList.indexOf(r)>1? squareList.get(squareList.indexOf(r)-2):squareList.get(squareList.size()-1)));
//now is just add new vetor newColors to main vetor objList, you can filter again using this .filter(r -> r instanceof Square).map (r -> (Square) r);
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.