Skip to content

Commit 665f73e

Browse files
committed
Chapter 02 section 07 updated.
1 parent 3c77b3f commit 665f73e

File tree

6 files changed

+43
-31
lines changed

6 files changed

+43
-31
lines changed

02-Java-Swing-Basics/07-Animation-Basics/src/AlgoFrame.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public AlgoFrame(String title){
3939

4040
// data
4141
private Circle[] circles;
42-
public void setCircles(Circle[] circles){
42+
public void render(Circle[] circles){
4343
this.circles = circles;
4444
repaint();
4545
}
@@ -68,7 +68,7 @@ public void paintComponent(Graphics g) {
6868
AlgoVisHelper.setStrokeWidth(g2d,1);
6969
AlgoVisHelper.setColor(g2d, Color.RED);
7070
for(Circle circle: circles)
71-
AlgoVisHelper.strokeCircle(g2d, circle.x, circle.y, circle.r);
71+
AlgoVisHelper.strokeCircle(g2d, circle.x, circle.y, circle.getR());
7272
}
7373

7474
@Override

02-Java-Swing-Basics/07-Animation-Basics/src/AlgoVisHelper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ public class AlgoVisHelper {
77

88
private AlgoVisHelper(){}
99

10-
static public void strokeCircle(Graphics2D g, int x, int y, int r){
10+
public static void strokeCircle(Graphics2D g, int x, int y, int r){
1111

1212
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
1313
g.draw(circle);
1414
}
1515

16-
static public void fillCircle(Graphics2D g, int x, int y, int r){
16+
public static void fillCircle(Graphics2D g, int x, int y, int r){
1717

1818
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
1919
g.fill(circle);
2020
}
2121

22-
static public void setColor(Graphics2D g, Color color){
22+
public static void setColor(Graphics2D g, Color color){
2323
g.setColor(color);
2424
}
2525

26-
static public void setStrokeWidth(Graphics2D g, int w){
26+
public static void setStrokeWidth(Graphics2D g, int w){
2727
int strokeWidth = w;
2828
g.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
2929
}

02-Java-Swing-Basics/07-Animation-Basics/src/Circle.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ public class Circle {
33

44
public int x;
55
public int y;
6-
public int r;
6+
private int r;
7+
78
public int vx;
89
public int vy;
910

@@ -15,9 +16,21 @@ public Circle(int x, int y, int r, int vx, int vy){
1516
this.vy = vy;
1617
}
1718

18-
public void move(){
19+
public int getR(){return r;}
20+
21+
public void move(int minx, int miny, int maxx, int maxy){
1922
x += vx;
2023
y += vy;
24+
25+
checkCollision(minx, miny, maxx, maxy);
26+
}
27+
28+
private void checkCollision(int minx, int miny, int maxx, int maxy){
29+
30+
if(x - r < minx) { x = r; vx = -vx; }
31+
if(x + r >= maxx){ x = maxx - r; vx = -vx; }
32+
if(y - r < miny) { y = r; vy = -vy; }
33+
if(y + r >= maxy){ y = maxy - r; vy = -vy; }
2134
}
2235

2336
}

02-Java-Swing-Basics/07-Animation-Basics/src/Main.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,31 @@ public static void main(String[] args) {
88
int sceneWidth = 800;
99
int sceneHeight = 800;
1010

11+
// init data
12+
int N = 10;
13+
Circle[] circles = new Circle[N];
14+
int R = 50;
15+
16+
for(int i = 0 ; i < N ; i ++ ) {
17+
int x = (int)(Math.random()*(sceneWidth-2*R)) + R;
18+
int y = (int)(Math.random()*(sceneHeight-2*R)) + R;
19+
int vx = (int)(Math.random()*11) - 5;
20+
int vy = (int)(Math.random()*11) - 5;
21+
circles[i] = new Circle(x, y, R, vx, vy);
22+
}
23+
1124
EventQueue.invokeLater(() -> {
1225
AlgoFrame frame = new AlgoFrame("Welcome", sceneWidth,sceneHeight);
1326

14-
// init data
15-
int N = 10;
16-
Circle[] circles = new Circle[N];
17-
int R = 50;
18-
19-
for(int i = 0 ; i < N ; i ++ ) {
20-
int x = (int)(Math.random()*(sceneWidth-2*R)) + R;
21-
int y = (int)(Math.random()*(sceneHeight-2*R)) + R;
22-
int vx = (int)(Math.random()*11) - 5;
23-
int vy = (int)(Math.random()*11) - 5;
24-
circles[i] = new Circle(x, y, R, vx, vy);
25-
}
26-
2727
new Thread(() -> {
2828
while(true) {
2929
// 绘制数据
30-
frame.setCircles(circles);
30+
frame.render(circles);
3131
AlgoVisHelper.pause(20);
3232

3333
// 更新数据
34-
for(Circle circle: circles)
35-
circle.move();
34+
for(Circle circle : circles)
35+
circle.move(0, 0, sceneWidth, sceneHeight);
3636
}
3737
}).start();
3838
});

02-Java-Swing-Basics/08-MVC-in-Algorithm-Visualization/src/AlgoVisualizer.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ public class AlgoVisualizer {
88
static private int R = 50;
99
private AlgoFrame frame;
1010

11-
public AlgoVisualizer(int N, AlgoFrame frame){
12-
this.N = N;
13-
this.frame = frame;
11+
public AlgoVisualizer(int sceneWidth, int sceneHeight, int N){
12+
13+
this.frame = new AlgoFrame("Welcome", sceneWidth, sceneHeight);
1414

15+
this.N = N;
1516
circles = new Circle[N];
1617

1718
for(int i = 0 ; i < N ; i ++ ) {
@@ -40,12 +41,10 @@ public static void main(String[] args) {
4041

4142
int sceneWidth = 800;
4243
int sceneHeight = 800;
44+
int N = 10;
4345

4446
EventQueue.invokeLater(() -> {
45-
AlgoFrame frame = new AlgoFrame("Welcome", sceneWidth,sceneHeight);
46-
47-
int N = 10;
48-
AlgoVisualizer vis = new AlgoVisualizer(N, frame);
47+
AlgoVisualizer vis = new AlgoVisualizer(sceneWidth, sceneHeight, N);
4948
new Thread(() -> {
5049
vis.run();
5150
}).start();

02-Java-Swing-Basics/Chapter-02.key

18 KB
Binary file not shown.

0 commit comments

Comments
 (0)