Exemplo n.º 1
0
        public Wspolrzedne getWspolrzedne(string miasto)
        {
            Wspolrzedne result = new Wspolrzedne();

            MainWindow.connection.Open();
            string query = "SELECT dlugosc, szerokosc FROM miejscowosci WHERE nazwa='" + miasto + "'";

            sql        = new MySqlCommand(query, MainWindow.connection);
            datareader = sql.ExecuteReader();
            if (datareader.FieldCount > 0)
            {
                if (datareader.Read())
                {
                    double x         = Convert.ToDouble(datareader[0]);
                    double dlugosc   = Math.Floor(x) + (x - Math.Floor(x)) * 100 / 60;
                    double y         = Convert.ToDouble(datareader[1]);
                    double szerokosc = Math.Floor(y) + (y - Math.Floor(y)) * 100 / 60;

                    result = new Wspolrzedne(dlugosc, szerokosc);
                }
            }
            datareader.Close();
            MainWindow.connection.Close();
            return(result);
        }
Exemplo n.º 2
0
    List <Wspolrzedne> RysujProsta(Wspolrzedne poczatek, Wspolrzedne koniec)
    {
        List <Wspolrzedne> prosta = new List <Wspolrzedne>();

        int x = poczatek.komorkaX;
        int y = poczatek.komorkaY;

        int dx = koniec.komorkaX - poczatek.komorkaX;
        int dy = koniec.komorkaY - poczatek.komorkaY;

        bool liniaPionowa = false;
        int  znak         = Math.Sign(dx);
        int  wspolczynnik = Math.Sign(dy);

        int pozioma = Mathf.Abs(dx);
        int pionowa = Mathf.Abs(dy);

        if (pozioma < pionowa)
        {
            liniaPionowa = true;
            pozioma      = Mathf.Abs(dy);
            pionowa      = Mathf.Abs(dx);

            znak         = Math.Sign(dy);
            wspolczynnik = Math.Sign(dx);
        }

        int skok = pozioma / 2; //точка в которой Y увеличивается (либо Х уменьшается)

        for (int i = 0; i < pozioma; i++)
        {
            prosta.Add(new Wspolrzedne(x, y));

            if (liniaPionowa)
            {
                y += znak;
            }
            else
            {
                x += znak;
            }

            skok += pionowa;
            if (skok >= pozioma)
            {
                if (liniaPionowa)
                {
                    x += wspolczynnik;
                }
                else
                {
                    y += wspolczynnik;
                }
                skok -= pozioma;
            }
        }

        return(prosta);
    }
Exemplo n.º 3
0
    void UtworzKorytaz(Pokoj pokoj1, Pokoj pokoj2, Wspolrzedne komorka1, Wspolrzedne komorka2)
    {
        Pokoj.PolaczPokoje(pokoj1, pokoj2);

        List <Wspolrzedne> prosta = RysujProsta(komorka1, komorka2);

        foreach (Wspolrzedne centr in prosta)
        {
            KrokKorytarza(2, centr);
        }
    }
Exemplo n.º 4
0
 void KrokKorytarza(int r, Wspolrzedne o)
 {
     for (int x = -r; x <= r; x++)
     {
         for (int y = -r; y <= r; y++)
         {
             if (x * x + y * y <= r * r)
             {
                 int natychmiastowaX = o.komorkaX + x;
                 int natychmiastowaY = o.komorkaY + y;
                 if (natychmiastowaX >= 0 && natychmiastowaX < szerokosc &&
                     natychmiastowaY >= 0 && natychmiastowaY < wysokosc)
                 {
                     poziom[natychmiastowaX, natychmiastowaY] = 0;
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
    List <Wspolrzedne> KomorkiStrefy(int poczX, int poczY)
    {
        List <Wspolrzedne> wspolrzedne = new List <Wspolrzedne>();

        int[,] komorkiSprawdzone = new int[szerokosc, wysokosc];
        int rodzaj = poziom[poczX, poczY];

        Queue <Wspolrzedne> queue = new Queue <Wspolrzedne>();

        queue.Enqueue(new Wspolrzedne(poczX, poczY));
        komorkiSprawdzone[poczX, poczY] = 1;

        while (queue.Count > 0)
        {
            Wspolrzedne wybranaKomorka = queue.Dequeue();
            wspolrzedne.Add(wybranaKomorka);

            for (int x = wybranaKomorka.komorkaX - 1; x <= wybranaKomorka.komorkaX + 1; x++)
            {
                for (int y = wybranaKomorka.komorkaY - 1; y <= wybranaKomorka.komorkaY + 1; y++)
                {
                    if ((x >= 0 && x < szerokosc && y >= 0 && y < wysokosc) &&
                        (x == wybranaKomorka.komorkaX || y == wybranaKomorka.komorkaY))
                    {
                        if (komorkiSprawdzone[x, y] == 0 && poziom[x, y] == rodzaj)
                        {
                            komorkiSprawdzone[x, y] = 1;
                            queue.Enqueue(new Wspolrzedne(x, y));
                        }
                    }
                }
            }
        }

        return(wspolrzedne);
    }
Exemplo n.º 6
0
    void PolaczNajblizszePokoje(List <Pokoj> pokoje, bool polaczanyPonownie = false)
    {
        List <Pokoj> listaPokojow1 = new List <Pokoj>();
        List <Pokoj> listaPokojow2 = new List <Pokoj>();

        //комнаты которые соединены прямо или косвенно с главной комнатой добавляем в список 2, а те которые не подключены добавляем в список 1

        if (polaczanyPonownie)
        {
            foreach (Pokoj pokoj in pokoje)
            {
                if (pokoj.polaczenieZPokojemGlownym)
                {
                    listaPokojow2.Add(pokoj);
                }
                else
                {
                    listaPokojow1.Add(pokoj);
                }
            }
        }
        else
        {
            listaPokojow1 = listaPokojow2 = pokoje;
        }

        int odlegloscMin = 0;

        Wspolrzedne najblizszaKomorka1 = new Wspolrzedne();
        Wspolrzedne najblizszaKomorka2 = new Wspolrzedne();

        Pokoj najblizszyPokoj1 = new Pokoj();
        Pokoj najblizszyPokoj2 = new Pokoj();

        bool polaczenieMozliwe = false;

        foreach (Pokoj pokoj1 in listaPokojow1)
        {
            if (!polaczanyPonownie)
            {
                polaczenieMozliwe = false;
                if (pokoj1.pokojePolaczone.Count > 0)
                {
                    continue;
                }
            }

            //итерация 2: если комната из списка не соединенных с главной, ищем для нее соединение с другими комнатами.

            foreach (Pokoj pokoj2 in listaPokojow2)
            {
                if (pokoj1 == pokoj2 || pokoj1.czyPolaczone(pokoj2))
                {
                    continue;
                }

                for (int granicznaKomorka1 = 0; granicznaKomorka1 < pokoj1.komorkiGraniczne.Count; granicznaKomorka1++)
                {
                    for (int granicznaKomorka2 = 0; granicznaKomorka2 < pokoj2.komorkiGraniczne.Count; granicznaKomorka2++)
                    {
                        Wspolrzedne komorka1 = pokoj1.komorkiGraniczne[granicznaKomorka1];
                        Wspolrzedne komorka2 = pokoj2.komorkiGraniczne[granicznaKomorka2];

                        int odleglosc =
                            (int)(((komorka1.komorkaX - komorka2.komorkaX) * (komorka1.komorkaX - komorka2.komorkaX)) +
                                  ((komorka1.komorkaY - komorka2.komorkaY) * (komorka1.komorkaY - komorka2.komorkaY)));

                        if (odleglosc < odlegloscMin || !polaczenieMozliwe)
                        {
                            odlegloscMin      = odleglosc;
                            polaczenieMozliwe = true;

                            najblizszaKomorka1 = komorka1;
                            najblizszaKomorka2 = komorka2;

                            najblizszyPokoj1 = pokoj1;
                            najblizszyPokoj2 = pokoj2;
                        }
                    }
                }
            }

            if (polaczenieMozliwe && !polaczanyPonownie)
            {
                UtworzKorytaz(najblizszyPokoj1, najblizszyPokoj2, najblizszaKomorka1, najblizszaKomorka2);
            }
        }

        if (polaczenieMozliwe && polaczanyPonownie)
        {
            UtworzKorytaz(najblizszyPokoj1, najblizszyPokoj2, najblizszaKomorka1, najblizszaKomorka2);
            PolaczNajblizszePokoje(pokoje, true);
        }



        if (!polaczanyPonownie) // после того нашли соседей для каждой из комнат, запускаем функцию заново чтобы соединить все комнаты с главной.
        {
            PolaczNajblizszePokoje(pokoje, true);
        }
    }
Exemplo n.º 7
0
        public List <String> getLastHarmonogram(bool pokazSzczegoly)
        {
            List <String> resultList = new List <String>();
            String        result     = "";

            MainWindow.connection.Open();
            string query = "SELECT MAX(idharmonogram) FROM harmonogram";

            sql        = new MySqlCommand(query, MainWindow.connection);
            datareader = sql.ExecuteReader();
            int maxid = 0;

            if (datareader.Read() && datareader.HasRows)
            {
                maxid = int.Parse(datareader.GetString(0));
            }
            Harmonogram h = new Harmonogram();

            h.idHarmonogram = maxid;

            datareader.Close();
            query      = "SELECT * FROM harmonogram WHERE idharmonogram='" + maxid + "'";
            sql        = new MySqlCommand(query, MainWindow.connection);
            datareader = sql.ExecuteReader();
            if (datareader.HasRows)
            {
                while (datareader.Read())
                {
                    h.idZlecenia.Add(int.Parse(datareader[2].ToString()));
                    h.idPracownika.Add(int.Parse(datareader[3].ToString()));
                    h.kolejnosc.Add(int.Parse(datareader[4].ToString()));
                    h.czas.Add(datareader[5].ToString());
                }
            }
            else
            {
                return(resultList);
            }
            datareader.Close();
            foreach (int x in h.idPracownika)
            {
                query      = "SELECT * FROM pracownicy WHERE idPracownicy='" + x + "'";
                sql        = new MySqlCommand(query, MainWindow.connection);
                datareader = sql.ExecuteReader();
                if (datareader.HasRows)
                {
                    if (datareader.Read())
                    {
                        h.pracownik.Add(datareader[1].ToString());
                    }
                }
                datareader.Close();
            }
            foreach (int x in h.idZlecenia)
            {
                query = "SELECT * FROM zlecenia WHERE idzlecenia='" + x + "'";
                sql   = new MySqlCommand(query, MainWindow.connection);

                datareader = sql.ExecuteReader();
                if (datareader.HasRows)
                {
                    if (datareader.Read())
                    {
                        h.nazwaSprzetu.Add(datareader[1].ToString());
                        h.nazwaUslugi.Add(datareader[2].ToString());
                        h.idKlienta.Add(int.Parse(datareader[3].ToString()));
                        h.czasWykonania.Add(int.Parse(datareader[4].ToString()));
                    }
                }
                datareader.Close();
            }
            foreach (int x in h.idKlienta)
            {
                query = "SELECT * FROM klienci WHERE NIP='" + x + "'";
                sql   = new MySqlCommand(query, MainWindow.connection);

                datareader = sql.ExecuteReader();
                if (datareader.HasRows)
                {
                    if (datareader.Read())
                    {
                        h.nazwaFirmy.Add(datareader[1].ToString());
                        h.adresFirmy.Add(datareader[2].ToString());
                    }
                }
                datareader.Close();
            }
            foreach (String x in h.adresFirmy)
            {
                query = "SELECT szerokosc,dlugosc FROM miejscowosci WHERE nazwa='" + x + "'";
                sql   = new MySqlCommand(query, MainWindow.connection);

                datareader = sql.ExecuteReader();
                if (datareader.HasRows)
                {
                    if (datareader.Read())
                    {
                        double x1        = Convert.ToDouble(datareader[0]);
                        double dlugosc   = Math.Floor(x1) + (x1 - Math.Floor(x1)) * 100 / 60;
                        double y1        = Convert.ToDouble(datareader[1]);
                        double szerokosc = Math.Floor(y1) + (y1 - Math.Floor(y1)) * 100 / 60;

                        Wspolrzedne lokalizacja = new Wspolrzedne(dlugosc, szerokosc);
                        h.lokalizacja.Add(lokalizacja);
                    }
                }
                datareader.Close();
            }
            for (int i = 0; i < h.nazwaFirmy.Count; i++)
            {
                DataRow row = h.dt.NewRow();
                row[0]  = h.idZlecenia[i];
                row[1]  = h.idPracownika[i];
                row[2]  = h.kolejnosc[i];
                row[3]  = h.czas[i];
                row[4]  = h.nazwaSprzetu[i];
                row[5]  = h.nazwaUslugi[i];
                row[6]  = h.idKlienta[i];
                row[7]  = h.czasWykonania[i];
                row[8]  = h.nazwaFirmy[i];
                row[9]  = h.adresFirmy[i];
                row[10] = h.pracownik[i];
                row[11] = h.lokalizacja[i].dlugosc;
                row[12] = h.lokalizacja[i].szerokosc;
                h.dt.Rows.Add(row);
            }
            DataRow[]   sortedrows  = h.dt.Select("", "idPracownika, kolejnosc");
            int         tmp         = -1;
            int         it          = 1;
            String      res         = "";
            double      cserwisanta = 0;
            Wspolrzedne lastCity    = new Wspolrzedne(19.47, 51.78);

            foreach (DataRow r in sortedrows)
            {
                if (tmp != int.Parse(r[1].ToString()))
                {
                    if (res.Length > 0)
                    {
                        Wspolrzedne newcity = new Wspolrzedne(19.47, 51.78);
                        cserwisanta += lastCity.getDistance(newcity) / 90.0;
                        lastCity     = newcity;
                        res         += "+to:51.78+N,+19.47+E&ll=51.930718,20.720215&spn=6.057099,19.138184&t=m&z=6";
                        resultList.Add(res);
                        result      = "c serwisanta = " + cserwisanta.ToString("f") + "\n" + result;
                        cserwisanta = 0;
                        result     += "------------------------\n";
                        resultList.Add(result);
                        result = "";


                        //result += "\nLink do mapy google: ";
                        //result += res;
                        //result += "\n";
                    }
                    res     = "https://maps.google.com/maps?saddr=51.78+N,+19.47+E";
                    result += r[10];
                    result += ":\n";
                    tmp     = int.Parse(r[1].ToString());
                    it      = 1;
                }
                res += "+to:";
                double sz = double.Parse(r[11].ToString());
                res += sz.ToString("f", CultureInfo.InvariantCulture);
                res += "+N,+";
                double dl = double.Parse(r[12].ToString());
                res += dl.ToString("f", CultureInfo.InvariantCulture);
                res += "+E";
                Wspolrzedne city = new Wspolrzedne(dl, sz);
                cserwisanta += lastCity.getDistance(city) / 90.0;
                lastCity     = city;
                cserwisanta += double.Parse(r[7].ToString());
                result      += it;
                result      += ". Firma ";
                result      += r[8];
                result      += " z siedzibą w miejscowości ";
                result      += r[9];
                if (pokazSzczegoly)
                {
                    result += "\n\tSprzęt: ";
                    result += r[4];
                    result += "\n\tOpis problemu: ";
                    result += r[5];
                    result += "\n\tEstymowany czas: ";
                    result += r[7];
                }
                result += "\n";
                it++;
            }
            MainWindow.connection.Close();
            if (res.Length > 0)
            {
                Wspolrzedne newcity = new Wspolrzedne(19.47, 51.78);
                cserwisanta += lastCity.getDistance(newcity) / 90.0;
                lastCity     = newcity;
                res         += "+to:51.78+N,+19.47+E&ll=51.930718,20.720215&spn=6.057099,19.138184&t=m&z=6";
                resultList.Add(res);
                result = "c serwisanta = " + cserwisanta.ToString("f") + "\n" + result;
                resultList.Add(result);
            }
            return(resultList);
        }
Exemplo n.º 8
0
 public static Wspolrzedne najblizszeUkryte()
 {
     for (int i = 1; ; i++)
     {
         int lTestowanych = 0;
         List<Wspolrzedne> zakrytePola = new List<Wspolrzedne>();
         for (int j = mojaPozycjaY + i; j >= mojaPozycjaY - i; j--)
         {
             for (int k = mojaPozycjaX - i; k <= mojaPozycjaX + i; k++)
             {
                 if ((mojaPozycjaY + i > j) && (mojaPozycjaY - i < j)
                     && (mojaPozycjaX - i < k) && (mojaPozycjaX + i > k))
                 {
                     goto Nastepne;
                 }
                 if (((k == mojaPozycjaX - i) || (k == mojaPozycjaX + i))
                     && ((j == mojaPozycjaY + i) || (j == mojaPozycjaY - i)))
                 {
                     goto Nastepne;
                 }
                 ZbadanePole testowane = znajdzPole(k, j);
                 if (testowane == null)
                 {
                     lTestowanych++;
                     for (int l = j + 1; l >= j - 1; l--)
                     {
                         for (int m = k - 1; m <= k + 1;
                             m++)
                         {
                             ZbadanePole dookolaTestowanego = znajdzPole(m, l);
                             if (!((dookolaTestowanego == null)
                                 || dookolaTestowanego.getPrzeszkoda()
                                 || dookolaTestowanego.getUnrechable()))
                             {
                                 Wspolrzedne dodawana = new Wspolrzedne(k, j);
                                 zakrytePola.Add(dodawana);
                                 goto Nastepne;
                             }
                         }
                     }
                 }
                 else
                     if (testowane.getUnrechable())
                     {
                         lTestowanych++;
                         for (int l = j + 1; l >= j - 1; l--)
                         {
                             for (int m = k - 1; m <= k + 1;
                                 m++)
                             {
                                 ZbadanePole dookolaTestowanego = znajdzPole(m, l);
                                 if (!((dookolaTestowanego == null)
                                     || dookolaTestowanego.getPrzeszkoda()
                                     || dookolaTestowanego.getUnrechable()))
                                 {
                                     Wspolrzedne dodawana = new Wspolrzedne(k, j);
                                     zakrytePola.Add(dodawana);
                                     goto Nastepne;
                                 }
                             }
                         }
                     }
             Nastepne:
                 ;
             }
         }
         if (zakrytePola.Count == 0)
         {
             if (lTestowanych == (8 * i) - 4)
             {
                 break;
             }
         }
         else
         {
             Wspolrzedne closest = null;
             int shortestWay = 2 * cennikSwiata.initialEnergy;
             foreach (Wspolrzedne wsp in zakrytePola)
             {
                 int comparer = findShortestWay(wsp.x, wsp.y);
                 if ((closest == null) || (shortestWay > comparer))
                 {
                     closest = wsp;
                     shortestWay = comparer;
                 }
             }
             return closest;
         }
     }
     return null;
 }
Exemplo n.º 9
0
 //Zachowanie naszego bota
 static void Zachowanie(String myState)
 {
     kierunek = new int[2];
     wysokosc = 100;
     kierunek[0] = 0;
     kierunek[1] = 1;
     mojaPozycjaX = 0;
     mojaPozycjaY = 0;
     ZnanaMapa.dodajPole(0, 0, 100, 0, false);
     Look();
     if (3 * cennikSwiata.rotateCost < (myEnergy - cennikSwiata.rotateCost))
     {
         if (new Random().Next(2) == 1)
         {
             RotateLeft();
             RotateLeft();
             RotateLeft();
         }
         else
         {
             RotateRight();
             RotateRight();
             RotateRight();
         }
     }
     najblizszeZrodlo = ZnanaMapa.findClosestEnergy();
     if (najblizszeZrodlo != null)
     {
         kosztDoZrodla = ZnanaMapa.findShortestWay(najblizszeZrodlo.x, najblizszeZrodlo.y);
     }
     else
     {
         kosztDoZrodla = -1;
     }
     bool loop = true;
     while (loop)
     {
         //Czekaj(1); //FUFUFUFUFU A JA ZASTANAWIAŁEM SIĘ CZEMU TAK WOLNO DZIAŁA!!! xP
         //Console.WriteLine("Moja energia: " + myEnergy);
         if ((myEnergy < smallestCost) || (myEnergy < cennikSwiata.moveCost))
         {
             Console.WriteLine("Mam za mało energii aby cokolwiek zrobić! Ginę!");
             break;
         }
         if ((czyRozmawiam) && (myEnergy - ZnanaMapa.znajdzPole(najblizszeZrodlo.x,
                     najblizszeZrodlo.y).getEnergia() >= kosztDoZrodla
                     + cennikSwiata.speakCost))
         {
             Talk(rozmowca, lastMessage);
             continue;
         }
         Wspolrzedne cel = ZnanaMapa.najblizszeUkryte();
         if (cel == null)
         {
             Console.WriteLine("Ile moglem, tyle zbadalem!\nWIN!");
             break;
         }
         if (myState == "Random")
         {
             if (ZnanaMapa.najblizszeUkryte() == null)
             {
                 break;
             }
             switch (new Random().Next(4))
             {
                 case 4/*"wyjdz"*/: loop = false;
                     break;
                 default:
                     break;
             }
         }
         else
         {
             if (najblizszeZrodlo != null)
             {
                 if (ZnanaMapa.znajdzPole(najblizszeZrodlo.x,
                     najblizszeZrodlo.y).getEnergia() > 0)
                 {
                     if ((myEnergy < cennikSwiata.initialEnergy - ZnanaMapa.znajdzPole(najblizszeZrodlo.x,
                     najblizszeZrodlo.y).getEnergia()) || (myEnergy < kosztDoZrodla
                     + 2 * cennikSwiata.moveCost))
                     {
                         cel = najblizszeZrodlo;
                     }
                 }
                 else
                 {
                     if (myEnergy < kosztDoZrodla
                         + cennikSwiata.moveCost * 3)
                     {
                         cel = najblizszeZrodlo;
                     }
                 }
             }
             ZnanaMapa.oneStepToThe(cel.x, cel.y);
         }
     }
     ZnanaMapa.show();
     Console.WriteLine("Press SPACEBAR to end!");
     loop = true;
     while (loop)
     {
         switch (Console.ReadKey().Key)
         {
             case ConsoleKey.Spacebar: loop = false;
                 break;
             default:
                 break;
         }
     }
 }
Exemplo n.º 10
0
 // ładujemy się
 private static void Recharge()
 {
     int added = agentVLuke_Jones.Recharge();
     myEnergy += added;
     ZnanaMapa.uaktualnijPole(mojaPozycjaX, mojaPozycjaY, added);
     ZbadanePole pole = ZnanaMapa.znajdzPole(mojaPozycjaX, mojaPozycjaY);
     if (pole.getEnergia() == 0)
     {
         najblizszeZrodlo = ZnanaMapa.findClosestEnergy();
         if (najblizszeZrodlo != null)
         {
             kosztDoZrodla = ZnanaMapa.findShortestWay(najblizszeZrodlo.x, najblizszeZrodlo.y);
         }
         else
         {
             kosztDoZrodla = -1;
         }
     }
     Console.WriteLine("Otrzymano " + added + " energii");
     if (ZnanaMapa.znajdzPole(mojaPozycjaX, mojaPozycjaY).getEnergia() != 0)
         if (!(myEnergy == cennikSwiata.initialEnergy))
             Recharge();
 }