예제 #1
0
  protected void updatePos() {
    super.updatePos();
    float speed = getSpeed();
    float speed_lim = getRoad().getSpeedLimit();
    int dist_ints = next_ints_dist();
    int dist_obst = dist_ints;
    int dist_new_car = dist_ints;
    if (front_car != null) {
      dist_new_car = getDist(front_car);
      if (dist_new_car < dist_obst) dist_obst = dist_new_car;
    }
    if ((float) dist_obst > 4F * speed) {
      float a = 0.0F;
      if ((double) speed < 0.8D * (double) speed_lim) a = 50F;
      else if (speed < speed_lim) a = 10F;
      else if (speed > speed_lim) a = 10F * (speed_lim - speed);
      if ((double) (speed + a) < 10D) a = 10F - speed;
      accelerate(a);
    } else if (dist_ints < 6) {
      boolean stop_inter = false;

      if (!stop_inter) {
        int dir = random.nextInt(3);
        Road roads[] = nextInter.getRoads();
        int d[] = new int[3];
        int direction = getDir();
        d[0] = RoadGrid.getLeftDir(direction);
        d[1] = direction;
        for (d[2] = RoadGrid.getRightDir(direction); roads[d[dir]] == null; dir = random.nextInt(3))
          ;
        accelerate(-50F);
        make_Turn(d[dir]);
      }
      if (watch_red || front_car != null) {
        accelerate(-50F);
        stop_inter = true;
      }
    } else if (speed > 12F) accelerate(-(speed * speed) / (float) (4 * dist_ints));
    else accelerate(10F - speed);

    if (front_car != null) {
      double diff;
      if (getRoad().getDir() == getDir()
          && (getDist((Car) this, front_car, getDir()) < 2 * getSpeed())) {
        if (getSpeed() > front_car.getSpeed()) diff = getSpeed() - front_car.getSpeed();
        else diff = -1 * (getSpeed() - front_car.getSpeed());
        accelerate(-1 * (float) (diff / 2.0f), 2);

        if ((int) Math.sqrt(Coords.distSqrd(front_car.getPos(), getPos())) < 20)
          accelerate((float) (-1 * getSpeed() * getSpeed() / (0.01)), 20);
      }
    }
  }
예제 #2
0
  @Test
  public void testCar() {
    Car car = new Car(x, y, carTemplate);

    assertEquals(x, car.getX());
    assertEquals(y, car.getY());
    assertEquals(0, car.getSpeed());
    assertEquals(carTemplate.getSpeedMax(), car.getSpeedMax());
    assertEquals(carTemplate.getAcceleration(), car.getAcceleration());
    assertEquals(false, car.isAccelerating());
    assertEquals(carTemplate.getPower(), car.getAttack());
    assertEquals(carTemplate.getDefense(), car.getDefense());
    assertEquals(carTemplate.getLife(), car.getLife());
    assertEquals(carTemplate.getFuel(), car.getFuel());
    assertEquals(carTemplate.getRotateRate(), car.getRotateRate(), 0.00000001);
    assertEquals(0, car.getRotation(), 0.00000001);
    assertEquals(0, car.getSightRotation(), 0.00000001);
    assertEquals(0, car.getLaps());
    assertEquals(0, car.getMoney());
    assertEquals(0, car.getEquipDefense());
    assertEquals(0, car.getEquipPower());
    assertEquals(0, car.getEquipSpeed());
    assertEquals(false, car.isCollided());
    assertEquals(null, car.getItem());
  }
예제 #3
0
 @Test
 public void createsCarWithSpeedOfZero() {
   Car car1 = new Car("Red", 100);
   assertThat(car1.getSpeed(), is(0));
 }
예제 #4
0
 @Test
 public void cannotDecelerateBeyondMinSpeed() {
   Car car1 = new Car("Red", 100);
   car1.decelerate(-1);
   assertThat(car1.getSpeed(), is(0));
 }
예제 #5
0
 @Test
 public void canDecelerate() {
   Car car1 = new Car("Red", 100);
   car1.decelerate(10);
   assertThat(car1.getSpeed(), is(0));
 }
예제 #6
0
 @Test
 public void cannotAccelerateBeyondMaxSpeed() {
   Car car1 = new Car("Red", 100);
   car1.accelerate(101);
   assertThat(car1.getSpeed(), is(100));
 }