Beispiel #1
0
 public List<Pozycja> wZasiegu(Statek statek, Rozmiar rozmiar)
 {
     List<Pozycja> poz = new List<Pozycja>();
     for (int i = 0; i < 5; i++)
         for (int j = 0; j < 5; j++)
         {
             if (j == 0 && i == 0)
                 continue;
             foreach (Pozycja p in statek.pozycje)
                 if (modulo((pPelnePozycje[3].x + i), rozmiar.x) == p.x && (modulo(pPelnePozycje[3].y + j, rozmiar.y) == p.y))
                     poz.Add(p);
         }
     for (int i = 0; i < 5; i++)
         for (int j = 0; j < 5; j++)
         {
             if (j == 0 && i == 0)
                 continue;
             foreach (Pozycja p in statek.pozycje)
                 if (modulo((pPelnePozycje[1].x - i), rozmiar.x) == p.x && (modulo(pPelnePozycje[1].y + j, rozmiar.y) == p.y))
                     poz.Add(p);
         }
     for (int i = 0; i < 5; i++)
         for (int j = 0; j < 5; j++)
         {
             if (j == 0 && i == 0)
                 continue;
             foreach (Pozycja p in statek.pozycje)
                 if (modulo((pPelnePozycje[0].x - i), rozmiar.x) == p.x && (modulo(pPelnePozycje[0].y - j, rozmiar.y) == p.y))
                     poz.Add(p);
         }
     for (int i = 0; i < 5; i++)
         for (int j = 0; j < 5; j++)
         {
             if (j == 0 && i == 0)
                 continue;
             foreach (Pozycja p in statek.pozycje)
                 if (modulo((pPelnePozycje[2].x + i), rozmiar.x) == p.x && (modulo(pPelnePozycje[2].y - j, rozmiar.y) == p.y))
                     poz.Add(p);
         }
     return poz;
 }
Beispiel #2
0
 public void start()
 {
     statek = new Statek();
     int idPolecenia;
     while (true)
     {
         string pozycjaStatku = PoleceniaSieciowe.odbierzPolecenie(stream);
         Polecenia polecenie = null;
         try
         {
             polecenie = Parser.parsuj(pozycjaStatku);
         }
         catch (Wyjatki.BlednePolecenie)
         {
             PoleceniaSieciowe.wyslijPolecenie(klient.GetStream(), new Polecenia("NO", KodyBledu.blednePolecenie));
             continue;
         }
         if (polecenie.Polecenie != "SET")
         {
             PoleceniaSieciowe.wyslijPolecenie(stream, new Polecenia("NO", KodyBledu.blednePolecenie));
             continue;
         }
         if (polecenie.IdKlienta != idKlienta)
         {
             PoleceniaSieciowe.wyslijPolecenie(stream, new Polecenia("NO", KodyBledu.bledneIdKlienta));
             continue;
         }
         List<Pozycja> pozycje = polecenie.Pozycje;
         pozycje.Sort();
         foreach (Pozycja p in pozycje)
         {
             if (p.x < 0 || p.x > plansza.rozmiarX - 1 || p.y < 0 || p.y > plansza.rozmiarY - 1)
             {
                 PoleceniaSieciowe.wyslijPolecenie(stream, new Polecenia("NO", KodyBledu.blednePolozenieStartowe));
                 continue;
             }
         }
         bool blad = false;
         for (int i = 0; i < 3; i++)
             for (int j = i + 1; j < 4; j++)
             {
                 if (pozycje[i] == pozycje[j]) blad = true;
                 if (Math.Abs(pozycje[i].x - pozycje[j].x) > 1)
                     if ((pozycje[i].x != 0 && pozycje[i].x != plansza.rozmiarX - 1) || (pozycje[j].y != 0 && pozycje[j].y != plansza.rozmiarX - 1))
                     {
                         blad = true;
                         break;
                     }
                 if (Math.Abs(pozycje[i].y - pozycje[j].y) > 1)
                     if ((pozycje[i].y != 0 && pozycje[i].y != plansza.rozmiarY - 1) || (pozycje[j].y != 0 && pozycje[j].y != plansza.rozmiarY - 1))
                     {
                         blad = true;
                         break;
                     }
                 if (blad) break;
             }
         if (blad)
         {
             PoleceniaSieciowe.wyslijPolecenie(stream, new Polecenia("NO", KodyBledu.blednePolozenieStartowe));
             continue;
         }
         statek = new Statek(idKlienta, stream, pozycje);
         if (plansza.moznaDodacStatek(statek))
         {
             plansza.dodajStatek(statek);
         }
         else
         {
             PoleceniaSieciowe.wyslijPolecenie(stream, new Polecenia("NO", KodyBledu.maksymalnaLiczbaGraczy));
             continue;
         }
         idPolecenia = polecenie.IdPolecenie;
         break;
     }
     statek.dodano = true;
     PoleceniaSieciowe.wyslijPolecenie(stream, new Polecenia("OK", idPolecenia));
     th = Thread.CurrentThread;
     plansza.zglosGotowosc(odbierajPolecenia);
 }
Beispiel #3
0
 public bool kolizja(Statek s, int kierunek, Rozmiar rozmiar)
 {
     foreach (Pozycja p in s.pozycje)
     {
         foreach (Pozycja pp in pozycje)
         {
             if (kierunek == Kierunki.gora)
                 return (modulo((p.y + 1), rozmiar.y) == pp.y && (p.x == pp.x));
             if (kierunek == Kierunki.dol)
                 return (modulo((p.y - 1), rozmiar.y) == pp.y && (p.x == pp.x));
             if (kierunek == Kierunki.prawo)
             {
                 if (modulo((p.x + 1), rozmiar.x) == pp.x && (p.y == pp.y))
                     Console.WriteLine("1. " + p.ToString() + "2. " + pp.ToString());
                 return (modulo((p.x + 1), rozmiar.x) == pp.x && (p.y == pp.y));
             }
             if (kierunek == Kierunki.lewo)
                 return (modulo((p.x - 1), rozmiar.x) == pp.x && (p.y == pp.y));
         }
     }
     mutexPozycje.ReleaseMutex();
     s.mutexPozycje.ReleaseMutex();
     return false;
 }