Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Threading;
- public class Program
- {
- public static void Main()
- {
- Station station = new Station();
- bool isWork = true;
- ConsoleKey key;
- ConsoleKey exitKey = ConsoleKey.Q;
- int sleepTime = 500;
- while (isWork)
- {
- station.Update();
- if (Console.KeyAvailable)
- {
- key = Console.ReadKey(true).Key;
- if (key == exitKey)
- isWork = false;
- }
- Thread.Sleep(sleepTime);
- }
- }
- }
- public class Station
- {
- private Train _train;
- private Random _random;
- private int timeStay;
- private int timeArrive;
- bool isArrived;
- private static readonly string[] RoutesFrom = {
- "Minsk",
- "Vitebsk",
- "Mogilev",
- "Brest",
- "Grodno"
- };
- private static readonly string[] RoutesTo =
- {
- "Pinsk",
- "Molodechno",
- "Orsha",
- "Poltsk",
- "Novopolotsk"
- };
- private const int PassengersMaxAmount = 1000;
- private const int PassengersMinAmount = 3;
- private const int WaitTimeArrive = 100;
- private const int WaitTimeStay = 50;
- public Station()
- {
- _train = null;
- _random = new Random();
- }
- public void Showroute()
- {
- Console.Clear();
- if (isArrived)
- Console.WriteLine($"Time to stay : {WaitTimeStay - timeStay}");
- else
- Console.WriteLine($"Time to arrive : {WaitTimeArrive - timeArrive}");
- if (_train != null)
- Console.WriteLine(_train);
- else
- Console.WriteLine("Train hasn't arrived yet.");
- }
- public void Update()
- {
- if (isArrived)
- {
- if (timeStay >= WaitTimeStay)
- {
- isArrived = false;
- _train = null;
- timeStay = 0;
- timeArrive = 0;
- }
- else
- {
- ++timeStay;
- }
- }
- else
- {
- if (timeArrive >= WaitTimeArrive)
- {
- isArrived = true;
- CreateRoute();
- timeStay = 0;
- timeArrive = 0;
- }
- else
- {
- ++timeArrive;
- }
- }
- Showroute();
- }
- private void CreateRoute()
- {
- string routeFrom = RoutesFrom[_random.Next(RoutesFrom.Length)];
- string routeTo = RoutesTo[_random.Next(RoutesTo.Length)];
- int passengersAmount = _random.Next(PassengersMinAmount, PassengersMaxAmount);
- _train = new Train(routeFrom, routeTo, passengersAmount);
- }
- }
- public class Train
- {
- private List<Carriage> _carriages;
- public string RouteFrom { get; private set; }
- public string RouteTo { get; private set; }
- public int PassengersAmount { get; private set; }
- public Train(string routeFrom, string routeTo, int passengersAmount)
- {
- RouteFrom = routeFrom;
- RouteTo = routeTo;
- PassengersAmount = passengersAmount;
- _carriages = new List<Carriage>();
- CreateCarriages();
- }
- public override string ToString()
- {
- string resultString = "";
- resultString += "Route From " + RouteFrom + " To " + RouteTo + "\n";
- resultString += "Amount of passengers: " + PassengersAmount + "\n";
- resultString += "Amount of carriges: " + _carriages.Count + "\n";
- foreach (Carriage carriage in _carriages)
- {
- if (carriage == Carriage.Large)
- resultString += "Large + ";
- else if (carriage == Carriage.Middle)
- resultString += "Large + ";
- else if (carriage == Carriage.Small)
- resultString += "Small + ";
- }
- resultString += "\n\n";
- return resultString;
- }
- private void FillCarriages(Carriage carriageType, ref int passengersAmount)
- {
- int carriagesAmount = passengersAmount / (int) carriageType;
- passengersAmount %= (int) carriageType;
- for (int i = 0; i < carriagesAmount; ++i)
- _carriages.Add(carriageType);
- }
- private void CreateCarriages()
- {
- int passengersAmount = PassengersAmount;
- FillCarriages(Carriage.Large, ref passengersAmount);
- FillCarriages(Carriage.Middle, ref passengersAmount);
- if (passengersAmount < (int) Carriage.Small)
- passengersAmount = (int) Carriage.Small;
- FillCarriages(Carriage.Small, ref passengersAmount);
- }
- }
- public enum Carriage : int
- {
- Small = 5,
- Middle = 10,
- Large = 15
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement