Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9447475

Browse files
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+
privateMazeData 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-
staticpublic void strokeCircle(Graphics2D g, int x, int y, int r){
35+
publicstatic 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-
staticpublic void fillCircle(Graphics2D g, int x, int y, int r){
41+
publicstatic 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-
staticpublic void strokeRectangle(Graphics2D g, int x, int y, int w, int h){
47+
publicstatic 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-
staticpublic void fillRectangle(Graphics2D g, int x, int y, int w, int h){
53+
publicstatic 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-
staticpublic void setColor(Graphics2D g, Color color){
59+
publicstatic void setColor(Graphics2D g, Color color){
6060
g.setColor(color);
6161
}
6262

63-
staticpublic void setStrokeWidth(Graphics2D g, int w){
63+
publicstatic 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(AlgoFrameframe, MazeDatadata){
11+
public AlgoVisualizer(intN, intM){
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-
publicintM(){
31-
returnM;
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+
privateMazeData 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-
staticpublic void strokeCircle(Graphics2D g, int x, int y, int r){
35+
publicstatic 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-
staticpublic void fillCircle(Graphics2D g, int x, int y, int r){
41+
publicstatic 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-
staticpublic void strokeRectangle(Graphics2D g, int x, int y, int w, int h){
47+
publicstatic 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-
staticpublic void fillRectangle(Graphics2D g, int x, int y, int w, int h){
53+
publicstatic 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-
staticpublic void setColor(Graphics2D g, Color color){
59+
publicstatic void setColor(Graphics2D g, Color color){
6060
g.setColor(color);
6161
}
6262

63-
staticpublic void setStrokeWidth(Graphics2D g, int w){
63+
publicstatic 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(AlgoFrameframe, MazeDatadata){
12+
public AlgoVisualizer(intN, intM){
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)

AltStyle によって変換されたページ (->オリジナル) /