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); } } }
@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()); }
@Test public void createsCarWithSpeedOfZero() { Car car1 = new Car("Red", 100); assertThat(car1.getSpeed(), is(0)); }
@Test public void cannotDecelerateBeyondMinSpeed() { Car car1 = new Car("Red", 100); car1.decelerate(-1); assertThat(car1.getSpeed(), is(0)); }
@Test public void canDecelerate() { Car car1 = new Car("Red", 100); car1.decelerate(10); assertThat(car1.getSpeed(), is(0)); }
@Test public void cannotAccelerateBeyondMaxSpeed() { Car car1 = new Car("Red", 100); car1.accelerate(101); assertThat(car1.getSpeed(), is(100)); }