IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Dunkleosteus - Hra.cs

C# .NET

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Audio;
using System;

/*
 * 
 * Autor: Jakub Raida, 2021
 * Programováno pro ITNetwork.cz
 * Prosím o nešíření kamkoliv jinam
 * 
 */

namespace Dunkleosteus
{
    public class Hra : Game
    {
        private GraphicsDeviceManager _graphics;
        private SpriteBatch _spriteBatch;

        // Vstup
        public KeyboardState Ovladani_Klavesnice { get; private set; }
        public MouseState Ovladani_Mysi { get; private set; }
        public enum MysM { Zakazana, Vertikalne, Povolena };
        public MysM ModMysi { get; private set; }
        public int PocitadloKurzoru { get; private set; }
        public int ProtiPretizeniKlavesy { get; private set; }

        // Rozměry okna
        public int SirkaOkna { get; private set; }
        public int VyskaOkna { get; private set; }

        // Zvuky
        public Song Hudba_Uvod { get; private set; }
        public Song Hudba_Dark { get; private set; }
        public SoundEffect Zvuk_Nedobry { get; private set; }
        public SoundEffect Zvuk_Hryz { get; private set; }
        public SoundEffect Zvuk_Event { get; private set; }

        // Sprity
        public Texture2D Akter_Uvod { get; private set; }
        public Texture2D Akter_Fosilie { get; private set; }
        public Texture2D[] Akter_Pozadi { get; private set; }
        public Texture2D Akter_Dunkle { get; private set; }
        public Texture2D Akter_Dunkle_Immortal { get; private set; }
        public Texture2D Akter_Rasa { get; private set; }
        public Texture2D Akter_Srdicko { get; private set; }
        public Texture2D Akter_Rybka { get; private set; }
        public Texture2D Akter_Rybka2 { get; private set; }
        public Texture2D Akter_Kraken { get; private set; }
        public Texture2D Akter_Mega { get; private set; }
        public Texture2D Akter_Mega2 { get; private set; }
        public Texture2D Akter_Turbo { get; private set; }
        public Texture2D Akter_Kraken2 { get; private set; }
        public Texture2D Akter_Sub { get; private set; }
        public Texture2D Akter_Immortal { get; private set; }
        public Texture2D Akter_Ichtyostega { get; private set; }

        // Fonty
        public SpriteFont Pismo_Normal { get; private set; }
        public SpriteFont Pismo_More { get; private set; }
        public SpriteFont Pismo_Hlaseni { get; private set; }
        public SpriteFont Pismo_Listina { get; private set; }

        // Náhoda
        public Random Nahoda { get; private set; }

        // Konfigurační proměnné
        public int Konfig_DunkleZacatekX { get; private set; }
        public int Konfig_DunkleZacatekY { get; private set; }
        public int Konfig_PocetNavstevniku { get; private set; }
        public int Konfig_UplneMaxZdravi { get; private set; }
        public int Konfig_MaximalniDelkaNicknamu { get; private set; }

        // Bindy
        public Keys Klavesa_Nahoru { get; private set; }
        public Keys Klavesa_Dolu { get; private set; }
        public Keys Klavesa_Vlevo { get; private set; }
        public Keys Klavesa_Vpravo { get; private set; }
        public int KrokRebindu { get; private set; }
        public Keys[] Klavesa_Z { get; private set; }

        // Stavy hry
        public enum StavH { HraJede, UvodniObrazovka, Smrt, ListinaVysledku, RebindKlaves };
        public StavH StavHry { get; private set; }
        public enum ZvukyS { Vse, JenEfekty, JenHudba, Nic };
        public ZvukyS StavZvuku { get; private set; }

        // Pozice a stavy
        public int[] DunkleATeckyPoziceX { get; private set; }
        public int[] DunkleATeckyPoziceY { get; private set; }
        public int[] NavstevnikPoziceX { get; private set; }
        public int[] NavstevnikPoziceY { get; private set; }
        public int[] NavstevnikOdpocet { get; private set; }
        public enum SmerN { Nahoru, Vlevo, Dolu, Vpravo };
        public SmerN[] NavstevnikSmer { get; private set; }
        public bool[] NavstevnikExistuje { get; private set; }
        public enum TypN { Rasa, Kraken, Rybka, Rybka2, Mega, Mega2, Turbo, Kraken2, Sub, Immortal, Ichtyostega };
        public TypN[] NavstevnikTyp { get; private set; }
        public TypN Udalost { get; private set; }
        public int PocitadloUdalosti { get; private set; }

        // Další herní proměnné
        public Color Barva { get; private set; }
        public double DesetinnaRychlost { get; private set; }
        public int Rychlost { get; private set; }
        public bool PohybTecky { get; private set; }
        public int Zdravi { get; private set; }
        public int ZmenaZdravi { get; private set; }
        public int Pocitadlo { get; private set; }
        public double DesetinneSkore { get; private set; }
        public int Skore { get; private set; }
        public string Vypis { get; private set; }
        public int RozmerA { get; private set; }
        public int RozmerB { get; private set; }
        public int RozmerC { get; private set; }
        public int Boost { get; private set; }
        public int Nezranitelnost { get; private set; }
        public int Uroven { get; private set; }
        public int MaxZdravi { get; private set; }
        public int HustotaNavstev { get; private set; }
        public int CisloPozadi { get; private set; }
        public int LosTypu { get; private set; }
        public int Zabitych { get; private set; }
        public double UplavanyMetry { get; private set; }
        public int UplavanyKilometry { get; private set; }
        public bool ProbihaZapisJmena { get; private set; }
        public string ZapisovaneJmeno { get; private set; }
        public string ZapisovanePismeno { get; private set; }

        // Třídy
        public UlozeniVysledku UlozVysledek { get; private set; }
        public Listina Vysledky { get; private set; }

        public Hra()
        {
            _graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            IsMouseVisible = false;

            // Rozměry okna
            SirkaOkna = 1600;
            VyskaOkna = 900;

            // Náhoda
            Nahoda = new Random();

            // Třídy
            UlozVysledek = new UlozeniVysledku();
            Vysledky = new Listina();
        }

        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            NastavBindyNaDefault();
            NastavPromenneNaDefault();

            // Velikost okna
            _graphics.PreferredBackBufferWidth = SirkaOkna;
            _graphics.PreferredBackBufferHeight = VyskaOkna;
            _graphics.IsFullScreen = true;
            _graphics.ApplyChanges();

            base.Initialize();
        }

        protected override void LoadContent()
        {
            _spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here

            // Pole pro pozadí
            Akter_Pozadi = new Texture2D[27];

            // Sprity - pozadí
            Pocitadlo = -1;
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_2");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_3");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_4");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_5");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_6");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_7");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_8");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_9");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_10");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_11");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_12");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_13");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_14");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_15");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_16");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_17");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_18");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_19");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_20");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_21");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_22");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_23");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_24");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_25");
            Pocitadlo++; Akter_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Sprity\pozadi_ocean_26");

            // Ostatní sprity
            Akter_Uvod = Content.Load<Texture2D>(@"Sprity\uvodni");
            Akter_Fosilie = Content.Load<Texture2D>(@"Sprity\fosilie");
            Akter_Dunkle = Content.Load<Texture2D>(@"Sprity\akter_dunkleosteus");
            Akter_Dunkle_Immortal = Content.Load<Texture2D>(@"Sprity\akter_dunkleosteus_iddqd");
            Akter_Srdicko = Content.Load<Texture2D>(@"Sprity\pocitadle_zivot");
            Akter_Rasa = Content.Load<Texture2D>(@"Sprity\akter_rasa");
            Akter_Rybka = Content.Load<Texture2D>(@"Sprity\akter_rybka");
            Akter_Rybka2 = Content.Load<Texture2D>(@"Sprity\akter_rybka_lepsi");
            Akter_Kraken = Content.Load<Texture2D>(@"Sprity\akter_kraken");
            Akter_Kraken2 = Content.Load<Texture2D>(@"Sprity\akter_nautiloid");
            Akter_Mega = Content.Load<Texture2D>(@"Sprity\akter_megalodon");
            Akter_Mega2 = Content.Load<Texture2D>(@"Sprity\akter_megalodon_vetsi");
            Akter_Turbo = Content.Load<Texture2D>(@"Sprity\akter_ammonite");
            Akter_Sub = Content.Load<Texture2D>(@"Sprity\akter_sub");
            Akter_Immortal = Content.Load<Texture2D>(@"Sprity\akter_iddqd");
            Akter_Ichtyostega = Content.Load<Texture2D>(@"Sprity\akter_ichtyostega");

            // Fonty
            Pismo_Normal = Content.Load<SpriteFont>(@"Fonty\font_normalni");
            Pismo_More = Content.Load<SpriteFont>(@"Fonty\font_more");
            Pismo_Hlaseni = Content.Load<SpriteFont>(@"Fonty\font_hlaseni");
            Pismo_Listina = Content.Load<SpriteFont>(@"Fonty\font_listina");

            // Hudba
            Hudba_Uvod = Content.Load<Song>(@"Zvuky\hudba_uvod");
            Hudba_Dark = Content.Load<Song>(@"Zvuky\hudba_dark");
            Zvuk_Nedobry = Content.Load<SoundEffect>(@"Zvuky\zvuk_nedobry");
            Zvuk_Hryz = Content.Load<SoundEffect>(@"Zvuky\zvuk_hryz");
            Zvuk_Event = Content.Load<SoundEffect>(@"Zvuky\zvuk_event");

            // Opakování hudby
            MediaPlayer.IsRepeating = true;
            PrepniHudbu(Hudba_Uvod);
        }

        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();

            // TODO: Add your update logic here
            SamotnaHra(gameTime);

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here

            _spriteBatch.Begin();

            Kresli();

            _spriteBatch.End();

            base.Draw(gameTime);
        }

        /*
         * 
         * INICIALIZAČNÍ METODY
         * 
         */
        public void NastavBindyNaDefault()
        {
            Klavesa_Nahoru = Keys.Up;
            Klavesa_Dolu = Keys.Down;
            Klavesa_Vpravo = Keys.Right;
            Klavesa_Vlevo = Keys.Left;
        }

        public void NastavPromenneNaDefault()
        {
            // Stav hry
            StavHry = StavH.UvodniObrazovka;
            KrokRebindu = 0;
            Udalost = TypN.Rasa;
            PocitadloUdalosti = 0;
            ModMysi = MysM.Zakazana;
            PocitadloKurzoru = 0;
            ProtiPretizeniKlavesy = 0;
            ProbihaZapisJmena = false;
            StavZvuku = ZvukyS.Vse;

            // Konfigurace hry
            Konfig_DunkleZacatekX = 30;
            Konfig_DunkleZacatekY = 360;
            Konfig_PocetNavstevniku = 15;
            Konfig_UplneMaxZdravi = 25;
            Konfig_MaximalniDelkaNicknamu = 20;

            // Různé proměnné
            ZapisovaneJmeno = String.Empty;
            ZapisovanePismeno = String.Empty;
            DesetinnaRychlost = Rychlost = 8;
            Zdravi = 12;
            MaxZdravi = 12;
            ZmenaZdravi = 0;
            Pocitadlo = 0;
            DesetinneSkore = Skore = 0;
            RozmerA = RozmerB = RozmerC = 0;
            Uroven = 1;
            Boost = 0;
            Nezranitelnost = 0;
            HustotaNavstev = 20;
            LosTypu = 1;
            Zabitych = 0;
            UplavanyKilometry = 0;
            UplavanyMetry = 0;
            PohybTecky = false;
            Vypis = String.Empty;
            Barva = Color.Teal;

            // Pole pro různá pozadí
            CisloPozadi = 0;

            // Pole pro pozice a stavy dunkleostea a teček
            DunkleATeckyPoziceX = new int[10];
            DunkleATeckyPoziceY = new int[10];

            // Pole pro pozice a stavy "návštěvníků"
            NavstevnikPoziceX = new int[Konfig_PocetNavstevniku];
            NavstevnikPoziceY = new int[Konfig_PocetNavstevniku];
            NavstevnikOdpocet = new int[Konfig_PocetNavstevniku];
            NavstevnikSmer = new SmerN[Konfig_PocetNavstevniku];
            NavstevnikExistuje = new bool[Konfig_PocetNavstevniku];
            NavstevnikTyp = new TypN[Konfig_PocetNavstevniku];

            // POZICE AKTÉRŮ (VÝCHOZÍ)
            // Dunkleosteus ([0])
            DunkleATeckyPoziceX[0] = Konfig_DunkleZacatekX;
            DunkleATeckyPoziceY[0] = Konfig_DunkleZacatekY;

            // Mořské tečky ([1] až [9])
            for (int i = 1; i < 10; i++)
            {
                DunkleATeckyPoziceX[i] = SirkaOkna;
                DunkleATeckyPoziceY[i] = Nahoda.Next(25, VyskaOkna - 25);
            }

            // "Návštěvníci" ([0] až [?])
            for (int i = 0; i < Konfig_PocetNavstevniku; i++)
            {
                NavstevnikPoziceX[i] = SirkaOkna;
                NavstevnikPoziceY[i] = Nahoda.Next(25, VyskaOkna - 200);
                NavstevnikTyp[i] = TypN.Rasa;
                NavstevnikSmer[i] = SmerN.Vlevo;
                EliminovatNavstevnika(i);
            }
        }

        /*
         * 
         * VYKRESLOVACÍ METODY
         * 
         */
        public void Kresli()
        {
            switch (StavHry)
            {
                default:
                case StavH.UvodniObrazovka:
                    VykresliUvodniObrazovku();
                    break;

                case StavH.RebindKlaves:
                    VykresliRebind();
                    break;

                case StavH.HraJede:
                    VykresliPozadi();
                    VykresliNavstevniky();
                    VykresliDunkleostea();
                    VykresliZivoty();
                    VykresliUdaje();
                    VykresliMorskeTecky();
                    break;

                case StavH.Smrt:
                    VykresliZaverecneHodnoceni();
                    break;

                case StavH.ListinaVysledku:
                    VykresliListinu();
                    VykresliMorskeTecky();
                    break;
            }
        }

        public void PrepniHudbu(Song hudba)
        {
            if (MediaPlayer.Queue.ActiveSong != hudba) { MediaPlayer.Play(hudba); }
        }

        public void PustZvuk(SoundEffect efekt)
        {
            if (StavZvuku != ZvukyS.JenHudba && StavZvuku != ZvukyS.Nic)
            {
                efekt.Play();
            }
        }

        public void VykresliListinu()
        {
            // Pozadí
            _spriteBatch.Draw(Akter_Pozadi[0], new Vector2(0, 0), Color.White);

            // Nadpis a upozornění
            Vypis = String.Format("LIST OF 25 BEST FOSSILS");
            _spriteBatch.DrawString(Pismo_Hlaseni, Vypis, new Vector2(200, 35), Color.Goldenrod);
            Vypis = String.Format("(Click R for return to game.)");
            _spriteBatch.DrawString(Pismo_Listina, Vypis, new Vector2(200, 90), Color.DimGray);

            // Listina
            _spriteBatch.DrawString(Pismo_Listina, Vysledky.UkazListinu(), new Vector2(200, 125), Color.LightGoldenrodYellow);
        }

        public void VykresliRebind()
        {
            _spriteBatch.Draw(Akter_Pozadi[0], new Vector2(0, 0), Color.White);

            VykresliTextyProRebind(KrokRebindu + 1);
        }

        public void VykresliZaverecneHodnoceni()
        {
            _spriteBatch.Draw(Akter_Fosilie, new Vector2(0, 0), Color.White);

            Vypis = String.Format("You have bravely fallen.");
            _spriteBatch.DrawString(Pismo_Hlaseni, Vypis, new Vector2(50, 80), Color.LightGoldenrodYellow);

            Vypis = String.Format("Your deeds will be remembered by paleontologists in future.");
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(50, 140), Color.Goldenrod);

            Vypis = String.Format("Reached level: {0}\nGained score: {1}\nKilled lifeforms: {2}\nSwam distance: {3} km {4} m", Uroven, Skore, Zabitych, UplavanyKilometry, (int)Math.Round(UplavanyMetry));
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(50, 190), Color.GreenYellow);

            if (Skore > 999)
            {
                ProbihaZapisJmena = true;
                RozhraniProZapisJmena();
            }
            else
            {
                Vypis = String.Format("You must have score of at least 1000 points to be saved.\nPress R for restart of the game or ESC to close it.");
                _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(50, 450), Color.Salmon);
            }
        }

        public void RozhraniProZapisJmena()
        {
            Vypis = String.Format("Type your (nick)name, please, and submit it with ENTER:");
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(50, 400), Color.OrangeRed);
            _spriteBatch.DrawString(Pismo_Hlaseni, ZapisovaneJmeno, new Vector2(50, 450), Color.IndianRed);
        }

        public void VykresliTextyProRebind(int zvyrazneny)
        {
            Vypis = String.Format("1) Press your key for MOVING UP, please.");
            if (zvyrazneny != 1) { Barva = Color.DarkSlateGray; } else { Barva = Color.YellowGreen; }
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(100, 200), Barva);

            Vypis = String.Format("2) Press your key for MOVING DOWN, please.");
            if (zvyrazneny != 2) { Barva = Color.DarkSlateGray; } else { Barva = Color.YellowGreen; }
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(100, 230), Barva);

            Vypis = String.Format("3) Press your key for MOVING LEFT / SLOWING, please.");
            if (zvyrazneny != 3) { Barva = Color.DarkSlateGray; } else { Barva = Color.YellowGreen; }
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(100, 260), Barva);

            Vypis = String.Format("4) Press your key for MOVING RIGHT / ACCELERATION, please.");
            if (zvyrazneny != 4) { Barva = Color.DarkSlateGray; } else { Barva = Color.YellowGreen; }
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(100, 290), Barva);

            Vypis = String.Format("5) Now press SPACEBAR for game to begin.");
            if (zvyrazneny != 5) { Barva = Color.DarkSlateGray; } else { Barva = Color.Gold; }
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(100, 320), Barva);
        }

        public void VykresliUvodniObrazovku()
        {
            _spriteBatch.Draw(Akter_Uvod, new Vector2(0, 0), Color.White);
        }

        public void VykresliZivoty()
        {
            for (int i = 0; i < Zdravi; i++)
            {
                _spriteBatch.Draw(Akter_Srdicko, new Vector2(i * 50 + 10, 840), Color.White * 0.6f);
            }
        }

        public void VykresliUdaje()
        {
            Vypis = String.Format("Velocity: {0} m/s | Depth: {1} m | Swam: {2} km {3} m", Rychlost, 10 + (int)Math.Round((double)DunkleATeckyPoziceY[0] / 20), UplavanyKilometry, (int)Math.Round(UplavanyMetry));
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(15, 800), Color.ForestGreen * 0.6f);

            Vypis = String.Format("Score: {0} | Kills: {1} | Level: {2}", Skore, Zabitych, Uroven);
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(15, 770), Color.LawnGreen * 0.6f);

            if (Udalost != TypN.Rasa)
            {
                OhlasProbihajiciUdalost();
            }

            Vypis = VypisModMysi();
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(700, 800), Color.SlateGray * 0.6f);

            Vypis = VypisModZvuku();
            _spriteBatch.DrawString(Pismo_Normal, Vypis, new Vector2(950, 800), Color.SlateGray * 0.6f);
        }

        public string VypisModZvuku()
        {
            switch (StavZvuku)
            {
                default:
                    return String.Format("Sounds: UNKNOWN");

                case ZvukyS.Vse:
                    return String.Format("Sounds: ALL");

                case ZvukyS.JenEfekty:
                    return String.Format("Sounds: EFFECTS");

                case ZvukyS.JenHudba:
                    return String.Format("Sounds: MUSIC");

                case ZvukyS.Nic:
                    return String.Format("Sounds: OFF");
            }
        }

        public string VypisModMysi()
        {
            switch (ModMysi)
            {
                default:
                    return String.Format("Mouse: UNKNOWN");

                case MysM.Zakazana:
                    return String.Format("Mouse: OFF");

                case MysM.Vertikalne:
                    return String.Format("Mouse: VERTICAL");

                case MysM.Povolena:
                    return String.Format("Mouse: ON");
            }
        }

        public void OhlasProbihajiciUdalost()
        {
            switch (Udalost)
            {
                default:
                    Vypis = String.Format("Unknown Event!");
                    break;

                case TypN.Rybka:
                    Vypis = String.Format("Fish School Event!");
                    break;

                case TypN.Rybka2:
                    Vypis = String.Format("Merry Fishing Event!");
                    break;

                case TypN.Kraken:
                    Vypis = String.Format("Octo-attack Event!");
                    break;

                case TypN.Kraken2:
                    Vypis = String.Format("Nautiloid Fleet Event!");
                    break;

                case TypN.Mega:
                    Vypis = String.Format("Sharknado Event!");
                    break;

                case TypN.Mega2:
                    Vypis = String.Format("Megalodon Hell Event!");
                    break;

                case TypN.Ichtyostega:
                    Vypis = String.Format("Swim or Walk? Event!");
                    break;
            }

            _spriteBatch.DrawString(Pismo_Hlaseni, Vypis, new Vector2(400, 50), Color.LightGoldenrodYellow * 0.9f);
        }

        public void VykresliNavstevniky()
        {
            for (int i = 0; i < Konfig_PocetNavstevniku; i++)
            {
                // Vykreslíme existující návštěvníky
                if (NavstevnikExistuje[i])
                {
                    switch (NavstevnikTyp[i])
                    {
                        default:
                        case TypN.Rasa:
                            _spriteBatch.Draw(Akter_Rasa, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White * 0.1f);
                            break;

                        case TypN.Rybka:
                            _spriteBatch.Draw(Akter_Rybka, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Rybka2:
                            _spriteBatch.Draw(Akter_Rybka2, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Kraken:
                            _spriteBatch.Draw(Akter_Kraken, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Kraken2:
                            _spriteBatch.Draw(Akter_Kraken2, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Mega:
                            _spriteBatch.Draw(Akter_Mega, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Mega2:
                            _spriteBatch.Draw(Akter_Mega2, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Turbo:
                            _spriteBatch.Draw(Akter_Turbo, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Sub:
                            _spriteBatch.Draw(Akter_Sub, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Immortal:
                            _spriteBatch.Draw(Akter_Immortal, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;

                        case TypN.Ichtyostega:
                            _spriteBatch.Draw(Akter_Ichtyostega, new Vector2(NavstevnikPoziceX[i], NavstevnikPoziceY[i]), Color.White);
                            break;
                    }
                }
            }
        }

        public void VykresliDunkleostea()
        {
            if (Nezranitelnost > 0)
            {
                _spriteBatch.Draw(Akter_Dunkle_Immortal, new Vector2(DunkleATeckyPoziceX[0], DunkleATeckyPoziceY[0]), Color.White);
            }
            else
            {
                _spriteBatch.Draw(Akter_Dunkle, new Vector2(DunkleATeckyPoziceX[0], DunkleATeckyPoziceY[0]), Color.White);
            }
        }

        public void VykresliPozadi()
        {
            CisloPozadi = Uroven - 1;

            if (CisloPozadi > 25) { CisloPozadi = 25; }
            if (CisloPozadi < 0) { CisloPozadi = 0; }

            _spriteBatch.Draw(Akter_Pozadi[CisloPozadi], new Vector2(0, 0), Color.White);
        }

        public void VykresliMorskeTecky()
        {
            for (int i = 1; i < 10; i++)
            {
                _spriteBatch.DrawString(Pismo_More, ".", new Vector2(DunkleATeckyPoziceX[i], DunkleATeckyPoziceY[i]), BarvaMorskeTecky(i));
            }
        }

        public Color BarvaMorskeTecky(int i)
        {
            switch (i)
            {
                case 1:
                default:
                    return Color.Cyan;

                case 2:
                    return Color.Aqua;

                case 3:
                    return Color.Blue;

                case 4:
                    return Color.AliceBlue;

                case 5:
                    return Color.Teal;

                case 6:
                    return Color.Green;

                case 7:
                    return Color.DeepSkyBlue;

                case 8:
                    return Color.SeaGreen;

                case 9:
                    return Color.LightSeaGreen;
            }
        }

        /*
         * 
         * HERNÍ METODY
         * 
         */
        public void SamotnaHra(GameTime casHry)
        {
            switch (StavHry)
            {
                default:
                case StavH.UvodniObrazovka:
                    CekameNaMezernik();
                    break;

                case StavH.RebindKlaves:
                    RebindujKlavesy();
                    break;

                case StavH.HraJede:
                    HlavniHra();
                    break;

                case StavH.Smrt:
                    ZapisovaniJmena();
                    KontrolaVynucenehoRestartu();
                    break;

                case StavH.ListinaVysledku:
                    KontrolaVynucenehoRestartu();
                    PosunMorskychTecekVlevo();
                    break;
            }
        }

        public void ZapisovaniJmena()
        {
            if (ProbihaZapisJmena)
            {
                if (ProtiPretizeniKlavesy < 1)
                {
                    Ovladani_Klavesnice = Keyboard.GetState();

                    if (Ovladani_Klavesnice.GetPressedKeys().Length != 0)
                    {
                        Keys[] Klavesa_Z = Ovladani_Klavesnice.GetPressedKeys();

                        foreach (Keys klavesa in Klavesa_Z)
                        {
                            ProtiPretizeniKlavesy = 6;

                            switch (klavesa)
                            {
                                default:
                                    if (ZapisovaneJmeno.Length <= Konfig_MaximalniDelkaNicknamu)
                                    {
                                        ZapisovanePismeno = klavesa.ToString();

                                        if (ZapisovanePismeno.Length == 2) { ZapisovanePismeno = ZapisovanePismeno.Replace("D", ""); }

                                        ZapisovanePismeno = ZapisovanePismeno.Replace("NumPad", "");

                                        if (ZapisovanePismeno.Length == 1)
                                        {
                                            ZapisovaneJmeno += ZapisovanePismeno;
                                        }
                                    }
                                    break;

                                case Keys.Back:
                                    if (ZapisovaneJmeno.Length > 0) { ZapisovaneJmeno = ZapisovaneJmeno.Remove(ZapisovaneJmeno.Length - 1, 1); }
                                    break;

                                case Keys.Enter:
                                    if (ZapisovaneJmeno.Length > 0) { UlozJmeno(); }
                                    break;

                                case Keys.Space:
                                    ZapisovaneJmeno = ZapisovaneJmeno.Insert(ZapisovaneJmeno.Length, " ");
                                    break;
                            }
                        }
                    }
                }
                else
                {
                    ProtiPretizeniKlavesy--;
                }
            }
        }

        public void UlozJmeno()
        {
            UlozVysledek.Pridej(ZapisovaneJmeno, Skore, UplavanyKilometry, Uroven);
            ProbihaZapisJmena = false;
            StavHry = StavH.ListinaVysledku;
        }

        public void HlavniHra()
        {
            // Kontrola různých kláves
            KontrolaVynucenehoRestartu();

            // Události
            ZmenaUdalosti();

            // Módy myši a zvuku
            PrepinaniModuMysi();
            PrepinaniModuZvuku();

            // Pohyb dunkleostea myší
            if (ModMysi == MysM.Povolena || ModMysi == MysM.Vertikalne)
            {
                PohybDunkleosteaVertikalne_Mysi();
                if (ModMysi == MysM.Povolena) { ZmenaRychlostiHryAPohybDunkleosteaHorizontalne_Mysi(); }
                ResetujObcasKurzor();
            }

            // Pohyb dunkleostea klávesnicí
            if (ModMysi == MysM.Zakazana || ModMysi == MysM.Vertikalne)
            {
                if (ModMysi != MysM.Vertikalne) { PohybDunkleosteaVertikalne_Klavesnici(); }
                ZmenaRychlostiHryAPohybDunkleosteaHorizontalne_Klavesnici();
            }

            // Boost a nezranitelnost
            PrekontrolujBoostANezranitelnost();

            // Návštěvníci
            GenerujNoveNavstevniky();
            PohybNavstevniku();

            // Změny zdraví a úrovně
            PrepoctiZdravi();
            PrepoctiUrovne();
            PrepoctiVzdalenost();

            // Pohyb mořských teček
            PosunMorskychTecekVlevo();
        }

        public void PrepoctiVzdalenost()
        {
            UplavanyMetry += (DesetinnaRychlost / 60);
            if (UplavanyMetry > 1000) { UplavanyMetry -= 1000; UplavanyKilometry++; PrictiSkore(75); }
        }

        public void PrepinaniModuZvuku()
        {
            if (ProtiPretizeniKlavesy < 1)
            {
                Ovladani_Klavesnice = Keyboard.GetState();

                // Přepnutí módu
                if (Ovladani_Klavesnice.IsKeyDown(Keys.Back))
                {
                    switch (StavZvuku)
                    {
                        default:
                            break;

                        case ZvukyS.Vse:
                            MediaPlayer.Stop();
                            StavZvuku = ZvukyS.Nic;
                            ProtiPretizeniKlavesy = 20;
                            break;

                        case ZvukyS.Nic:
                            MediaPlayer.Stop();
                            StavZvuku = ZvukyS.JenEfekty;
                            ProtiPretizeniKlavesy = 20;
                            break;

                        case ZvukyS.JenEfekty:
                            MediaPlayer.Play(Hudba_Dark);
                            StavZvuku = ZvukyS.JenHudba;
                            ProtiPretizeniKlavesy = 20;
                            break;

                        case ZvukyS.JenHudba:
                            StavZvuku = ZvukyS.Vse;
                            ProtiPretizeniKlavesy = 20;
                            break;
                    }
                }
            }
            else
            {
                ProtiPretizeniKlavesy--;
            }
        }

        public void PrepinaniModuMysi()
        {
            if (ProtiPretizeniKlavesy < 1)
            {
                Ovladani_Klavesnice = Keyboard.GetState();

                // Přepnutí módu
                if (Ovladani_Klavesnice.IsKeyDown(Keys.M))
                {
                    switch (ModMysi)
                    {
                        default:
                            break;

                        case MysM.Zakazana:
                            ModMysi = MysM.Vertikalne;
                            ProtiPretizeniKlavesy = 20;
                            break;

                        case MysM.Vertikalne:
                            ModMysi = MysM.Povolena;
                            ProtiPretizeniKlavesy = 20;
                            break;

                        case MysM.Povolena:
                            ModMysi = MysM.Zakazana;
                            ProtiPretizeniKlavesy = 20;
                            break;
                    }
                }
            }
            else
            {
                ProtiPretizeniKlavesy--;
            }
        }

        public void ResetujObcasKurzor()
        {
            if (PocitadloKurzoru < 1)
            {
                Mouse.SetPosition(DunkleATeckyPoziceX[0], DunkleATeckyPoziceY[0]);
                PocitadloKurzoru = 6;
            }
            else
            {
                PocitadloKurzoru--;
            }
        }

        public void ZmenaUdalosti()
        {
            if (Udalost != TypN.Rasa)
            {
                PocitadloUdalosti--;

                if (PocitadloUdalosti < 1)
                {
                    PocitadloUdalosti = 0;
                    Udalost = TypN.Rasa;
                }
            }
            else
            {
                if (Nahoda.Next(1, 4000) == 7)
                {
                    PocitadloUdalosti = 900;
                    PustZvuk(Zvuk_Event);

                    switch (Nahoda.Next(1, 5))
                    {
                        default:
                        case 1:
                            Udalost = TypN.Kraken;
                            break;

                        case 2:
                            Udalost = TypN.Kraken2;
                            break;

                        case 3:
                            if (Nahoda.Next(1, 20) == 5)
                            {
                                if (Nahoda.Next(1, 4) == 2)
                                {
                                    Udalost = TypN.Ichtyostega;
                                }
                                else
                                {
                                    Udalost = TypN.Rybka2;
                                }
                            }
                            else
                            {
                                Udalost = TypN.Rybka;
                            }
                            break;

                        case 4:
                            if (Nahoda.Next(1, 20) == 5)
                            {
                                Udalost = TypN.Mega2;
                            }
                            else
                            {
                                Udalost = TypN.Mega;
                            }
                            break;
                    }
                }
            }
        }

        public void RebindujKlavesy()
        {
            Ovladani_Klavesnice = Keyboard.GetState();

            if (Ovladani_Klavesnice.GetPressedKeys().Length != 0)
            { 
                Keys[] Klavesa_Z = Ovladani_Klavesnice.GetPressedKeys();

                if (Klavesa_Z[0] != Keys.B
                    && Klavesa_Z[0] != Keys.R
                    && Klavesa_Z[0] != Keys.M
                    && Klavesa_Z[0] != Keys.Back
                    && Klavesa_Z[0] != Keys.Escape)
                {
                    switch (KrokRebindu)
                    {
                        default:
                        case 0:
                            Klavesa_Nahoru = Klavesa_Z[0];
                            KrokRebindu++;
                            break;

                        case 1:
                            if (Klavesa_Z[0] != Klavesa_Nahoru)
                            {
                                Klavesa_Dolu = Klavesa_Z[0];
                                KrokRebindu++;
                            }
                            break;

                        case 2:
                            if (Klavesa_Z[0] != Klavesa_Nahoru
                                && Klavesa_Z[0] != Klavesa_Dolu)
                            {
                                Klavesa_Vlevo = Klavesa_Z[0];
                                KrokRebindu++;
                            }
                            break;

                        case 3:
                            if (Klavesa_Z[0] != Klavesa_Nahoru
                                && Klavesa_Z[0] != Klavesa_Dolu
                                && Klavesa_Z[0] != Klavesa_Vlevo)
                            {
                                Klavesa_Vpravo = Klavesa_Z[0];
                                KrokRebindu++;
                            }
                            break;

                        case 4:
                            if (Klavesa_Z[0] == Keys.Space)
                            {
                                StavHry = StavH.HraJede;
                            }
                            break;
                    }
                }
            }
        }

        public void KontrolaVynucenehoRestartu()
        {
            if (!ProbihaZapisJmena)
            {
                Ovladani_Klavesnice = Keyboard.GetState();

                // Zpět na úvodní obrazovku
                if (Ovladani_Klavesnice.IsKeyDown(Keys.R))
                {
                    NavratNaUvod();
                }
            }
        }

        public void NavratNaUvod()
        {
            NastavPromenneNaDefault();
            StavHry = StavH.UvodniObrazovka;

            if (StavZvuku != ZvukyS.JenEfekty && StavZvuku != ZvukyS.Nic)
            {
                PrepniHudbu(Hudba_Uvod);
            }
        }

        public void CekameNaMezernik()
        {
            Ovladani_Klavesnice = Keyboard.GetState();

            // Spuštění hry
            if (Ovladani_Klavesnice.IsKeyDown(Keys.Space))
            {
                StavHry = StavH.HraJede;

                if (StavZvuku != ZvukyS.JenEfekty && StavZvuku != ZvukyS.Nic)
                {
                    PrepniHudbu(Hudba_Dark);
                }
            }

            // Jiný binding kláves
            if (Ovladani_Klavesnice.IsKeyDown(Keys.B))
            {
                KrokRebindu = 0;
                StavHry = StavH.RebindKlaves;
            }
        }

        public void PrepoctiUrovne()
        {
            Uroven = (int)Math.Round((double)Skore / 250);
            if (Uroven < 1) { Uroven = 1; }

            MaxZdravi = Uroven + 11;
            if (MaxZdravi > Konfig_UplneMaxZdravi) { MaxZdravi = Konfig_UplneMaxZdravi; }

            HustotaNavstev = 21 - (int)Math.Round((double)Uroven / 2);
            if (HustotaNavstev < 14) { HustotaNavstev = 14; }
        }

        public void PrekontrolujBoostANezranitelnost()
        {
            if (Boost > 0)
            {
                Rychlost = (int)Math.Round(DesetinnaRychlost) + 6;
                Boost--;
            }
            else
            {
                Rychlost = (int)Math.Round(DesetinnaRychlost);
            }
        }

        public void GenerujNoveNavstevniky()
        {
            for (int i = 0; i < Konfig_PocetNavstevniku; i++)
            {
                // Ti, kteří neexistují a mají po odpočtu, budou nově vygenerováni
                if (!NavstevnikExistuje[i])
                {
                    if (NavstevnikOdpocet[i] < 1)
                    {
                        // Pozice a existence
                        NavstevnikPoziceX[i] = SirkaOkna;
                        NavstevnikPoziceY[i] = Nahoda.Next(25, VyskaOkna - 200);
                        NavstevnikSmer[i] = SmerN.Vlevo;
                        NavstevnikExistuje[i] = true;

                        if (Udalost != TypN.Rasa)
                        {
                            NavstevnikTyp[i] = Udalost;
                        }
                        else
                        {
                            // Losování typu
                            LosTypu = Nahoda.Next(1, 1000);

                            // Šance na jednotlivé typy
                            if (LosTypu < 15) { NavstevnikTyp[i] = TypN.Rybka2; }
                            else if (LosTypu < 25) { NavstevnikTyp[i] = TypN.Mega2; }
                            else if (LosTypu < 250) { NavstevnikTyp[i] = TypN.Rybka; }
                            else if (LosTypu < 250) { NavstevnikTyp[i] = TypN.Turbo; }
                            else if (LosTypu < 275) { NavstevnikTyp[i] = TypN.Ichtyostega; }
                            else if (LosTypu < 650) { NavstevnikTyp[i] = TypN.Kraken; }
                            else if (LosTypu < 800) { NavstevnikTyp[i] = TypN.Kraken2; }
                            else if (LosTypu < 950) { NavstevnikTyp[i] = TypN.Mega; }
                            else if (LosTypu < 953) { NavstevnikTyp[i] = TypN.Sub; }
                            else if (LosTypu < 958) { NavstevnikTyp[i] = TypN.Immortal; }
                            else { NavstevnikTyp[i] = TypN.Rasa; }

                            // Rostoucí obtížnost s přibývajícími levely
                            if (Uroven > Nahoda.Next(1, 20))
                            {
                                if (Nahoda.Next(1, 3) == 2)
                                {
                                    if (NavstevnikTyp[i] == TypN.Kraken) { NavstevnikTyp[i] = TypN.Mega; }
                                    if (NavstevnikTyp[i] == TypN.Mega) { NavstevnikTyp[i] = TypN.Mega2; }
                                }
                            }
                        }
                    }
                    else
                    {
                        NavstevnikOdpocet[i]--;
                    }
                }
            }
        }

        public void PohybNavstevniku()
        {
            for (int i = 0; i < Konfig_PocetNavstevniku; i++)
            {
                // Ti, kteří existují, se posunou
                if (NavstevnikExistuje[i])
                {
                    // Žraloci zrychlují při vyšším i nižším zdraví dunkleostea
                    if ((Zdravi > 12 || Zdravi < 4) && NavstevnikTyp[i] == TypN.Mega) 
                    { 
                        NavstevnikPoziceX[i] -= Rychlost * 2; 
                    }
                    else
                    {
                        NavstevnikPoziceX[i] -= Rychlost;
                    }

                    // Nahodilé drobné zrychlení
                    if (Uroven > Nahoda.Next(1, 25))
                    {
                        NavstevnikPoziceX[i]--;
                    }

                    // Možná změna směru
                    if (Nahoda.Next(1, 20) == 5)
                    {
                        if (NavstevnikTyp[i] == TypN.Mega && Uroven > Nahoda.Next(1, 20))
                        {
                            if (DunkleATeckyPoziceY[0] < NavstevnikPoziceY[i]) { NavstevnikSmer[i] = SmerN.Nahoru; }
                            else if (DunkleATeckyPoziceY[0] > NavstevnikPoziceY[i]) { NavstevnikSmer[i] = SmerN.Dolu; }
                            else { NavstevnikSmer[i] = SmerN.Vlevo; }
                        }
                        else
                        {
                            switch (Nahoda.Next(1, 6))
                            {
                                default:
                                    NavstevnikSmer[i] = SmerN.Vlevo;
                                    break;

                                case 1:
                                    NavstevnikSmer[i] = SmerN.Nahoru;
                                    break;

                                case 3:
                                    NavstevnikSmer[i] = SmerN.Dolu;
                                    break;
                            }
                        }
                    }

                    // Příp. plutí ve speciálním směru
                    if (NavstevnikSmer[i] == SmerN.Nahoru) { NavstevnikPoziceY[i] -= (Rychlost - 6); }
                    if (NavstevnikSmer[i] == SmerN.Dolu) { NavstevnikPoziceY[i] += (Rychlost - 6); }

                    // Ošetříme vyplutí z hranic nahoře a dole
                    if (NavstevnikPoziceY[i] < 30) { NavstevnikPoziceY[i] = 30; }
                    if (NavstevnikPoziceY[i] > 670) { NavstevnikPoziceY[i] = 670; }

                    // Necháme zmizet do neexistence ty, kteří úplně odpluli
                    if (NavstevnikPoziceX[i] < -600) { EliminovatNavstevnika(i); }

                    // Kontrola kolize s dunkleosteem
                    KontrolaKolize(i);
                }
            }
        }

        public void KontrolaKolize(int ktery)
        {
            // Stanovení rozměrů
            switch (NavstevnikTyp[ktery])
            {
                default:
                    RozmerA = 100;
                    RozmerB = 70;
                    RozmerC = 35;
                    break;

                case TypN.Sub:
                    RozmerA = 160;
                    RozmerB = 450;
                    RozmerC = 220;
                    break;

                case TypN.Mega:
                    RozmerA = 270;
                    RozmerB = 110;
                    RozmerC = 55;
                    break;

                case TypN.Ichtyostega:
                    RozmerA = 200;
                    RozmerB = 81;
                    RozmerC = 40;
                    break;

                case TypN.Mega2:
                    RozmerA = 540;
                    RozmerB = 220;
                    RozmerC = 110;
                    break;
            }

            // Zjištění kolize
            if (((DunkleATeckyPoziceX[0] + 270) > NavstevnikPoziceX[ktery]
                && (DunkleATeckyPoziceX[0] + 270) < (NavstevnikPoziceX[ktery] + RozmerA)
                && (DunkleATeckyPoziceY[0] + 55) > NavstevnikPoziceY[ktery]
                && (DunkleATeckyPoziceY[0] + 55) < (NavstevnikPoziceY[ktery] + RozmerB))
                || (NavstevnikPoziceX[ktery] > DunkleATeckyPoziceX[0]
                && NavstevnikPoziceX[ktery] < (DunkleATeckyPoziceX[0] + 270)
                && (NavstevnikPoziceY[ktery] + RozmerC) > DunkleATeckyPoziceY[0]
                && (NavstevnikPoziceY[ktery] + RozmerC) < (DunkleATeckyPoziceY[0] + 105)))
            {
                VyhodnotitKolizi(ktery);
            }
        }

        public void VyhodnotitKolizi(int sKym)
        {
            switch (NavstevnikTyp[sKym])
            {
                default:
                    break;

                case TypN.Kraken:
                case TypN.Kraken2:
                    Zabitych++;
                    EliminovatNavstevnika(sKym);
                    ZmenaZdravi -= Nahoda.Next(1, 3);
                    PustZvuk(Zvuk_Nedobry);
                    break;

                case TypN.Mega:
                    Zabitych++;
                    EliminovatNavstevnika(sKym);
                    if (Udalost != TypN.Mega)
                    {
                        ZmenaZdravi -= (int)Math.Round((double)MaxZdravi / 4);
                    }
                    else
                    {
                        ZmenaZdravi -= (int)Math.Round((double)MaxZdravi / 6);
                    }
                    PustZvuk(Zvuk_Nedobry);
                    break;

                case TypN.Mega2:
                case TypN.Sub:
                    Zabitych++;
                    EliminovatNavstevnika(sKym);
                    if (Udalost != TypN.Mega2)
                    {
                        ZmenaZdravi -= (int)Math.Round((double)MaxZdravi / 3);
                    }
                    else
                    {
                        ZmenaZdravi -= (int)Math.Round((double)MaxZdravi / 5);
                    }
                    PustZvuk(Zvuk_Nedobry);
                    break;

                case TypN.Rybka:
                    Zabitych++;
                    EliminovatNavstevnika(sKym);
                    ZmenaZdravi++;
                    PrictiSkore(25 + DesetinnaRychlost * 1.5);
                    PustZvuk(Zvuk_Hryz);
                    break;

                case TypN.Rybka2:
                case TypN.Ichtyostega:
                    Zabitych++;
                    EliminovatNavstevnika(sKym);
                    ZmenaZdravi += Nahoda.Next(1, 11);
                    PrictiSkore(85 + DesetinnaRychlost * 1.5);
                    PustZvuk(Zvuk_Hryz);
                    break;

                case TypN.Turbo:
                    Zabitych++;
                    EliminovatNavstevnika(sKym);
                    ZmenaZdravi += 5;
                    Boost += 600;
                    PrictiSkore(15 + DesetinnaRychlost * 1.5);
                    PustZvuk(Zvuk_Hryz);
                    break;

                case TypN.Immortal:
                    EliminovatNavstevnika(sKym);
                    Nezranitelnost += 900;
                    PrictiSkore(75 + DesetinnaRychlost * 1.5);
                    PustZvuk(Zvuk_Hryz);
                    break;
            }
        }

        public void EliminovatNavstevnika(int ktereho)
        {
            NavstevnikExistuje[ktereho] = false;
            NavstevnikOdpocet[ktereho] = Nahoda.Next(30, 600 - Rychlost * 10);
        }

        public void PrepoctiZdravi()
        {
            if (Nezranitelnost > 0)
            {
                Zdravi = MaxZdravi;
                Nezranitelnost--;
                if (Nezranitelnost < 1)
                {
                    ZmenaZdravi = 20;
                }
            }
            else
            {
                Pocitadlo++;

                if (Pocitadlo > 4)
                {
                    Pocitadlo = 0;

                    if (ZmenaZdravi > 0)
                    {
                        ZmenaZdravi--;
                        Zdravi++;
                    }

                    if (ZmenaZdravi < 0)
                    {
                        ZmenaZdravi++;
                        Zdravi--;
                    }

                    if (Zdravi <= 0) { StavHry = StavH.Smrt; }
                    if (Zdravi > MaxZdravi) { Zdravi = MaxZdravi; }
                }
            }
        }

        public void PosunMorskychTecekVlevo()
        {
            for (int i = 1; i < 10; i++)
            {
                PohybTecky = false;

                if (DunkleATeckyPoziceX[i] == SirkaOkna)
                {
                    if (Nahoda.Next(1, 30) == 5)
                    {
                        PohybTecky = true;
                    }
                }
                else
                {
                    PohybTecky = true;
                }

                if (PohybTecky)
                {
                    if (DunkleATeckyPoziceX[i] > 0)
                    {
                        DunkleATeckyPoziceX[i] -= Rychlost * 2;
                    }
                    else
                    {
                        DunkleATeckyPoziceX[i] = SirkaOkna;
                        DunkleATeckyPoziceY[i] = Nahoda.Next(25, VyskaOkna - 25);
                    }
                }
            }
        }

        public void PrictiSkore(double kolik)
        {
            DesetinneSkore += kolik;
            Skore = (int)Math.Round(DesetinneSkore);
        }

        public void PohybDunkleosteaVertikalne_Klavesnici()
        {
            Ovladani_Klavesnice = Keyboard.GetState();

            // Pohyb dunkle. nahoru
            if(Ovladani_Klavesnice.IsKeyDown(Klavesa_Nahoru))
            {
                PosunDunkleostea(SmerN.Nahoru);
            }

            // Pohyb dunkle. dolů
            if (Ovladani_Klavesnice.IsKeyDown(Klavesa_Dolu))
            {
                PosunDunkleostea(SmerN.Dolu);
            }
        }

        public void ZmenaRychlostiHryAPohybDunkleosteaHorizontalne_Klavesnici()
        {
            Ovladani_Klavesnice = Keyboard.GetState();

            // Pohyb dunkle. doprava + zrychlení
            if (Ovladani_Klavesnice.IsKeyDown(Klavesa_Vpravo))
            {
                PosunDunkleostea(SmerN.Vpravo);
            }

            // Pohyb dunkle. doleva + zpomalení
            if (Ovladani_Klavesnice.IsKeyDown(Klavesa_Vlevo))
            {
                PosunDunkleostea(SmerN.Vlevo);
            }
        }

        public void PohybDunkleosteaVertikalne_Mysi()
        {
            Ovladani_Mysi = Mouse.GetState();

            // Pohyb dunkle. nahoru
            if (Ovladani_Mysi.Y < DunkleATeckyPoziceY[0])
            {
                PosunDunkleostea(SmerN.Nahoru);
            }

            // Pohyb dunkle. dolů
            if (Ovladani_Mysi.Y > DunkleATeckyPoziceY[0])
            {
                PosunDunkleostea(SmerN.Dolu);
            }
        }

        public void ZmenaRychlostiHryAPohybDunkleosteaHorizontalne_Mysi()
        {
            Ovladani_Mysi = Mouse.GetState();

            // Pohyb dunkle. doprava + zrychlení
            if (Ovladani_Mysi.X > DunkleATeckyPoziceX[0])
            {
                PosunDunkleostea(SmerN.Vpravo);
            }

            // Pohyb dunkle. doleva + zpomalení
            if (Ovladani_Mysi.X < DunkleATeckyPoziceX[0])
            {
                PosunDunkleostea(SmerN.Vlevo);
            }
        }

        public void PosunDunkleostea(SmerN kterymSmerem)
        {
            switch (kterymSmerem)
            {
                default:
                    break;

                case SmerN.Vlevo:
                    if (DunkleATeckyPoziceX[0] > Konfig_DunkleZacatekX)
                    {
                        ZmenPozici(0, false, -1);
                        ZmenRychlost(-0.1);
                    }
                    break;

                case SmerN.Vpravo:
                    if (DunkleATeckyPoziceX[0] < Konfig_DunkleZacatekX + 120)
                    {
                        ZmenPozici(0, false, 1);
                        ZmenRychlost(0.1);
                    }
                    break;

                case SmerN.Dolu:
                    if (DunkleATeckyPoziceY[0] < 670)
                    {
                        ZmenPozici(0, true, Rychlost);
                    }
                    break;

                case SmerN.Nahoru:
                    if (DunkleATeckyPoziceY[0] > 50)
                    {
                        ZmenPozici(0, true, Rychlost * -1);
                    }
                    break;
            }
        }

        public void ZmenPozici(int koho, bool vertikalne, int jakMoc)
        {
            if (vertikalne)
            {
                DunkleATeckyPoziceY[koho] += jakMoc;
            }
            else
            {
                DunkleATeckyPoziceX[koho] += jakMoc;
            }
        }

        public void ZmenRychlost(double jakMoc)
        {
            DesetinnaRychlost += jakMoc;
            PrekontrolujBoostANezranitelnost();
        }
    }
}

Neformátovaný

Přidáno: 4.8.2021
Expirace: Neuvedeno

Avatar
Autor: Jakub Raida
Aktivity