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
|
package OO14route66;
import com.camilstaps.route66.Driver;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
/**
* OO1route66 initial class
* @author Pieter Koopman
*
* Class for an individual car
*/
public class Car
{
public static final int
CARWIDTH = 20,
CARLENGTH = 40,
MINCARSPACE = 5,
MINCARSPEED = 2,
MAXCARSPEED = 4;
public static final Color[] carColors={Color.red, Color.blue, Color.black, Color.gray, Color.green,
Color.pink, Color.orange, Color.magenta, Color.lightGray};
private final int speed, number; // speed and car-number
private final Direction direction; // driving direction, used by paint
private int location; // current location on the road
private final Color color; // color of this car
private final Random random; // here to ensure that every car gets a new
private final Driver driver;
private final Model model;
/**
* The constructor
* @param number of the car
*/
public Car(int number, Model model) {
this.number = number;
random = new Random();
speed = MINCARSPEED + random.nextInt(MAXCARSPEED - MINCARSPEED + 1);
direction = Direction.intToDirection(number);
location = RoadView.WINDOWSIZE - 2 - (number/Model.DIRECTIONS) * (CARLENGTH + MINCARSPACE);
color = carColors[number % carColors.length];
driver = new Driver(this);
this.model = model;
}
public Driver getDriver() {
return driver;
}
public Direction getDirection() {
return direction;
}
public int getNumber() {
return number;
}
public int getNewLocation() {
return (location + speed) % RoadView.WINDOWSIZE;
}
/**
* move this car one step
*/
public void step() {
location = getNewLocation();
Regelaar.getInstance().setLocation(this, location);
model.update();
}
/**
* paint this car
* @param g
*/
public void paint(Graphics g) {
int x, y, w, h;
switch (direction) {
case North:
x = RoadView.WINDOWSIZE / 2 + 1;
y = RoadView.WINDOWSIZE - location;
w = Car.CARWIDTH;
h = Car.CARLENGTH;
break;
case East:
x = location - Car.CARLENGTH;
y = RoadView.WINDOWSIZE / 2 + 1;
w = Car.CARLENGTH;
h = Car.CARWIDTH;
break;
case South:
x = RoadView.WINDOWSIZE / 2 - Car.CARWIDTH - 1;
y = location - Car.CARLENGTH;
w = Car.CARWIDTH;
h = Car.CARLENGTH;
break;
case West:
x = RoadView.WINDOWSIZE - location - 1;
y = RoadView.WINDOWSIZE / 2 - Car.CARWIDTH - 1;
w = Car.CARLENGTH;
h = Car.CARWIDTH;
break;
default:
x = y = w = h = 10;
}
g.setColor(color);
g.fillRect(x, y, w, h);
g.setColor(Color.WHITE);
g.drawString(String.valueOf(number), x + w / 6, y + h / 2 + 4);
}
/**
* yield the current location of this car
* @return
*/
public int getLocation() {
return location;
}
}
|