all tests are green
This commit is contained in:
parent
d1bf7c854e
commit
766ec0a593
1 changed files with 82 additions and 19 deletions
99
car.c
99
car.c
|
|
@ -14,24 +14,34 @@ struct CarData {
|
|||
Color color;
|
||||
double fill_level;
|
||||
double acceleration_rate;
|
||||
int speed;
|
||||
double speed;
|
||||
};
|
||||
|
||||
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}
|
||||
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
|
||||
};
|
||||
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;
|
||||
|
||||
#define TOTAL_CARS (sizeof(car_park) / sizeof(car_park[0]))
|
||||
|
||||
|
||||
Car get_car(CarType carType) {
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue