示例#1
0
 static void UstawStatkiAutomatycznie(Plansza plan, Flota flota)
 {
     while (flota.UstawioneC < 1)
     {
         try
         {
             int[] pola = WspolrzedneStatkuZAutomatu(4);
             flota.czteromasztowiec[flota.UstawioneC] = new Czteromasztowiec();
             flota.czteromasztowiec[flota.UstawioneC].UstawStatek(plan.Plan[pola[0], pola[1]], plan.Plan[pola[2], pola[3]], plan);
             flota.UstawioneC++;
         }
         catch
         {
         }
     }
     while (flota.UstawioneT < 2)
     {
         try
         {
             int[] pola = WspolrzedneStatkuZAutomatu(3);
             flota.trzymasztowiec[flota.UstawioneT] = new Trzymasztowiec();
             flota.trzymasztowiec[flota.UstawioneT].UstawStatek(plan.Plan[pola[0], pola[1]], plan.Plan[pola[2], pola[3]], plan);
             flota.UstawioneT++;
         }
         catch
         {
         }
     }
     while (flota.UstawioneD < 3)
     {
         try
         {
             int[] pola = WspolrzedneStatkuZAutomatu(2);
             flota.dwumasztowiec[flota.UstawioneD] = new Dwumasztowiec();
             flota.dwumasztowiec[flota.UstawioneD].UstawStatek(plan.Plan[pola[0], pola[1]], plan.Plan[pola[2], pola[3]], plan);
             flota.UstawioneD++;
         }
         catch
         {
         }
     }
     while (flota.UstawioneJ < 4)
     {
         try
         {
             int[] pola = WspolrzedneStatkuZAutomatu(1);
             flota.jednomasztowiec[flota.UstawioneJ] = new Jednomasztowiec();
             flota.jednomasztowiec[flota.UstawioneJ].UstawStatek(plan.Plan[pola[0], pola[1]], plan.Plan[pola[2], pola[3]], plan);
             flota.UstawioneJ++;
         }
         catch
         {
         }
     }
 }
示例#2
0
        static int[] KomputerPierwszyStrzal(Plansza planszaCel, Plansza planszaUkryta, List <Pole> wszystkiePola)
        {
            Random rnd = new Random();

            int[] wspolrzedne = new int[3];
            int   strzal      = 3;

            while (strzal == 3)
            {
                int index = rnd.Next(wszystkiePola.Count);
                wspolrzedne[0] = wszystkiePola[index].X;
                wspolrzedne[1] = wszystkiePola[index].Y;
                strzal         = Strzelaj(planszaCel, planszaUkryta, wspolrzedne);
            }

            wspolrzedne[2] = strzal;
            return(wspolrzedne);
        }
示例#3
0
        static int Strzelaj(Plansza planszaCel, Plansza planszaUkryta, int[] wspolrzednePola) // 0 pudło. 1 Trafiony, 2 Zatopiony, 3 już strzelono w to miejsce
        {
            if ((wspolrzednePola[0] < 0 || wspolrzednePola[0] > 9) && (wspolrzednePola[1] < 0 || wspolrzednePola[1] > 9))
            {
                Console.WriteLine("Strzał poza Planszę");
                return(3);
            }

            if (planszaUkryta.SprawdzPole(wspolrzednePola[0], wspolrzednePola[1]) == '~')  // jeśli nie strzelano jeszcze w to miejsce
            {
                if (planszaCel.SprawdzPole(wspolrzednePola[0], wspolrzednePola[1]) == '~') // pudło
                {
                    planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status    = 'o';
                    planszaUkryta.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status = 'o';
                    Console.WriteLine($"Pudło! X: {wspolrzednePola[0]}, Y: {wspolrzednePola[1]}");
                    return(0);
                }
                else // trafienie
                {
                    planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status         = 'x';
                    planszaUkryta.Plan[wspolrzednePola[0], wspolrzednePola[1]].Status      = 'x';
                    planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Czesc.Trafiony = true;
                    Console.WriteLine($"Trafiony! X: {wspolrzednePola[0]}, Y: {wspolrzednePola[1]}");
                    if (planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Czesc.Statek.Zatopiony)
                    {
                        Console.WriteLine($"Zatopiony!!!  X: {wspolrzednePola[0]}, Y: {wspolrzednePola[1]}");
                        foreach (var czesc in planszaCel.Plan[wspolrzednePola[0], wspolrzednePola[1]].Czesc.Statek.Czesc)
                        {
                            planszaCel.ZmienStatusSasiednichPol(czesc.Pole.X, czesc.Pole.Y);
                            planszaUkryta.ZmienStatusSasiednichPol(czesc.Pole.X, czesc.Pole.Y);
                        }
                        return(2);
                    }

                    return(1);
                }
            }
            else
            {
                Console.WriteLine("Oddałeś już strzał w to pole lub zestrzeliłeś statek na sąsiednim polu. spróbuj jeszcze raz!");
                return(3);
            }
        }
示例#4
0
        static bool StatekWPionie(int[] wspolrzedne, Plansza planszaUkryta) // szukaj sasiedniego pola do wsp. oznaczonego x
        {
            if (wspolrzedne[0] < 9 && planszaUkryta.Plan[wspolrzedne[0] + 1, wspolrzedne[1]].Status == 'x')
            {
                return(false); //poziom
            }
            if (wspolrzedne[0] > 0 && planszaUkryta.Plan[wspolrzedne[0] - 1, wspolrzedne[1]].Status == 'x')
            {
                return(false);
            }
            if (wspolrzedne[1] < 9 && planszaUkryta.Plan[wspolrzedne[0], wspolrzedne[1] + 1].Status == 'x')
            {
                return(true); // pion
            }
            if (wspolrzedne[1] > 0 && planszaUkryta.Plan[wspolrzedne[0], wspolrzedne[1] - 1].Status == 'x')
            {
                return(true);
            }

            return(true); // nigdy nie powinno zostać zwrócone
        }
示例#5
0
        static List <Pole> GetPotencjalneStrzalyKomputera(int[] wspolrzedne, Plansza planszaUkryta)
        {
            List <Pole> lista = new List <Pole>();

            if (wspolrzedne[0] < 9 && planszaUkryta.Plan[wspolrzedne[0] + 1, wspolrzedne[1]].Status == '~')
            {
                lista.Add(planszaUkryta.Plan[wspolrzedne[0] + 1, wspolrzedne[1]]);
            }
            if (wspolrzedne[0] > 0 && planszaUkryta.Plan[wspolrzedne[0] - 1, wspolrzedne[1]].Status == '~')
            {
                lista.Add(planszaUkryta.Plan[wspolrzedne[0] - 1, wspolrzedne[1]]);
            }
            if (wspolrzedne[1] < 9 && planszaUkryta.Plan[wspolrzedne[0], wspolrzedne[1] + 1].Status == '~')
            {
                lista.Add(planszaUkryta.Plan[wspolrzedne[0], wspolrzedne[1] + 1]);
            }
            if (wspolrzedne[1] > 0 && planszaUkryta.Plan[wspolrzedne[0], wspolrzedne[1] - 1].Status == '~')
            {
                lista.Add(planszaUkryta.Plan[wspolrzedne[0], wspolrzedne[1] - 1]);
            }

            return(lista);
        }
示例#6
0
 public void UstawStatek(Pole pocz, Pole kon, Plansza plan)
 {
     if (CzyMoznaUmiescic(pocz, kon, plan))
     {
         for (int i = 0; i < Maszty; i++)
         {
             if (Kierunek == 'n')
             {
                 plan.ZmienStatusPola(pocz.X, pocz.Y - i, Rodzaj);
                 Czesc[i].Pole = plan.Plan[pocz.X, pocz.Y - i];  //przypisanie pola do cz statku
                 plan.Plan[pocz.X, pocz.Y - i].Czesc = Czesc[i]; //przypisanie cz statku do pola
             }
             if (Kierunek == 's')
             {
                 plan.ZmienStatusPola(pocz.X, pocz.Y + i, Rodzaj);
                 Czesc[i].Pole = plan.Plan[pocz.X, pocz.Y + i];  //przypisanie pola do cz statku
                 plan.Plan[pocz.X, pocz.Y + i].Czesc = Czesc[i]; //przypisanie cz statku do pola
             }
             if (Kierunek == 'e')
             {
                 plan.ZmienStatusPola(pocz.X + i, pocz.Y, Rodzaj);
                 Czesc[i].Pole = plan.Plan[pocz.X + i, pocz.Y];  //przypisanie pola do cz statku
                 plan.Plan[pocz.X + i, pocz.Y].Czesc = Czesc[i]; //przypisanie cz statku do pola
             }
             if (Kierunek == 'w')
             {
                 plan.ZmienStatusPola(pocz.X - i, pocz.Y, Rodzaj);
                 Czesc[i].Pole = plan.Plan[pocz.X - i, pocz.Y];  //przypisanie pola do cz statku
                 plan.Plan[pocz.X - i, pocz.Y].Czesc = Czesc[i]; //przypisanie cz statku do pola
             }
         }
     }
     else
     {
         throw new Exception("Nie można umieścić statku!");
     }
 }
示例#7
0
 public CzescStatku(int x, int y, char rodzaj, Plansza poleNaPlanszy)
 {
     Pole     = poleNaPlanszy.Plan[x, y];
     Rodzaj   = rodzaj;
     Trafiony = false;
 }
示例#8
0
        static void Main(string[] args)
        {
            Plansza gracz          = new Plansza();
            Plansza komputer       = new Plansza();
            Plansza ukrytaGracz    = new Plansza();
            Plansza ukrytaKomputer = new Plansza();

            gracz.Wyswietl();

            Flota gracza    = new Flota();
            Flota komputera = new Flota();

            //logika komputer
            List <Pole> potencjalneStrzalyKomputera = new List <Pole>();


            while (true)
            {
                Console.WriteLine("\nWybierz:\n" +
                                  $"1. Ustaw statki, pozostało: Jednomasztowiec * {4 - gracza.UstawioneJ}, Dwumasztowiec * {3 - gracza.UstawioneD}, Trzymasztowiec * {2 - gracza.UstawioneT}, Czteromasztowiec *{1 - gracza.UstawioneC}\n" +
                                  "2. Rozstaw statki automatycznie\n" +
                                  "3. Wyswietl Swoją Planszę\n" +
                                  "4. Rozpocznij grę\n" +
                                  "0. Wyjscie\n"
                                  );

                int wybor;
                while (!int.TryParse(Console.ReadLine(), out wybor))
                {
                    Console.WriteLine("\nPodałeś zły znak! wpisz jeszcze raz!");
                    Console.WriteLine("\nWybierz:\n" +
                                      $"1. Ustaw statki, pozostało: Jednomasztowiec * {4 - gracza.UstawioneJ}, Dwumasztowiec * {3 - gracza.UstawioneD}, Trzymasztowiec * {2 - gracza.UstawioneT}, Czteromasztowiec *{1 - gracza.UstawioneC}\n" +
                                      "2. Rozstaw statki automatycznie\n" +
                                      "3. Wyswietl Swoją Planszę\n" +
                                      "4. Rozpocznij grę\n" +
                                      "0. Wyjscie\n"
                                      );
                }

                switch (wybor)
                {
                case 1:
                    int[] pole = PodajWspolrzednePol();

                    if (PoliczOdlegloscMiedzyPolami(pole) == 4)
                    {
                        if (gracza.UstawioneC < 1)
                        {
                            try
                            {
                                gracza.czteromasztowiec[gracza.UstawioneC] = new Czteromasztowiec();
                                gracza.czteromasztowiec[gracza.UstawioneC].UstawStatek(gracz.Plan[pole[0], pole[1]], gracz.Plan[pole[2], pole[3]], gracz);
                                gracza.UstawioneC++;
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("Cos poszlo nietak " + e);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Ustawiłeś już maksymalną liczbę tego rodzaju statku");
                        }
                    }
                    if (PoliczOdlegloscMiedzyPolami(pole) == 3)
                    {
                        if (gracza.UstawioneT < 2)
                        {
                            try
                            {
                                gracza.trzymasztowiec[gracza.UstawioneT] = new Trzymasztowiec();
                                gracza.trzymasztowiec[gracza.UstawioneT].UstawStatek(gracz.Plan[pole[0], pole[1]], gracz.Plan[pole[2], pole[3]], gracz);
                                gracza.UstawioneT++;
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("Cos poszlo nietak " + e);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Ustawiłeś już maksymalną liczbę tego rodzaju statku");
                        }
                    }
                    if (PoliczOdlegloscMiedzyPolami(pole) == 2)
                    {
                        if (gracza.UstawioneD < 3)
                        {
                            try
                            {
                                gracza.dwumasztowiec[gracza.UstawioneD] = new Dwumasztowiec();
                                gracza.dwumasztowiec[gracza.UstawioneD].UstawStatek(gracz.Plan[pole[0], pole[1]], gracz.Plan[pole[2], pole[3]], gracz);
                                gracza.UstawioneD++;
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("Cos poszlo nietak " + e);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Ustawiłeś już maksymalną liczbę tego rodzaju statku");
                        }
                    }
                    if (PoliczOdlegloscMiedzyPolami(pole) == 1)
                    {
                        if (gracza.UstawioneJ < 4)
                        {
                            try
                            {
                                gracza.jednomasztowiec[gracza.UstawioneJ] = new Jednomasztowiec();
                                gracza.jednomasztowiec[gracza.UstawioneJ].UstawStatek(gracz.Plan[pole[0], pole[1]], gracz.Plan[pole[2], pole[3]], gracz);
                                gracza.UstawioneJ++;
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("Cos poszlo nietak " + e);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Ustawiłeś już maksymalną liczbę tego rodzaju statku");
                        }
                    }
                    if (PoliczOdlegloscMiedzyPolami(pole) <= 0)
                    {
                        Console.WriteLine("Statek nie jest w Pionie lub Poziomie!");
                    }
                    gracz.Wyswietl();
                    break;

                case 2:
                    UstawStatkiAutomatycznie(gracz, gracza);
                    gracz.Wyswietl();
                    break;

                case 3:
                    gracz.Wyswietl();
                    break;

                case 4:
                    if (10 - gracza.UstawioneJ - gracza.UstawioneD - gracza.UstawioneT - gracza.UstawioneC == 0)     // jeśli rozstawiłeś już statki
                    {
                        UstawStatkiAutomatycznie(komputer, komputera);

                        while (true)
                        {
                            Console.WriteLine("\nWybierz:\n" +
                                              $"1. Strzelaj\n" +
                                              "2. Statystyka\n" +
                                              "3. Wyswietl Swoją Planszę\n" +
                                              "4. Wyswietl Plansze Cel\n" +
                                              "0. Wyjscie\n"
                                              );

                            int wybor2;
                            while (!int.TryParse(Console.ReadLine(), out wybor2))
                            {
                                Console.WriteLine("\nPodałeś zły znak! wpisz jeszcze raz!");
                                Console.WriteLine("\nWybierz:\n" +
                                                  $"1. Strzelaj\n" +
                                                  "2. Statystyka\n" +
                                                  "3. Wyswietl Swoją Planszę\n" +
                                                  "4. Wyswietl Plansze Cel\n" +
                                                  "0. Wyjscie\n"
                                                  );
                            }



                            switch (wybor2)
                            {
                            case 1:
                                int s = 3;         // sprawdza czystrzał się udał
                                s = Strzelaj(komputer, ukrytaGracz, PodajWspolrzedneJednegoPola("do strzału"));
                                if (komputera.Zatopienia == 10)
                                {
                                    Console.WriteLine("!!!!!WYGRAŁEŚ!!!!!");
                                    Console.WriteLine(gracza.Statystyka("Gracz "));
                                    Console.WriteLine(komputera.Statystyka("Komputer "));
                                    Console.ReadKey();
                                    return;
                                }

                                if (s != 3)
                                {
                                    Console.WriteLine("Strzał Komputera");
                                    potencjalneStrzalyKomputera = KomputerStrzela(gracz, ukrytaKomputer, potencjalneStrzalyKomputera);
                                    if (gracza.Zatopienia == 10)
                                    {
                                        Console.WriteLine("!!!!! =((((( PRZEGRAŁEŚ =((((( !!!!!");
                                        Console.WriteLine(gracza.Statystyka("Gracz "));
                                        Console.WriteLine(komputera.Statystyka("Komputer "));
                                        Console.ReadKey();
                                        return;
                                    }
                                }
                                break;

                            case 2:
                                Console.WriteLine(gracza.Statystyka("Gracz "));
                                Console.WriteLine(komputera.Statystyka("Komputer "));
                                break;

                            case 3:
                                gracz.Wyswietl();
                                break;

                            case 4:
                                ukrytaGracz.Wyswietl();
                                break;

                            case 0:
                                return;

                            default:
                                Console.WriteLine("Nie ma takiej opcji w Menu");
                                break;
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Nie rozstawiłeś wszystkich statków");
                    }

                    break;

                case 0:
                    return;

                default:
                    Console.WriteLine("Nie ma takiej opcji w Menu");
                    break;
                }
            }
        }
示例#9
0
        static List <Pole> KomputerStrzela(Plansza planszaCel, Plansza planszaUkryta, List <Pole> potencjalneStrzaly)
        {
            List <Pole> wszystkiePola = new List <Pole>();

            foreach (var pole in planszaUkryta.Plan) // zgarnia wszystkie możliwe do strzału pola
            {
                if (pole.Status == '~')
                {
                    wszystkiePola.Add(pole);
                }
            }


            int[] wspolrzedne = new int[3];                                                     // {x,y, wynik strzalu}
            if (!potencjalneStrzaly.Any())                                                      // jeśli nie ma podejrzanych pol
            {
                wspolrzedne = KomputerPierwszyStrzal(planszaCel, planszaUkryta, wszystkiePola); // tu strzela
                int[] strzal = new[] { wspolrzedne[0], wspolrzedne[1] };

                if (wspolrzedne[2] == 1) // trafiony
                {
                    potencjalneStrzaly.AddRange(GetPotencjalneStrzalyKomputera(strzal, planszaUkryta));
                }
            }
            else // jeśli są potencjalne strzały
            {
                Random rnd = new Random();

                int strzal = 3;
                while (strzal == 3)
                {
                    int index = rnd.Next(potencjalneStrzaly.Count);
                    wspolrzedne[0] = potencjalneStrzaly[index].X;
                    wspolrzedne[1] = potencjalneStrzaly[index].Y;
                    strzal         = Strzelaj(planszaCel, planszaUkryta, wspolrzedne);
                    if (strzal == 0) //pudlo - wykreśl pole z listy potencjalnych strzałów
                    {
                        potencjalneStrzaly.RemoveAt(index);
                    }
                    else if (strzal == 1) // kolejny trafiony
                    {
                        int[] namiary = new[] { wspolrzedne[0], wspolrzedne[1] };

                        potencjalneStrzaly.AddRange(GetPotencjalneStrzalyKomputera(namiary, planszaUkryta));
                        //kasuje obecny z listy
                        potencjalneStrzaly.RemoveAt(index);

                        if (StatekWPionie(namiary, planszaUkryta))
                        {
                            Console.WriteLine("Pion");
                            potencjalneStrzaly = potencjalneStrzaly.Where(x => x.X == wspolrzedne[0]).ToList();
                        }
                        else
                        {
                            Console.WriteLine("Poziom");
                            potencjalneStrzaly = potencjalneStrzaly.Where(x => x.Y == wspolrzedne[1]).ToList();
                        }
                    }
                    else if (strzal == 2) // zatopiony
                    {
                        potencjalneStrzaly.Clear();
                    }
                }
            }

            /*    // Na potrzeby testów komputera
             * Console.WriteLine("Obecny");
             * Console.WriteLine($"X: {wspolrzedne[0]}, Y: {wspolrzedne[1]}");
             *
             * Console.WriteLine("Potencjalne ////////////////");
             * foreach (var ps in potencjalneStrzaly)
             * {
             *  Console.WriteLine(ps.ToString());
             * }
             */
            return(potencjalneStrzaly);
        }
示例#10
0
        public bool CzyMoznaUmiescic(Pole pocz, Pole kon, Plansza plan)
        {
            int dlugosc = 0;

            //czy poczatek i koniec na planszy
            if (pocz.X < 10 && pocz.X >= 0 &&
                pocz.Y < 10 && pocz.Y >= 0 &&
                kon.X < 10 && kon.X >= 0 &&
                kon.Y < 10 && kon.Y >= 0)
            {
                //czy w pionie
                if (pocz.X - kon.X == 0)
                {
                    dlugosc = Math.Abs(pocz.Y - kon.Y) + 1;
                    if (pocz.Y - kon.Y < 0)
                    {
                        Kierunek = 's';
                    }
                    else
                    {
                        Kierunek = 'n';
                    }
                }
                //czy w poziomie
                else if (pocz.Y - kon.Y == 0)
                {
                    dlugosc = Math.Abs(pocz.X - kon.X) + 1;
                    if (pocz.X - kon.X < 0)
                    {
                        Kierunek = 'e';
                    }
                    else
                    {
                        Kierunek = 'w';
                    }
                }
                else if (pocz.Y - kon.Y != 0 && pocz.X - kon.X != 0)
                {
                    throw new Exception("Statek nie jest w Pionie lub Poziomie! Lub jest poza Planszą");
                }

                if (dlugosc == Maszty)
                {
                    if (Kierunek == 'n')
                    {
                        for (int i = 0; i < Maszty; i++)
                        {
                            if (plan.SprawdzPole(pocz.X, pocz.Y - i) != '~' || plan.SprawdzSasiedniePola(pocz.X, pocz.Y - i) != true)
                            {
                                throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!");
                            }
                        }
                        return(true);
                    }

                    if (Kierunek == 's')
                    {
                        for (int i = 0; i < Maszty; i++)
                        {
                            if (plan.SprawdzPole(pocz.X, pocz.Y + i) != '~' || plan.SprawdzSasiedniePola(pocz.X, pocz.Y + i) != true)
                            {
                                throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!");
                            }
                        }
                        return(true);
                    }

                    if (Kierunek == 'e')
                    {
                        for (int i = 0; i < Maszty; i++)
                        {
                            if (plan.SprawdzPole(pocz.X + i, pocz.Y) != '~' || plan.SprawdzSasiedniePola(pocz.X + i, pocz.Y) != true)
                            {
                                throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!");
                            }
                        }
                        return(true);
                    }

                    if (Kierunek == 'w')
                    {
                        for (int i = 0; i < Maszty; i++)
                        {
                            if (plan.SprawdzPole(pocz.X - i, pocz.Y) != '~' || plan.SprawdzSasiedniePola(pocz.X - i, pocz.Y) != true)
                            {
                                throw new Exception("Statek na tych bądź sąsiednich polach już został ustawiony!");
                            }
                        }
                        return(true);
                    }
                }
                else
                {
                    throw new Exception("Statek niewymiarowy!");
                }
            }
            else
            {
                throw new Exception("Wyszedłeś poza Plansze");
            }
            return(false);
        }