示例#1
0
        public void spocitej()
        {
            Console.WriteLine("ZAHAJUJU VYPOCET " + this.id);
            bool spawnNew = false; //značí jestli už jsme zpracovali nějakou událost v tento čas (negace)

            while (!kalendar.jePrazdny() && !jeKonec)
            {
                Udalost zpracovavanaUdalost = kalendar.vratNejaktualnejsi();
                if (zpracovavanaUdalost.kdy > cas) //pokud se nekam posunul cas -> spawni nove lidi
                {
                    spawnNew = true;
                }
                else
                {
                    spawnNew = false;
                }
                cas = zpracovavanaUdalost.kdy;
                if (spawnNew && cas % SPAWN_LIDI_MEZICAS == 0)
                {
                    spawniOstatniPasazery();
                }

                (zpracovavanaUdalost.kdo).zpracuj(zpracovavanaUdalost);

                if (cas > 5000) //timeout v případě špatného randomu
                {
                    Console.WriteLine("STOPPED BECAUSE TIME LIMIT EXCEEDED " + cas);
                    cas = -1; //chyba
                    break;
                }
            }
            vysledek = cas;
            gui.finished(vysledek);
        }
示例#2
0
 public override void zpracuj(Udalost udalost)
 {
     switch (udalost.co)
     {
     case TypUdalosti.prichodDoStanice:
         if (this.id.Equals("0"))       //log hlavního pasažéra (má id 0)
         {
             Console.WriteLine("pasazer " + id + " prisel do stanice " + aktualniStanice.id + " v " + udalost.kdy);
         }
         if (aktualniStanice == sKonec)    //daný pasažér dorazil do své konečné stanice
         {
             //Console.WriteLine("PASAZER " + id + " DORAZIL DO KONCE " + aktualniStanice.id + " v " + u.kdy);
             if (this.id.Equals("0"))     //hlavni pasazer
             {
                 model.jeKonec = true;
             }
             model.removePasazer(this);
             break;
         }
         setPristiStanice();
         if (aktualniStanice.jePrestupni && aktualniStanice.jmeno.Equals(pristiStanice.jmeno))    //prestoupeni v přestupní stanici
         {
             model.pridejDoKalendare(new Udalost(udalost.kdy + aktualniStanice.dobaPrestupu, this, TypUdalosti.prichodDoStanice));
         }
         else
         {
             model.getSeznamStanic().stanice[aktualniStanice.id].zaradNaNastupiste(this, pristiStanice);
         }
         aktualniStanice = pristiStanice;
         break;
     }
 }
示例#3
0
 public override void zpracuj(Udalost udalost)
 {
     switch (udalost.co)
     {
     case TypUdalosti.spawnSouprav:
         model.spawniCastSouprav();
         break;
     }
 }
示例#4
0
        public void pridejHlavnihoPasazera(Stanice zacatek, Stanice konec, float start)
        {
            Pasazer hlavni = new Pasazer(this, "0", zacatek, konec, start);

            seznamPasazeru.Add(pocetVygenerovanychPasazeru, hlavni);
            pocetVygenerovanychPasazeru++;
            Udalost prichodPrvnihoPasazera = new Udalost(start, hlavni, TypUdalosti.prichodDoStanice);

            kalendar.pridejUdalost(prichodPrvnihoPasazera);
        }
示例#5
0
        private void spawniOstatniPasazery() //kazdejch SPAWN_LIDI_MEZICAS spawni lidi
        {
            int pocetLidiKVygenerovani = SPAWN_LIDI_MEZICAS * nastaveni.frekvenceLidi;

            for (int i = 0; i < pocetLidiKVygenerovani; i++)
            {
                int     casPrichodu = rand.Next((int)cas, (int)cas + SPAWN_LIDI_MEZICAS);
                Pasazer p           = vygenerujPasazera(casPrichodu);
                pocetVygenerovanychPasazeru++;
                seznamPasazeru.Add(pocetVygenerovanychPasazeru, p);
                Udalost prichodPasazera = new Udalost(p.start, p, TypUdalosti.prichodDoStanice);
                kalendar.pridejUdalost(prichodPasazera);
            }
        }
示例#6
0
        public override void zpracuj(Udalost udalost)
        {
            switch (udalost.co)
            {
            case TypUdalosti.prijezdDoStanice:
                //if(pismeno == "A") Console.WriteLine("souprava " + id + " prijela do stanice " + aktualniStanice.jmeno + " (" + aktualniStanice.pismeno + ") cas " + u.kdy);
                vystupovani();
                model.pridejDoKalendare(new Udalost(udalost.kdy + dobaCekaniVeStanici, this, TypUdalosti.vyjezdZeStanice));

                break;

            case TypUdalosti.vyjezdZeStanice:
                nastupovani();
                jedDoDalsiStanice();
                break;
            }
        }
示例#7
0
 public Udalost vratNejaktualnejsi()
 {
     if (seznamUdalosti.Count > 0)
     {
         Udalost nejaktualnejsi = seznamUdalosti[0];
         for (int i = 1; i < seznamUdalosti.Count; i++)
         {
             if (seznamUdalosti[i].kdy < nejaktualnejsi.kdy)
             {
                 nejaktualnejsi = seznamUdalosti[i];
             }
         }
         seznamUdalosti.Remove(nejaktualnejsi);
         return(nejaktualnejsi);
     }
     else
     {
         return(null);
     }
 }
示例#8
0
 public void pridejUdalost(Udalost u)
 {
     seznamUdalosti.Add(u);
 }
示例#9
0
 public void pridejDoKalendare(Udalost u)
 {
     kalendar.pridejUdalost(u);
 }