-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHighway.cpp
More file actions
82 lines (69 loc) · 1.87 KB
/
Copy pathHighway.cpp
File metadata and controls
82 lines (69 loc) · 1.87 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
//
// Created by Balint Kiraly on 2023. 05. 14..
//
#include "Highway.h"
void Highway::addVehicle(char type, int position, int speed) {
Vehicle* newvehic;
switch (type) {
case 'c':
newvehic = new Car(position, speed);
break;
default: throw std::invalid_argument("Unknown vehicle type");
}
vehicleCount++;
vehicles[position] = newvehic;
/*
if (vehicles == nullptr) {
vehicles = new Vehicle*;
vehicles[0] = newvehic;
}
else {
Vehicle** temp = vehicles;
delete[] vehicles;
vehicles = new Vehicle*[vehicleCount];
for (size_t i = 0; i < vehicleCount-1; ++i) {
vehicles[i] = temp[i];
}
vehicles[vehicleCount-1] = newvehic;
}*/
}
void Highway::moveVehicle(Vehicle *vehicle, int numOfCells) {
int currentPosition = vehicle->getpos();
int newPosition = currentPosition + numOfCells;
vehicles[currentPosition] = nullptr;
if (newPosition >= (int)length) {
delete vehicle;
}
else {
vehicles[newPosition] = vehicle;
vehicle->setpos(newPosition);
}
}
void Highway::simulate() {
int emptyCells = 5;
for (size_t i = length; i > 0; --i) {
Vehicle* currentVehicle = vehicles[i-1];
if (currentVehicle == nullptr) {
emptyCells++;
}
else {
currentVehicle->accelerate();
currentVehicle->decelerate(emptyCells);
currentVehicle->randomDeceleration(0.15);
moveVehicle(currentVehicle, currentVehicle->getspeed());
emptyCells = 0;
}
}
}
void Highway::printState(std::ostream &os) {
for (size_t i = 0; i < length; ++i) {
os << " ";
if (vehicles[i] != nullptr) {
vehicles[i]->display(os);
}
else {
os << "-";
}
os << " ";
}
}