Skip to content

Commit 9447475

Browse files
committed
Chapter 06 codes updated.
1 parent 5e45ddb commit 9447475

File tree

70 files changed

+843
-2127
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+843
-2127
lines changed

06-Maze-Generalization/02-Maze-Generalization-Basics/src/AlgoFrame.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
import java.awt.Graphics2D;
2-
import java.awt.Graphics;
3-
import java.awt.Dimension;
4-
import java.awt.Color;
5-
import java.awt.RenderingHints;
6-
1+
import java.awt.*;
72
import javax.swing.*;
83

94
public class AlgoFrame extends JFrame{
105

116
private int canvasWidth;
127
private int canvasHeight;
13-
private JPanel canvas;
148

159
public AlgoFrame(String title, int canvasWidth, int canvasHeight){
1610

@@ -38,8 +32,8 @@ public AlgoFrame(String title){
3832
public int getCanvasHeight(){return canvasHeight;}
3933

4034
// data
41-
MazeData data;
42-
public void setData(MazeData data){
35+
private MazeData data;
36+
public void render(MazeData data){
4337
this.data = data;
4438
repaint();
4539
}

06-Maze-Generalization/02-Maze-Generalization-Basics/src/AlgoVisHelper.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,35 +32,35 @@ private AlgoVisHelper(){}
3232
public static final Color White = new Color(0xFFFFFF);
3333

3434

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

3737
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
3838
g.draw(circle);
3939
}
4040

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

4343
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
4444
g.fill(circle);
4545
}
4646

47-
static public void strokeRectangle(Graphics2D g, int x, int y, int w, int h){
47+
public static void strokeRectangle(Graphics2D g, int x, int y, int w, int h){
4848

4949
Rectangle2D rectangle = new Rectangle2D.Double(x, y, w, h);
5050
g.draw(rectangle);
5151
}
5252

53-
static public void fillRectangle(Graphics2D g, int x, int y, int w, int h){
53+
public static void fillRectangle(Graphics2D g, int x, int y, int w, int h){
5454

5555
Rectangle2D rectangle = new Rectangle2D.Double(x, y, w, h);
5656
g.fill(rectangle);
5757
}
5858

59-
static public void setColor(Graphics2D g, Color color){
59+
public static void setColor(Graphics2D g, Color color){
6060
g.setColor(color);
6161
}
6262

63-
static public void setStrokeWidth(Graphics2D g, int w){
63+
public static void setStrokeWidth(Graphics2D g, int w){
6464
int strokeWidth = w;
6565
g.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
6666
}
Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,47 @@
11
import java.awt.*;
2-
import java.util.Random;
3-
import java.util.Arrays;
42

53
public class AlgoVisualizer {
64

7-
private static int DELAY = 40;
5+
private static int DELAY = 5;
6+
private static int blockSide = 8;
87

98
private MazeData data;
109
private AlgoFrame frame;
1110

12-
public AlgoVisualizer(AlgoFrame frame, MazeData data){
11+
public AlgoVisualizer(int N, int M){
1312

14-
this.frame = frame;
15-
this.data = data;
13+
// 初始化数据
14+
data = new MazeData(N, M);
15+
int sceneHeight = data.N() * blockSide;
16+
int sceneWidth = data.M() * blockSide;
1617

17-
this.setData();
18+
// 初始化视图
19+
EventQueue.invokeLater(() -> {
20+
frame = new AlgoFrame("Random Maze Generation Visualization", sceneWidth, sceneHeight);
21+
22+
new Thread(() -> {
23+
run();
24+
}).start();
25+
});
1826
}
1927

20-
public void run(){
28+
private void run(){
29+
30+
setData();
2131

22-
this.setData();
23-
AlgoVisHelper.pause(DELAY);
2432
}
2533

2634
private void setData(){
27-
frame.setData(data);
35+
frame.render(data);
36+
AlgoVisHelper.pause(DELAY);
2837
}
2938

3039
public static void main(String[] args) {
3140

32-
int sceneWidth = 808;
33-
int sceneHeight = 808;
34-
int blockSide = 8;
35-
36-
EventQueue.invokeLater(() -> {
37-
AlgoFrame frame = new AlgoFrame("Maze Generation Visualization", sceneWidth,sceneHeight);
41+
int N = 101;
42+
int M = 101;
3843

39-
int N = sceneHeight/blockSide;
40-
int M = sceneWidth/blockSide;
44+
AlgoVisualizer vis = new AlgoVisualizer(N, M);
4145

42-
MazeData data = new MazeData(N, M);
43-
AlgoVisualizer vis = new AlgoVisualizer(frame, data);
44-
new Thread(() -> {
45-
vis.run();
46-
}).start();
47-
});
4846
}
4947
}

06-Maze-Generalization/02-Maze-Generalization-Basics/src/MazeData.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ public class MazeData {
66
private int N, M;
77
public char[][] maze;
88

9+
private int entranceX, entranceY;
10+
private int exitX, exitY;
11+
912
public MazeData(int N, int M){
1013

1114
if( N%2 == 0 || M%2 == 0)
@@ -18,16 +21,23 @@ public MazeData(int N, int M){
1821
for(int i = 0 ; i < N ; i ++)
1922
for(int j = 0 ; j < M ; j ++)
2023
if(i%2 == 1 && j%2 == 1)
21-
maze[i][j] = ' ';
24+
maze[i][j] = ROAD;
2225
else
23-
maze[i][j] = '#';
24-
}
26+
maze[i][j] = WALL;
2527

26-
public int N(){
27-
return N;
28-
}
28+
entranceX = 1;
29+
entranceY = 0;
30+
exitX = N - 2;
31+
exitY = M - 1;
2932

30-
public int M(){
31-
return M;
33+
maze[entranceX][entranceY] = ROAD;
34+
maze[exitX][exitY] = ROAD;
3235
}
36+
37+
public int N(){return N;}
38+
public int M(){return M;}
39+
public int getEntranceX(){return entranceX;}
40+
public int getEntranceY(){return entranceY;}
41+
public int getExitX(){return exitX;}
42+
public int getExitY(){return exitY;}
3343
}

06-Maze-Generalization/03-DFS-Maze-Generalization/src/AlgoFrame.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
import java.awt.Graphics2D;
2-
import java.awt.Graphics;
3-
import java.awt.Dimension;
4-
import java.awt.Color;
5-
import java.awt.RenderingHints;
6-
1+
import java.awt.*;
72
import javax.swing.*;
83

94
public class AlgoFrame extends JFrame{
105

116
private int canvasWidth;
127
private int canvasHeight;
13-
private JPanel canvas;
148

159
public AlgoFrame(String title, int canvasWidth, int canvasHeight){
1610

@@ -38,8 +32,8 @@ public AlgoFrame(String title){
3832
public int getCanvasHeight(){return canvasHeight;}
3933

4034
// data
41-
MazeData data;
42-
public void setData(MazeData data){
35+
private MazeData data;
36+
public void render(MazeData data){
4337
this.data = data;
4438
repaint();
4539
}

06-Maze-Generalization/03-DFS-Maze-Generalization/src/AlgoVisHelper.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,35 +32,35 @@ private AlgoVisHelper(){}
3232
public static final Color White = new Color(0xFFFFFF);
3333

3434

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

3737
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
3838
g.draw(circle);
3939
}
4040

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

4343
Ellipse2D circle = new Ellipse2D.Double(x-r, y-r, 2*r, 2*r);
4444
g.fill(circle);
4545
}
4646

47-
static public void strokeRectangle(Graphics2D g, int x, int y, int w, int h){
47+
public static void strokeRectangle(Graphics2D g, int x, int y, int w, int h){
4848

4949
Rectangle2D rectangle = new Rectangle2D.Double(x, y, w, h);
5050
g.draw(rectangle);
5151
}
5252

53-
static public void fillRectangle(Graphics2D g, int x, int y, int w, int h){
53+
public static void fillRectangle(Graphics2D g, int x, int y, int w, int h){
5454

5555
Rectangle2D rectangle = new Rectangle2D.Double(x, y, w, h);
5656
g.fill(rectangle);
5757
}
5858

59-
static public void setColor(Graphics2D g, Color color){
59+
public static void setColor(Graphics2D g, Color color){
6060
g.setColor(color);
6161
}
6262

63-
static public void setStrokeWidth(Graphics2D g, int w){
63+
public static void setStrokeWidth(Graphics2D g, int w){
6464
int strokeWidth = w;
6565
g.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
6666
}
Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,69 @@
11
import java.awt.*;
2-
import java.util.Random;
3-
import java.util.Arrays;
42

53
public class AlgoVisualizer {
64

7-
private static int DELAY = 40;
5+
private static int DELAY = 5;
6+
private static int blockSide = 8;
87

98
private MazeData data;
109
private AlgoFrame frame;
10+
private static final int d[][] = {{-1,0},{0,1},{1,0},{0,-1}};
1111

12-
public AlgoVisualizer(AlgoFrame frame, MazeData data){
12+
public AlgoVisualizer(int N, int M){
1313

14-
this.frame = frame;
15-
this.data = data;
14+
// 初始化数据
15+
data = new MazeData(N, M);
16+
int sceneHeight = data.N() * blockSide;
17+
int sceneWidth = data.M() * blockSide;
1618

17-
this.setData();
19+
// 初始化视图
20+
EventQueue.invokeLater(() -> {
21+
frame = new AlgoFrame("Random Maze Generation Visualization", sceneWidth, sceneHeight);
22+
23+
new Thread(() -> {
24+
run();
25+
}).start();
26+
});
1827
}
1928

20-
public void run(){
29+
private void run(){
2130

22-
// 设置迷宫的入口和出口
23-
data.maze[data.getEntranceX()][data.getEntranceY()] = MazeData.ROAD;
24-
data.maze[data.getExitX()][data.getExitY()] = MazeData.ROAD;
31+
setData(-1, -1);
2532

26-
genMazeByDFS(data.getEntranceX(), data.getEntranceY() + 1);
33+
go(data.getEntranceX(), data.getEntranceY()+1);
2734

28-
this.setData();
29-
AlgoVisHelper.pause(DELAY);
35+
setData(-1, -1);
3036
}
3137

32-
private final int d[][] = {{-1,0},{0,1},{1,0},{0,-1}};
33-
public void genMazeByDFS(int x, int y){
34-
35-
if(x < 0 || x >= data.N() || y < 0 || y >= data.M())
36-
throw new IllegalArgumentException("x, y out of index in genMaze function!");
38+
private void go(int x, int y){
3739

38-
if(x%2 ==0 || y%2 == 0)
39-
throw new IllegalArgumentException("invalid x, y value in genMaze function!");
40+
if(!data.inArea(x,y))
41+
throw new IllegalArgumentException("x,y are out of index in go function!");
4042

4143
data.visited[x][y] = true;
4244
for(int i = 0 ; i < 4 ; i ++){
4345
int newX = x + d[i][0]*2;
4446
int newY = y + d[i][1]*2;
4547
if(data.inArea(newX, newY) && !data.visited[newX][newY]){
46-
data.maze[x+d[i][0]][y+d[i][1]] = MazeData.ROAD;
47-
this.setData();
48-
AlgoVisHelper.pause(DELAY);
49-
genMazeByDFS(newX, newY);
48+
setData(x + d[i][0], y + d[i][1]);
49+
go(newX, newY);
5050
}
5151
}
5252
}
5353

54-
private void setData(){
55-
frame.setData(data);
54+
private void setData(int x, int y){
55+
if(data.inArea(x, y))
56+
data.maze[x][y] = MazeData.ROAD;
57+
frame.render(data);
58+
AlgoVisHelper.pause(DELAY);
5659
}
5760

5861
public static void main(String[] args) {
5962

60-
int sceneWidth = 808;
61-
int sceneHeight = 808;
62-
int blockSide = 8;
63-
64-
EventQueue.invokeLater(() -> {
65-
AlgoFrame frame = new AlgoFrame("Maze Generation Visualization", sceneWidth,sceneHeight);
63+
int N = 101;
64+
int M = 101;
6665

67-
int N = sceneHeight/blockSide;
68-
int M = sceneWidth/blockSide;
66+
AlgoVisualizer vis = new AlgoVisualizer(N, M);
6967

70-
MazeData data = new MazeData(N, M);
71-
AlgoVisualizer vis = new AlgoVisualizer(frame, data);
72-
new Thread(() -> {
73-
vis.run();
74-
}).start();
75-
});
7668
}
7769
}

0 commit comments

Comments
 (0)