# Vehicular simulation game example

Here is an example of how you might use the concept of passing functions in the context of a vehicular simulation game

```javascript
const Vehicle = {
  speed: 0,
  maxSpeed: 100,

  accelerate: (amount) => {
    this.speed += amount;
    if (this.speed > this.maxSpeed) {
      this.speed = this.maxSpeed;
    }
  },

  decelerate: (amount) => {
    this.speed -= amount;
    if (this.speed < 0) {
      this.speed = 0;
    }
  }
};

const Car = {
  name: 'Car',
  maxSpeed: 120
};

const Bike = {
  name: 'Bike',
  maxSpeed: 60
};

Car.accelerate(30);
console.log(Car.speed);  // 30
Car.accelerate(80);
console.log(Car.speed);  // 100

Bike.accelerate(30);
console.log(Bike.speed);  // 30
Bike.decelerate(20);
console.log(Bike.speed);  // 10
```

In this example, we have a `Vehicle` object with two methods: `accelerate` and `decelerate`. The `accelerate` method increases the `speed` of the `Vehicle` object by a given amount, while the `decelerate` method decreases the `speed` of the `Vehicle` object by a given amount. Both methods also ensure that the `speed` of the `Vehicle` object stays within the range 0 to `maxSpeed`.

We then create two objects based on the `Vehicle` object: `Car` and `Bike`. The `Car` object has a `name` of "Car" and a `maxSpeed` of 120, while the `Bike` object has a `name` of "Bike" and a `maxSpeed` of 60.

We can then use the `accelerate` and `decelerate` methods on the `Car` and `Bike` objects to change their speeds. As the example code shows, the `Car` object's speed is increased to 30 when we call `Car.accelerate(30)`, and then increased to 100 when we call `Car.accelerate(80)`. The `Bike` object's speed is increased to 30 when we call `Bike.accelerate(30)`, and then decreased to 10 when we call `Bike.decelerate(20)`
