-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTraffic.java
More file actions
129 lines (109 loc) · 3.8 KB
/
Traffic.java
File metadata and controls
129 lines (109 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package traffictester;
import java.util.Random;
public class Traffic {
private final int EMPTY = 0;
private final int PLUS = 1;
private final int MINUS = 2;
private int[][] array;
private int size;
private int iterations;
private double density;
private Random random;
private TrafficDrawer drawer;
//Consturtor of Traffic class
public Traffic(int size, int iterations, double density, int seed)
{
this.array = new int[size][size];
this.size = size;
this.iterations = iterations;
this.density = density;
this.random = new Random(seed);
this.drawer = new TrafficDrawer(array, size);
}
//Method runs simulation
public void run()
{
//intialize vehicles
initialize();
//run iterations
for (int n = 0; n < iterations; n++)
{
//draw array
draw();
//update vehicles
for (int m = 0; m < size * size; m++)
{
//pick a location randomly
int i = random.nextInt(size);
int j = random.nextInt(size);
//if down moving vehicle
if (array[i][j] == PLUS)
{
if (array[(i + 1) % size][j] == EMPTY)
{
array[i][j] = EMPTY;
array[(i + 1) % size][j] = PLUS;
}
else if (array[i][(j + 1) % size] == EMPTY)
{
array[i][j] = EMPTY;
array[i][(j + 1) % size] = PLUS;
}
else if (j != 0)
{
if (array[i][(j - 1) % size] == EMPTY)
{
array[i][j] = EMPTY;
array[i][(j - 1) % size] = PLUS;
}
}
}
//if right moving vehicle
if (array[i][j] == MINUS)
{
if (array[i][(j + 1) % size] == EMPTY)
{
array[i][j] = EMPTY;
array[i][(j + 1) % size] = MINUS;
}
else if (array[(i + 1) % size][j] == EMPTY)
{
array[i][j] = EMPTY;
array[(i + 1) % size][j] = MINUS;
}
else if (j != 0 ) {
if (array[i][(j - 1) % size] == EMPTY)
{
array[i][j] = EMPTY;
array[i][(j - 1) % size] = MINUS;
}
}
}
}
}
}
//Method initialize vehicles
private void initialize()
{
//go through al locations
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++)
{
if (random.nextDouble() < density)
{
if (random.nextDouble() < 0.5)
array[i][j] = PLUS;
else
array[i][j] = MINUS;
}
else
array[i][j] = EMPTY;
}
}
//Method draws array of vehicles
private void draw()
{
drawer.repaint(); //repaint
try {Thread.sleep(100);} catch(Exception e){} //pause
}
}