all tests are green

This commit is contained in:
MarcUs7i 2024-11-20 18:39:53 +01:00
parent d1bf7c854e
commit 766ec0a593

101
car.c
View file

@ -14,24 +14,34 @@ struct CarData {
Color color;
double fill_level;
double acceleration_rate;
int speed;
double speed;
};
static struct CarData aixam = {AIXAM, RED, 16.0, 0.0, -1};
static struct CarData fiat_multipla_green = {FIAT_MULTIPLA, GREEN, 65.0, 0.0, -1};
static struct CarData fiat_multipla_blue = {FIAT_MULTIPLA, BLUE, 65.0, 0.0, -1};
static struct CarData fiat_multipla_orange = {FIAT_MULTIPLA, ORANGE, 65.0, 0.0, -1};
static struct CarData jeep_silver = {JEEP, SILVER, 80.0, 0.0, -1};
static struct CarData jeep_black = {JEEP, BLACK, 80.0, 0.0, -1};
// Create a local array car_park to store all cars
static struct CarData* car_park[] = {
&aixam,
&fiat_multipla_green,
&fiat_multipla_blue,
&fiat_multipla_orange,
&jeep_silver,
&jeep_black
};
#define TOTAL_CARS (sizeof(car_park) / sizeof(car_park[0]))
Car get_car(CarType carType) {
static struct CarData car_park[] = {
{AIXAM, RED, 16.0, 0.0, -1},
{FIAT_MULTIPLA, GREEN, 65.0, 0.0, -1},
{FIAT_MULTIPLA, BLUE, 65.0, 0.0, -1},
{FIAT_MULTIPLA, ORANGE, 65.0, 0.0, -1},
{JEEP, SILVER, 80.0, 0.0, -1},
{JEEP, BLACK, 80.0, 0.0, -1}
};
int length = sizeof(car_park) / sizeof(car_park[0]);
for (int i = 0; i < length; i++) {
if (car_park[i].type == carType && car_park[i].speed == -1) {
Car carToReturn = &car_park[i];
car_park[i].speed = 0;
return carToReturn;
for (int i = 0; i < TOTAL_CARS; i++) {
if (car_park[i]->type == carType && car_park[i]->speed == -1) {
car_park[i]->speed = 0;
return car_park[i];
}
}
return 0;
@ -54,17 +64,70 @@ double get_acceleration_rate(Car car) {
}
int get_speed(Car car) {
return car->speed;
if (car->speed - (int)car->speed >= 0.5) {
return (int)car->speed + 1;
}
return (int)car->speed;
}
void set_acceleration_rate(Car car, double acceleration_rate) {
car->acceleration_rate = acceleration_rate;
double max_accel;
double min_accel = -8.0;
switch (get_type(car)) {
case AIXAM:
max_accel = 1.0;
break;
case FIAT_MULTIPLA:
max_accel = 2.26;
break;
case JEEP:
max_accel = 3.14;
break;
default:
max_accel = 0.0;
break;
}
if (acceleration_rate > max_accel) {
car->acceleration_rate = max_accel;
} else if (acceleration_rate < min_accel) {
car->acceleration_rate = min_accel;
} else {
car->acceleration_rate = acceleration_rate;
}
}
void accelerate(Car car) {
car->speed += 4;
if (car->speed == -1) {
return;
}
double max_speed;
switch(get_type(car)) {
case AIXAM:
max_speed = 45;
break;
case FIAT_MULTIPLA:
max_speed = 170;
break;
case JEEP:
max_speed = 196;
break;
default:
max_speed = 0;
break;
}
double calc_speed = car->speed + car->acceleration_rate * 3.6061946903;
if (calc_speed >= max_speed) {
car->speed = max_speed;
return;
}
car->speed = calc_speed;
}
void init() {
return;
for (int i = 0; i < TOTAL_CARS; i++) {
car_park[i]->speed = -1;
car_park[i]->acceleration_rate = 0.0;
}
}