import java.util.*; public class Game { private Airport airport; private ArrayList airplanes; private int score; public Game(Airport airport) { this.airport = airport; this.airplanes = new ArrayList(); this.score = 0; } public void startGame() { Timer updateTimer = new Timer(); updateTimer.schedule(new TimerTask() { @Override public void run() { // TO DO: Update game for (Map.Entry air: airport.getAirplanes().entrySet()) { if ((air.getKey().getNextPointDistance() <= 0) && (air.getKey().getState() != AirplaneState.LANDING)) { air.getKey().setState(AirplaneState.LANDING); air.getValue().traffic(); air.getKey().setNextPointDistance(Math.round(air.getValue().getLength()/10000.0*10.0)/10.0); } else if ((air.getKey().getNextPointDistance() <= 0) && (air.getKey().getState() == AirplaneState.LANDING)) { air.getKey().setState(AirplaneState.PARKING); air.getValue().freeToUse(); System.out.println("PARKING! Hurá!"); } else { switch (air.getKey().getState()) { case TRY_TO_DEPART -> { air.getKey().setNextPointDistance(Math.round((air.getKey().getNextPointDistance() - 0.1) * 100.0) / 100.0); System.out.println("Letadlo "+ air.getKey().getIdAir() + " typu " + air.getKey().getType() + " má vzdálenost od letiště " + air.getKey().getNextPointDistance() + " a letí na dráhu " + air.getValue().getId()); } case TRY_TO_DEPART_SLOW -> { air.getKey().setNextPointDistance(Math.round((air.getKey().getNextPointDistance() - 0.05) * 1000.0) / 1000.0); System.out.println("Letadlo "+ air.getKey().getIdAir() + " typu " + air.getKey().getType() + " má vzdálenost od letiště " + air.getKey().getNextPointDistance() + " a letí na dráhu " + air.getValue().getId()); } case TRY_TO_DEPART_FAST -> { air.getKey().setNextPointDistance(Math.round((air.getKey().getNextPointDistance() - 0.2) * 100.0) / 100.0); System.out.println("Letadlo "+ air.getKey().getIdAir() + " typu " + air.getKey().getType() + " má vzdálenost od letiště " + air.getKey().getNextPointDistance() + " a letí na dráhu " + air.getValue().getId()); } case LANDING -> { air.getKey().setNextPointDistance(Math.round((air.getKey().getNextPointDistance() - 0.1) * 100.0) / 100.0); System.out.println("Letadlo "+ air.getKey().getIdAir() + " typu " + air.getKey().getType() + " má vzdálenost od konce dráhy pro přistání " + air.getKey().getNextPointDistance() + " na dráze " + air.getValue().getId()); } } } if (expediteRandomTest()) { expediteAirplane(air.getKey()); break; } } } },0,1000); } public void makeAirplane() { Random random = new Random(); Airplane airplane; switch (random.nextInt(3)) { case 0: airplane = new Airplane("Boeing 777"); airplanes.add(airplane); addRunwayToAirplane(airplane); if (speedRandomTest()){ slowDownAirplane(airplane); } break; case 1: airplane = new Airplane("Airbus A-320"); airplanes.add(airplane); addRunwayToAirplane(airplane); if (speedRandomTest()){ increaseAirplane(airplane); } break; case 2: airplane = new Airplane("Boeing 737"); airplanes.add(airplane); addRunwayToAirplane(airplane); break; } } private boolean speedRandomTest() { Random random = new Random(); return random.nextBoolean(); } private boolean expediteRandomTest() { Random random = new Random(); return random.nextInt(100) == 5; } public void slowDownAirplane(Airplane airplane) { if (airplane.getState() == AirplaneState.TRY_TO_DEPART) { // actual state: default airplane.setState(AirplaneState.TRY_TO_DEPART_SLOW); } else { // actual state: fast airplane.setState(AirplaneState.TRY_TO_DEPART); } } public void increaseAirplane(Airplane airplane) { if (airplane.getState() == AirplaneState.TRY_TO_DEPART) { airplane.setState(AirplaneState.TRY_TO_DEPART_FAST); } else { airplane.setState(AirplaneState.TRY_TO_DEPART); } } public void expediteAirplane(Airplane airplane) { airplane.setState(AirplaneState.EXPEDITE_OFF); System.out.println("Letadlo " + airplane.getIdAir() + " je přesměrováno na jiné letiště."); airplanes.remove(airplane); airport.removeAirplanes(airplane, airport.getRunwayForAirplane(airplane)); } public void addRunwayToAirplane(Airplane airplane){ ArrayList runwaysOnAirport = airport.getRunways(); Random random = new Random(); airport.addAirplanes(airplane, runwaysOnAirport.get(random.nextInt(runwaysOnAirport.size()))); } }