コード例 #1
0
        private void Update(object sender, EventArgs e)
        {
            Hrac       hrac = gamesetup.hrac; // pro lepší čitelnost kódu
            PictureBox pb;

            #region Ovládání hráče
            if (gamesetup.jeSpusteno)
            {
                if (StavOvladani.Right == true && !JeBlokNapravo(Blok.solidBlokList, hrac.postavicka))
                {
                    hrac.postavicka.Left           += hrac.rychlostPohybu; // hrac.postavicka je PictureBox hráče
                    hrac.postavicka.BackgroundImage = Image.FromFile("PlayerTransparent.png");
                }
                if (StavOvladani.Left == true && !JeBlokNalevo(Blok.solidBlokList, hrac.postavicka))
                {
                    hrac.postavicka.Left           -= hrac.rychlostPohybu;
                    hrac.postavicka.BackgroundImage = Image.FromFile("PlayerTransparentReversed.png");
                }
                if (StavOvladani.Jump == true)
                {
                    // pokud hráč skočil
                    if (JeBlokNahore(Blok.solidBlokList, hrac.postavicka, out pb))
                    {
                        if (hrac.rychlostPadu > 2) // aby se neaktivovalo několikrát zasebou a hráč pak nevypadl z levelu
                        {
                            hrac.rychlostPadu -= 8;
                        }
                    }
                    hrac.postavicka.Top -= hrac.rychlostPadu;
                    if (hrac.rychlostPadu > -10) // aby hráč nevypadl z levelu
                    {
                        hrac.rychlostPadu -= 1;
                    }
                }
                if (StavOvladani.Restart == true)
                {
                    hrac.UberZivot();
                    Level.RestartLevelu(gamesetup.formular, hrac, gamesetup.aktualniIDLevelu);
                }

                if (StojiNaZemi(Blok.solidBlokList, hrac.postavicka, out pb))
                {
                    if (Blok.zrychlovaciBlokList.Contains(pb))
                    {
                        hrac.rychlostPohybu = 10;
                    }
                    else if (Blok.zpomalovaciBlokList.Contains(pb))
                    {
                        hrac.rychlostPohybu = 2;
                    }
                    else if (Blok.propadavaciBlokList.Contains(pb))
                    {
                        if (pb.Top < this.Height - 120)
                        {
                            pb.Top += 1;
                        }
                    }
                    else
                    {
                        hrac.rychlostPohybu = 5;
                    }

                    hrac.postavicka.Top = pb.Top - hrac.postavicka.Height; // drží hráče na zemi
                    StavOvladani.Jump   = false;
                }
                else
                {
                    if (hrac.postavicka.Bottom >= 600) // padá mimo hrací plochu
                    {
                        hrac.postavicka.Top = 560;
                    }
                    else
                    {
                        hrac.postavicka.Top += hrac.rychlostPohybu; // padá
                    }
                }
                #endregion ;


                #region Logika nepřátel
                foreach (Nepritel n in Nepritel.listNepratel)
                {
                    if (n.typ == Nepritel.Typ.ghost || n.typ == Nepritel.Typ.skeleton)
                    {
                        if (n.smer) // směr == true -> pohyb doleva; jinak pohyb doprava
                        {
                            if (n.typ == Nepritel.Typ.ghost)
                            {
                                n.postavicka.Image = Image.FromFile("Enemy1Transparent.png");
                            }
                            else if (n.typ == Nepritel.Typ.skeleton)
                            {
                                n.postavicka.Image = Image.FromFile("Enemy2-40x80.png");
                            }
                        }
                        else
                        {
                            if (n.typ == Nepritel.Typ.ghost)
                            {
                                n.postavicka.Image = Image.FromFile("Enemy1TransparentReversed.png");
                            }
                            else if (n.typ == Nepritel.Typ.skeleton)
                            {
                                n.postavicka.Image = Image.FromFile("Enemy2-40x80Reversed.png");
                            }
                        }

                        bool vlevo;
                        if (StojiNaZemi(Blok.solidBlokList, n.postavicka, out pb))
                        {
                            n.postavicka.Top = pb.Top - n.postavicka.Height; // drží nepřítele na zemi
                            Nepritel.Pohyb(n);
                        }
                        else if (!JeHracVeStejneVysce(hrac.postavicka, n.postavicka, out vlevo))
                        {
                            n.ProhodSmer();
                            // posune nepřitele od kraje, aby se nezasekl
                            if (n.smer)
                            {
                                n.postavicka.Left += n.rychlostPohybu;
                            }
                            else
                            {
                                n.postavicka.Left -= n.rychlostPohybu;
                            }
                        }
                        // jinak se neprovádí nic, protože nepřítel čeká na kraji na hráče

                        if (JeBlokNalevo(Blok.solidBlokList, n.postavicka))
                        {
                            Nepritel.PohybSOtočením(n);
                        }
                        if (JeBlokNapravo(Blok.solidBlokList, n.postavicka))
                        {
                            Nepritel.PohybSOtočením(n);
                        }
                        bool vlevo2;
                        if (JeHracVeStejneVysce(hrac.postavicka, n.postavicka, out vlevo2) && n.typ == Nepritel.Typ.skeleton)
                        {
                            if (n.smer == vlevo2)
                            {
                                n.ProhodSmer(); // otočí se za hráčem
                            }
                        }
                    }
                    else if (n.typ == Nepritel.Typ.spider)
                    {
                        if (n.smer)
                        {
                            n.postavicka.Top -= n.rychlostPohybu;
                        }
                        else
                        {
                            n.postavicka.Top += n.rychlostPohybu;
                        }
                        if (JeBlokNahore(Blok.solidBlokList, n.postavicka, out pb))
                        {
                            if (n.random)
                            {
                                Random r = new Random();
                                n.rychlostPohybu = r.Next(3, 21);
                                n.ProhodSmer();
                            }
                            else
                            {
                                n.ProhodSmer();
                            }
                        }
                        if (StojiNaZemi(Blok.solidBlokList, n.postavicka, out pb))
                        {
                            n.ProhodSmer();
                        }
                        if (n.postavicka.Bottom > 610) // padá mimo hrací plochu
                        {
                            n.postavicka.Top = 570;
                            n.ProhodSmer();
                        }
                        if (n.postavicka.Top < 20) // letí nahoru z hrací plochy
                        {
                            n.postavicka.Top = 60;
                            n.ProhodSmer();
                        }
                    }
                }
                #endregion ;


                #region Kolize hráče s nepřítelem
                bool kolize = false;
                foreach (Nepritel n in Nepritel.listNepratel)
                {
                    if (n.postavicka.Bounds.IntersectsWith(hrac.postavicka.Bounds))
                    {
                        kolize = true;
                        break;
                    }
                }
                if (kolize) // ubrání životu hráči a restart levelu
                {
                    hrac.UberZivot();
                    if (hrac.zivoty > 0)
                    {
                        Level.RestartLevelu(gamesetup.formular, hrac, gamesetup.aktualniIDLevelu);
                    }
                }
                #endregion ;


                #region Sebrání klíče a postup do dalšího levelu
                PictureBox Sebrany = null;
                foreach (PictureBox k in Blok.klicList)
                {
                    if (hrac.postavicka.Bounds.IntersectsWith(k.Bounds))
                    {
                        Sebrany = k;
                        k.Image = null;
                        Controls.Remove(k);
                        ScoreBoard.SeberKlic();
                        GameSetup.SKeyPickUp.Play();
                        break;
                    }
                }
                Blok.klicList.Remove(Sebrany);

                if (ScoreBoard.zbyvaKlicu == 0)
                {
                    Cil.aktualniCil.Otevri();
                }

                // Hráč vstoupil na otevřený cíl
                if (gamesetup.aktualniIDLevelu == 0 && Cil.jeLevelDokoncen && hrac.postavicka.Bounds.IntersectsWith(Cil.aktualniCil.pbox.Bounds))
                {
                    GameSetup.SNextLevel.Play();
                    ScoreBoard.VypocitejSkoreZaLevel(hrac);
                    Level L2 = Level.CreateLevel2(gamesetup.formular, hrac);
                    L2.Generuj();
                    gamesetup.ZvysAktualniIDLevelu();
                }
                else if (gamesetup.aktualniIDLevelu == 1 && Cil.jeLevelDokoncen && hrac.postavicka.Bounds.IntersectsWith(Cil.aktualniCil.pbox.Bounds))
                {
                    //GameSetup.SNextLevel.Play();
                    ScoreBoard.VypocitejSkoreZaLevel(hrac);
                    //Level L3 = Level.CreateLevel3(gamesetup.formular, hrac);
                    //L3.Generuj();
                    //gamesetup.ZvysAktualniIDLevelu();
                    gamesetup.HappyEnd();
                }

                /*else if (gamesetup.aktualniIDLevelu == 2 && Cil.jeLevelDokoncen && hrac.postavicka.Bounds.IntersectsWith(Cil.aktualniCil.pbox.Bounds))
                 * {
                 *  ScoreBoard.VypocitejSkoreZaLevel(hrac);
                 *  gamesetup.HappyEnd();
                 * }*/
                #endregion ;


                #region AirBar
                ScoreBoard.airBarHodnota -= Level.aktualniLevel.rychlostBaru;

                // Ubývání AirBaru
                if (ScoreBoard.airBarHodnota > 10)
                {
                    ScoreBoard.airBar.Width = ScoreBoard.airBarHodnota / 10;
                }
                else
                {
                    ScoreBoard.airBar.Width = 0; // jinak by se nikdy nedostalo na nulu kvůli zaokrouhlování
                }

                // Nastavení barev AirBaru - do poloviny zelená, pak do čtvrtiny oranžová, jinak červená
                if (ScoreBoard.airBar.BackColor != Color.Orange && ScoreBoard.airBar.Width < 1280 / 2 && ScoreBoard.airBar.Width > 1280 / 4)
                {
                    ScoreBoard.airBar.BackColor = Color.Orange;
                }
                else if (ScoreBoard.airBar.BackColor != Color.DarkRed && ScoreBoard.airBar.Width < 1280 / 4)
                {
                    ScoreBoard.airBar.BackColor = Color.DarkRed;
                }

                // Pokud je AirBar na nule, hráč ztratí život a level se restartuje
                if (ScoreBoard.airBar.Width == 0 && hrac.zivoty > 0)
                {
                    hrac.UberZivot();
                    if (hrac.zivoty > 0)
                    {
                        Level.RestartLevelu(gamesetup.formular, hrac, gamesetup.aktualniIDLevelu);
                    }
                }

                // Hráč ztratil všechny životy
                if (hrac.zivoty == 0)
                {
                    gamesetup.GameOver();
                }
                #endregion ;
            }
        }