void question8() { Zastavka z1 = zastavky[rnd.Next(0, zastavky.Count)]; Zastavka z2 = zastavky[rnd.Next(0, zastavky.Count)]; while (z1.name == z2.name) { z2 = zastavky[rnd.Next(0, zastavky.Count)]; } int number = rnd.Next(2, zastavky.Count - zastavky.Count / 4); question = "Otázka č.8: Vieme sa zo zastávky " + z1.name + " dostať na zastávku " + z2.name + " cez najviac " + number; switch (number) { case 2: question += " zastávky?\n (Vrátane zastávky z ktorej vychádzame. Napíšte 'áno' alebo 'nie'.)"; break; case 3: question += " zastávky?\n (Vrátane zastávky z ktorej vychádzame. Napíšte 'áno' alebo 'nie'.)"; break; default: question += " zastávok?\n (Vrátane zastávky z ktorej vychádzame. Napíšte 'áno' alebo 'nie'.)"; break; } if (BFS(z1.name, z2.name, linky) <= number) { answer = "áno"; } else { answer = "nie"; } }
/// <summary> /// Vэstavba zбstavky pre cestnй vozidlб /// </summary> /// <param name="upresnenieCinnosti">ktorб z nich</param> public void PostavZastavku(int upresnenieCinnosti) { Spolocnost spol = Hra.DajInstanciu().Spolocnost; try { Zastavka zast; if (aZastavane != null) { Cesta c = (Cesta)aZastavane; if (upresnenieCinnosti == (int)SmerZast.horizontalny && c.Orientacia == SmerCesty.vodorovne) { zast = new Zastavka(aPoloha, SmerZast.horizontalny); } else { zast = new Zastavka(aPoloha, SmerZast.vertikalny); } if (spol.OverVydavok(-zast.Cena) && OverOkolieStaniceZoskupenia(zast, 1, 1)) { aZastavane = zast; Hra.DajInstanciu().DajHernuPlochu().PrejdiPolicka(); spol.UpravFinancie(-zast.Cena); } } }catch (InvalidCastException e) { Sprava.Info("Nie je mozne postavit zastavku"); } }
public void pridajCiaru(Zastavka z1, Zastavka z2) { Point point = getCenter(z1.X, z1.Y, z2.X, z2.Y); delCoords.Add(point); mojeZastavky.Add(z2); mojeZastavky.Add(z1); }
void MainFormMouseClick(object sender, MouseEventArgs e) { if ((rezim == 3 || rezim == 1)) { if (deletingLine && linky[linkaClicked - 1].zmazCiaru(e.X, e.Y)) { Invalidate(); Update(); } else if (deletingZast && closeTo(e.X, e.Y) != null) { Zastavka z = closeTo(e.X, e.Y); zastavky.Remove(z); foreach (var l in linky) { l.zmazZastavku(z); } Invalidate(); Update(); } else if (linkaClicked != 0 && e.X <= 140 && e.Y >= 45 && e.Y <= 230) { linky[linkaClicked - 1].changeColour(findColour(e.X, e.Y)); Invalidate(); Update(); } else if (e.X >= 700 && e.Y >= 45 && e.Y <= 185) { linkaClicked = findClickedLinka(e.X, e.Y); Invalidate(); Update(); } else if (closeTo(e.X, e.Y) == null && !holding) { int name = 65; List <string> names = new List <string>(); for (int i = 0; i < zastavky.Count; i++) { names.Add(zastavky[i].name); } for (int i = 0; i < 27; i++) { if (!names.Contains((char)(65 + i) + "")) { name = 65 + i; break; } } zastavky.Add(new Zastavka(e.X, e.Y, name)); Invalidate(); Update(); } } }
public void spoj(Zastavka z) { if (!susedia.ContainsKey(z)) { susedia[z] = 1; } else { susedia[z] += 1; } }
void question7() { Zastavka z1 = zastavky[rnd.Next(0, zastavky.Count)]; Zastavka z2 = zastavky[rnd.Next(0, zastavky.Count)]; while (z1.name == z2.name) { z2 = zastavky[rnd.Next(0, zastavky.Count)]; } question = "Otázka č.7: Koľko zastávok musíme prejsť\n aby sme sa zo zastávky " + z1.name + " dostali na zastávku " + z2.name + " najrýchlejšie?\n (Vrátane zastávky z ktorej vychádzame. Ak sa na zastávku nevieme dostať, napíšte 0.)"; answer = BFS(z1.name, z2.name, linky) + ""; }
void MainFormMouseDoubleClick(object sender, MouseEventArgs e) { if ((rezim == 1 || rezim == 3) && !holding) { Zastavka z = closeTo(e.X, e.Y); if (z == null) { return; } namingZast = true; } }
void question9() { Zastavka z1 = zastavky[rnd.Next(0, zastavky.Count)]; int number = rnd.Next(2, zastavky.Count / 2); question = "Otázka č.9: Napíšte všetky zastávky, na ktoré sa vieme zo zastávky " + z1.name + "\n dostať prejdením cez " + number + " alebo menej zastávok.\n (Vrátane zastávky z ktorej vychádzame. Názvy zastávok oddeľte pomlčkami.)"; answer = z1.name; foreach (var z in zastavky) { int bfs = BFS(z1.name, z.name, linky); if (z.name != z1.name && bfs <= number && bfs > 0) { answer += "-" + z.name; } } }
void question5() { Zastavka z1 = zastavky[rnd.Next(0, zastavky.Count)]; Zastavka z2 = zastavky[rnd.Next(0, zastavky.Count)]; while (z1.name == z2.name) { z2 = zastavky[rnd.Next(0, zastavky.Count)]; } question = "Otázka č.5: Vieme sa zo zastávky " + z1.name + " nejako dostať na zastávku " + z2.name + " ?\n (Napíšte 'áno' alebo 'nie'.)"; if (BFS(z1.name, z2.name, linky) > 0) { answer = "áno"; } else { answer = "nie"; } }
void question4() { Zastavka z1 = zastavky[rnd.Next(0, zastavky.Count)]; Zastavka z2 = zastavky[rnd.Next(0, zastavky.Count)]; while (z1.name == z2.name) { z2 = zastavky[rnd.Next(0, zastavky.Count)]; } question = "Otázka č.4: Vieme sa zo zastávky " + z1.name + " dostať na zastávku " + z2.name + " len po jednej linke?\n (Napíšte 'áno' alebo 'nie'.)"; foreach (var l in linky) { if (l.mojeZastavky.Contains(z1) && l.mojeZastavky.Contains(z2)) { answer = "áno"; return; } } answer = "nie"; }
void MainFormMouseUp(object sender, MouseEventArgs e) { if (holding) { Zastavka z = closeTo(e.X, e.Y); if (z != null && z.X != startZast.X && z.Y != startZast.Y) { spoj(z, startZast); linky[linkaClicked - 1].pridajCiaru(z, startZast); } newLineX1 = -1; newLineX2 = -1; newLineY1 = -1; newLineY2 = -1; Invalidate(); Update(); holding = false; } }
void MainFormMouseDown(object sender, MouseEventArgs e) { Zastavka z = closeTo(e.X, e.Y); if ((rezim == 3 || rezim == 1) && !deletingZast && !deletingLine && z != null && zastavky.Count >= 2 && linkaClicked != 0) { holding = true; startZast = z; newLineX1 = z.X; newLineY1 = z.Y; newLineX2 = e.X; newLineY2 = e.Y; Invalidate(); Update(); } }
void question6() { Linka l = linky[rnd.Next(0, linky.Count)]; while (l.isEmpty()) { l = linky[rnd.Next(0, linky.Count)]; } Zastavka z1 = l.mojeZastavky[rnd.Next(0, l.mojeZastavky.Count)]; Zastavka z2 = l.mojeZastavky[rnd.Next(0, l.mojeZastavky.Count)]; while (z1.name == z2.name) { z2 = l.mojeZastavky[rnd.Next(0, l.mojeZastavky.Count)]; } question = "Otázka č.6: Koľko zastávok musíme prejsť\n aby sme sa zo zastávky " + z1.name + " dostali na zastávku " + z2.name + " po linke " + l.name + " najrýchlejšie?\n (Vrátane zastávky z ktorej vychádzame.)"; List <Linka> lines = new List <Linka>(); lines.Add(l); answer = BFS(z1.name, z2.name, lines) + ""; }
public void zmazZastavku(Zastavka z) { List <int> index = new List <int>(); for (int i = 0; i < mojeZastavky.Count; i += 2) { if ((mojeZastavky[i].X == z.X && mojeZastavky[i].Y == z.Y) || (mojeZastavky[i + 1].X == z.X && mojeZastavky[i + 1].Y == z.Y)) { index.Add(i); } } if (index.Count > 0) { index.Reverse(); foreach (var i in index) { mojeZastavky.RemoveAt(i + 1); mojeZastavky.RemoveAt(i); } } }
void spoj(Zastavka z1, Zastavka z2) { z1.spoj(z2); z2.spoj(z1); }
void question10() { Zastavka z1 = zastavky[rnd.Next(0, zastavky.Count)]; Zastavka z2 = zastavky[rnd.Next(0, zastavky.Count)]; while (z1.name == z2.name) { z2 = zastavky[rnd.Next(0, zastavky.Count)]; } Dictionary <string, HashSet <string> > list = new Dictionary <string, HashSet <string> >(); foreach (var l in linky) { for (int i = 0; i < l.mojeZastavky.Count; i += 2) { if (!list.ContainsKey(l.mojeZastavky[i].name)) { list[l.mojeZastavky[i].name] = new HashSet <string>(); } list[l.mojeZastavky[i].name].Add(l.mojeZastavky[i + 1].name); if (!list.ContainsKey(l.mojeZastavky[i + 1].name)) { list[l.mojeZastavky[i + 1].name] = new HashSet <string>(); } list[l.mojeZastavky[i + 1].name].Add(l.mojeZastavky[i].name); } } foreach (var z in zastavky) { if (!list.ContainsKey(z.name)) { list[z.name] = new HashSet <string>(); } } List <string> visited = new List <string>(); List <Tuple <string, string> > queue = new List <Tuple <string, string> >(); string cesta = z1.name; queue.Add(new Tuple <string, string>(z1.name, cesta)); while (queue.Count > 0) { Tuple <string, string> t = queue[0]; queue.RemoveAt(0); string zast = t.Item1; cesta = t.Item2; visited.Add(zast); if (zast == z2.name) { answer += "*" + cesta; } foreach (var sused in list[zast]) { if (!visited.Contains(sused)) { queue.Add(new Tuple <string, string>(sused, cesta + "-" + sused)); } } } question = "Otázka č.10: Ktoré zastávky musíme prejsť aby sme sa zo zastávky " + z1.name + " dostali na zastávku " + z2.name + "\n najrýchlejšie?\n (Ak sa na zastávku nevieme dostať, napíšte 0. Ak je možností viac, vyberte jednu.)"; if (answer.Length == 0) { answer = "0"; } else { answer = answer.Remove(0, 1); } }
public void pridajUlozeneZastavky(Zastavka z1, Zastavka z2) { mojeZastavky.Add(z2); mojeZastavky.Add(z1); }