Exemplo n.º 1
0
        //Metoda pri zasahu lode kontroluje vedlejsi policka
        private void LogikaPocitace()
        {
            if (Policko == HerniPrvek.Lod)
            {
                //odkryvani policek smerem do prava
                if (smerDoPrava)
                {
                    AktualniPozice = new Pozice(AktualniPozice.X + 1, AktualniPozice.Y);

                    //pokud je hadana pozice odkryta, odkryva do leva
                    if (!seznamPozic.Contains(AktualniPozice) && VelikostZasazeneLode > 0)
                    {
                        while (!seznamPozic.Contains(AktualniPozice))
                        {
                            AktualniPozice = new Pozice(AktualniPozice.X - 1, AktualniPozice.Y);
                        }
                        smerDoPrava = false; //zmeni smer odkryvani do leva
                    }
                }
                else
                {
                    //odkryvani policek do leva
                    AktualniPozice = new Pozice(AktualniPozice.X - 1, AktualniPozice.Y);
                }
            }
            else if ((Policko == HerniPrvek.Voda) && (VelikostZasazeneLode > 0))
            {
                smerDoPrava = false;

                do
                {
                    AktualniPozice = new Pozice(AktualniPozice.X - 1, AktualniPozice.Y);
                }while (!seznamPozic.Contains(AktualniPozice));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Metoda pro vykresleni pozic ktere zadal pocitac
        /// </summary>
        public override void Hraje()
        {
            //nastaveni smeru odkryvani
            if (!Logika)
            {
                smerDoPrava = true;
            }

            if (Logika)
            {
                LogikaPocitace();
            }

            else
            {
                pozice         = hadanaPozice.Next(0, seznamPozic.Count);
                AktualniPozice = seznamPozic[pozice];
            }

            bool stisknutaKlavesa = false;

            Console.SetCursorPosition(herniPlocha.SirkaX + 35, 5);
            Console.WriteLine("Počítač zadal: " + herniPlocha.legenda[AktualniPozice.X] + " , " + herniPlocha.legenda[AktualniPozice.Y]);
            Console.SetCursorPosition(herniPlocha.SirkaX + 35, 8);
            Console.WriteLine("<<< Stiskni Mezerník >>>");
            Console.SetCursorPosition(herniPlocha.SirkaX + 35, 13);
            Console.Write("Nápověda");
            Console.SetCursorPosition(herniPlocha.SirkaX + 35, 14);
            Console.Write("======================");
            Console.SetCursorPosition(herniPlocha.SirkaX + 35, 15);
            Console.Write("Hru ukončíš [ESC] ");
            while (!stisknutaKlavesa)
            {
                klavesa = Console.ReadKey(true);

                if (klavesa.Key == ConsoleKey.Escape)
                {
                    UkonceniHry      = true;
                    stisknutaKlavesa = true;
                }
                else if (klavesa.Key == ConsoleKey.Spacebar)   //Hra pokracuje pri stisku mezerniku
                {
                    OdkryjPolicko(AktualniPozice.X, AktualniPozice.Y);
                    seznamPozic.Remove(AktualniPozice);
                    stisknutaKlavesa = true;
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Metoda RozmistiLode, rozmisti lode na herni plochu
        /// </summary>
        public void RozmistiLode()
        {
            aktualniLod    = new Random();
            aktualniPozice = new Random();
            bool vyhledava = true;

            while (vyhledava)
            {
                int    vybranaPozice = aktualniPozice.Next(0, seznamPozic.Count); //Vygeneruje volnou pozici
                int    vybranaLod    = aktualniLod.Next(0, seznamTypLodi.Count);  //Vygeneruje lod ktera se ma umistit na herni plochu
                Pozice pomPozice     = seznamPozic[vybranaPozice];

                switch (seznamTypLodi[vybranaLod])  //Podle vybrane lodi ji vykresli na hraci plochu
                {
                case Lode.bitevniLod:
                    UmistiLod(Lode.bitevniLod, pomPozice);
                    break;

                case Lode.kriznik:
                    UmistiLod(Lode.kriznik, pomPozice);
                    break;

                case Lode.letadlovaLod:
                    UmistiLod(Lode.letadlovaLod, pomPozice);
                    break;

                case Lode.ponorka:
                    UmistiLod(Lode.ponorka, pomPozice);
                    break;

                case Lode.torpedoborec:
                    UmistiLod(Lode.torpedoborec, pomPozice);
                    break;
                }

                //Je-li seznam lodi prazdny ukonci rozmistovani lodi
                if (seznamTypLodi.Count == 0)
                {
                    vyhledava = false;
                }
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Metoda slouzi k umisteni lode na herni plochu
 /// </summary>
 /// <param name="aktualniLod">Umisti predanou lod</param>
 /// <param name="pomPozice">Umisteni na predane pozice</param>
 private void UmistiLod(Lode aktualniLod, Pozice pomPozice)
 {
     for (int i = 0; i < seznamLodi.Count; i++)
     {
         if (seznamLodi[i].TypLode == aktualniLod)
         {
             if (!seznamLodi[i].Rozmistena)
             {
                 //Kontrola zda je pozice volna
                 if (VolnaPozice(seznamLodi[i].VelikostLode, pomPozice))
                 {
                     for (int x = 0; x < seznamLodi[i].VelikostLode; x++)
                     {
                         herniPrvek[pomPozice.X + x, pomPozice.Y] = HerniPrvek.Lod;
                         seznamLodi[i][x] = new Pozice(pomPozice.X + x, pomPozice.Y); //ulozi do indexeru pozici lode
                     }
                     seznamPozic.Remove(pomPozice);                                   //Vymaze pozici ze seznamu
                     seznamTypLodi.Remove(seznamLodi[i].TypLode);                     //Vymaze lod ze seznamu
                     seznamLodi[i].Rozmistena = true;
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Metoda VolnaPozice zkontroluje zda je pozice volna
        /// </summary>
        /// <param name="velLode">Udava velikost umistovane lode</param>
        /// <param name="pomomocnaPozice">Slouzi ke kontrole vedlejsich pozic</param>
        /// <returns>Vraci true pokud je pozice volna a kdyz je pozice obsazena tak vraci false</returns>
        private bool VolnaPozice(int velLode, Pozice pomomocnaPozice)
        {
            prazdnaPozice = false;
            int pomX, pomY;

            //kontroluje zda se pozice vyskytuje na pozici na zacatku v rohu a v rohu na  x = 0
            if ((pomomocnaPozice.X == 0 && pomomocnaPozice.Y == 0) || (pomomocnaPozice.X == 0 && pomomocnaPozice.Y == (vyska - 1)))
            {
                //kontrola pozice na zacatku v rohu
                if (pomomocnaPozice.Y == 0)
                {
                    for (int y = 0; y < 2; y++)
                    {
                        for (int x = 0; x < velLode + 1; x++)
                        {
                            if (herniPrvek[pomomocnaPozice.X + x, pomomocnaPozice.Y + y] == HerniPrvek.Voda)
                            {
                                prazdnaPozice = true;
                            }
                            else
                            {
                                prazdnaPozice = false;
                                break;
                            }
                        }
                        if (prazdnaPozice == false)
                        {
                            break;
                        }
                    }
                }

                //Kontrola pozice v rohu na hore, na zacatku
                else if (pomomocnaPozice.Y == (vyska - 1))
                {
                    pomY = pomomocnaPozice.Y - 1;
                    for (int y = 0; y < 2; y++)
                    {
                        for (int x = 0; x < velLode + 1; x++)
                        {
                            if (herniPrvek[pomomocnaPozice.X + x, pomY + y] == HerniPrvek.Voda)
                            {
                                prazdnaPozice = true;
                            }
                            else
                            {
                                prazdnaPozice = false;
                                break;
                            }
                        }
                        if (prazdnaPozice == false)
                        {
                            break;
                        }
                    }
                }
            }

            //Kontrola pozice dole na kraji a nahore na kraji
            if ((pomomocnaPozice.Y == 0 && pomomocnaPozice.X > 0) && (pomomocnaPozice.X + velLode) <= (sirka - 1) ||
                (pomomocnaPozice.X > 0 && pomomocnaPozice.Y == (vyska - 1)) && (pomomocnaPozice.X + velLode) <= (sirka - 1))
            {
                if (pomomocnaPozice.Y == 0)
                {
                    pomX = pomomocnaPozice.X - 1;

                    for (int y = 0; y < 2; y++)
                    {
                        for (int x = 0; x < velLode + 2; x++)
                        {
                            if (herniPrvek[pomX + x, pomomocnaPozice.Y + y] == HerniPrvek.Voda)
                            {
                                prazdnaPozice = true;
                            }
                            else
                            {
                                prazdnaPozice = false;
                                break;
                            }
                        }
                        if (prazdnaPozice == false)
                        {
                            break;
                        }
                    }
                }

                else if (pomomocnaPozice.Y == (vyska - 1))
                {
                    pomX = pomomocnaPozice.X - 1;
                    pomY = pomomocnaPozice.Y - 1;
                    for (int y = 0; y < 2; y++)
                    {
                        for (int x = 0; x < velLode + 2; x++)
                        {
                            if (herniPrvek[pomX + x, pomY + y] == HerniPrvek.Voda)
                            {
                                prazdnaPozice = true;
                            }
                            else
                            {
                                prazdnaPozice = false;
                                break;
                            }
                        }
                        if (prazdnaPozice == false)
                        {
                            break;
                        }
                    }
                }
            }
            //Kontroluje pozice v prostoru v poli
            if (pomomocnaPozice.X != 0 && pomomocnaPozice.Y != 0 && (pomomocnaPozice.X + velLode) <= (sirka - 1) &&
                pomomocnaPozice.Y != (vyska - 1))
            {
                pomX = pomomocnaPozice.X - 1;
                pomY = pomomocnaPozice.Y - 1;
                for (int y = 0; y < 3; y++)
                {
                    for (int x = 0; x < velLode + 2; x++)
                    {
                        if (herniPrvek[pomX + x, pomY + y] == HerniPrvek.Voda)
                        {
                            prazdnaPozice = true;
                        }
                        else
                        {
                            prazdnaPozice = false;
                            break;
                        }
                    }
                    if (prazdnaPozice == false)
                    {
                        break;
                    }
                }
            }

            //Kontrola pozice na kraji
            if (pomomocnaPozice.X == 0 && pomomocnaPozice.Y != 0 && pomomocnaPozice.Y < (vyska - 1))
            {
                pomY = pomomocnaPozice.Y - 1;
                for (int y = 0; y < 3; y++)
                {
                    for (int x = 0; x < velLode + 1; x++)
                    {
                        if (herniPrvek[pomomocnaPozice.X + x, pomY + y] == HerniPrvek.Voda)
                        {
                            prazdnaPozice = true;
                        }
                        else
                        {
                            prazdnaPozice = false;
                            break;
                        }
                    }
                    if (prazdnaPozice == false)
                    {
                        break;
                    }
                }
            }

            return(prazdnaPozice); //vraci true jestli je pozice volna A false kdyz je pozice obsazena
        }