Exemple #1
0
 public override char Symbol()
 {
     return(_roadUser.Symbol());
 }
Exemple #2
0
        public RoadSimulator()
        {
            Console.WindowHeight = 88;
            Console.WindowWidth  = 80;

            var roadUsers = new List <RoadUser>(new RoadUser[]
            {
                new Pedestrian(),
                new Pedestrian(),
                new Pedestrian(),
                new Driver(),
                new Cyclist(),
                new Cyclist()
            });

            bool collision = false;

            Random r = new Random();

            foreach (var user in roadUsers)
            {
                do
                {
                    user.XPosition = r.Next(Console.WindowWidth);
                    user.YPosition = r.Next(Console.WindowHeight);
                } while (roadUsers.Where(u => u.XPosition == user.XPosition && u.YPosition == user.YPosition).ToList().Count > 1);
            }

            do
            {
                Console.Clear();
                Console.CursorTop  = 0;
                Console.CursorLeft = 0;

                for (int i = 0; i < Console.WindowHeight; i++)
                {
                    for (int j = 0; j < Console.WindowWidth; j++)
                    {
                        List <RoadUser> users = roadUsers.Where(u => u.XPosition == i && u.YPosition == j).ToList();

                        if (users.Count > 1)
                        {
                            collision = true;
                            Console.Write("X");
                        }
                        else
                        {
                            RoadUser user = users.FirstOrDefault();
                            Console.Write(user?.Symbol().ToString() ?? " ");
                        }
                    }
                }

                for (int i = 0; i < roadUsers.Count; i++)
                {
                    RoadUser user = roadUsers[i];

                    user.Move();

                    if (user.Symbol() == 'P')
                    {
                        var chance = r.Next(101);

                        if (chance >= 90)
                        {
                            roadUsers[i] = new PedestrainToCyclistDecorator(user);
                            Debug.WriteLine($"Pedestrian became cyclist");
                        }

                        if (chance <= 10)
                        {
                            roadUsers[i] = new PedestrianToDriverDecorator(user);
                            Debug.WriteLine($"Pedestrian became driver");
                        }
                    }
                    else if (user.Symbol() == 'C')
                    {
                        var chance = r.Next(101);

                        if (chance >= 85)
                        {
                            roadUsers[i] = new CyclistToPedestrianDecorator(user);
                            Debug.WriteLine($"Cyclist became pedestrian");
                        }
                    }
                    else if (user.Symbol() == 'D')
                    {
                        var chance = r.Next(101);

                        if (chance >= 95)
                        {
                            roadUsers[i] = new DriverToPedestrianDecorator(user);
                            Debug.WriteLine($"Driver became pedestrian");
                        }
                    }
                }

                Console.ReadLine();

                if (collision)
                {
                    Console.WriteLine("Kolizja! (X - miejsce kolizji)");
                }
            } while (!collision);
        }