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); }
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; } }
public override void zpracuj(Udalost udalost) { switch (udalost.co) { case TypUdalosti.spawnSouprav: model.spawniCastSouprav(); break; } }
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); }
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); } }
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; } }
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); } }
public void pridejUdalost(Udalost u) { seznamUdalosti.Add(u); }
public void pridejDoKalendare(Udalost u) { kalendar.pridejUdalost(u); }