Exemplo n.º 1
0
        /// <summary>
        /// Плохое завершение игры
        /// </summary>
        public void Finish()
        {
            finish = true;
            LogEvent?.Invoke("Игрок проиграл", player.Pos.X, player.Pos.Y);
            //Сообщение
            GL.ClearColor(Color.Black);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            GL.LoadIdentity();

            GL.PushMatrix();
            GL.Translate(15, 15, 0);

            GL.Color3(Color.Black);
            GL.Begin(PrimitiveType.TriangleFan);
            GL.Vertex2(0, 0);
            GL.Vertex2(0, screen.Height);
            GL.Vertex2(screen.Width, screen.Height);
            GL.Vertex2(screen.Width, 0);
            GL.End();

            GL.Color3(Color.Wheat);
            TextGame.Print2DText(50, (float)(screen.Height - 200), "Вы проиграли! Мир захватил электронный разум, вышедший из под контроля своих создателей.");
            TextGame.Print2DText(50, (float)(screen.Height - 350), "Неужели это конец?");
            TextGame.Print2DText(50, (float)(screen.Height - 500), "Мастер, готовы ли вы к перерождению во имя победы?");
            GL.PopMatrix();
            // дожидаемся завершения визуализации кадра
            GL.Flush();
            // сигнал для обновление элемента реализующего визуализацию.
            glControl.Invalidate();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Обновление матрицы видового экрана OpenGL
        /// </summary>
        private void DrawConsole()
        {
            GL.ClearColor(Color.Black);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            GL.LoadIdentity();

            GL.PushMatrix();
            GL.Translate(15, 15, 0);

            foreach (var b in backgrounds)
            {
                b.Draw(r);
            }

            for (int i = 0; i < bullet.Count; ++i)
            {
                if (!bullet[i].Draw(r, new PointGrath(0, 0)))
                {
                    bullet.RemoveAt(i);
                }
            }

            var boom = false;
            var size = 100;

            for (int i = 0; i < dangerous.Count; ++i)
            {
                for (int b = 0; b < bullet.Count; ++b)
                {
                    if (dangerous[i].Collision(bullet[b]))
                    {
                        score++;
                        boom = true;
                        System.Media.SystemSounds.Hand.Play();
                        bullet.RemoveAt(b);
                    }
                }

                for (int m = 0; m < medicine.Count; ++m)
                {
                    if (dangerous[i].Collision(medicine[m]))
                    {
                        boom = true;
                        System.Media.SystemSounds.Hand.Play();
                        medicine[m] = new Medicine(new PointGrath((screen.Width / 2) + r.Next(-2000, 2000), (screen.Height / 2) + r.Next(-2000, 2000)), new Speed(0, 0), new PointGrath(60, 60), screen);
                    }
                }

                if (dangerous[i].Collision(player))
                {
                    boom = true;
                    var damage = r.Next(1, 10);
                    LogEvent?.Invoke($"Столкновение с {dangerous[i].GetType()}. Вы получили урон в размере: {damage}", player.Pos.X, player.Pos.Y);
                    player.EnergyLow(damage);
                    score++;
                    System.Media.SystemSounds.Asterisk.Play();
                    if (player.Energy <= 0)
                    {
                        player?.Die();
                    }
                }

                if (!boom && !dangerous[i].Draw(r))
                {
                    dangerous[i] = new Danger_lvl2(new PointGrath(r.Next((int)(screen.Width / 1.5), (int)(screen.Width - size)), r.Next((int)(0 - (size * 2)), (int)(screen.Height - (size * 2)))),
                                                   new Speed(6 + r.NextDouble() * 16, 6 + r.NextDouble() * 24),
                                                   new PointGrath(size, size), screen);
                }
                if (boom)
                {
                    LogEvent?.Invoke($"Враг {dangerous[i].GetType()} повержен", player.Pos.X, player.Pos.Y);
                    if (r.Next(0, 100) < 50)
                    {
                        dangerous[i] = new Danger_lvl2(new PointGrath(r.Next((int)(screen.Width / 1.5), (int)(screen.Width - size)), r.Next((int)(0 - (size * 2)), (int)(screen.Height - (size * 2)))),
                                                       new Speed(12 + r.NextDouble() * 64, 6 + r.NextDouble() * 24), new PointGrath(size, size), screen);
                        if (r.Next(0, 1000) > 900)
                        {
                            dangerous.Add(new Danger_lvl2(new PointGrath(r.Next((int)(screen.Width / 1.5), (int)(screen.Width - size)), r.Next((int)(0 - (size * 2)), (int)(screen.Height - (size * 2)))),
                                                          new Speed(12 + r.NextDouble() * 64, 6 + r.NextDouble() * 24), new PointGrath(size, size), screen));
                        }
                    }
                    else
                    {
                        dangerous[i] = new Danger(new PointGrath(r.Next((int)(0 + size), (int)(screen.Width / 4)), r.Next((int)(0 - (size * 2)), (int)(screen.Height - (size * 2)))),
                                                  new Speed(12 + r.NextDouble() * 64, 6 + r.NextDouble() * 24),
                                                  new PointGrath(size, size), screen);
                        if (r.Next(0, 1000) > 700)
                        {
                            dangerous.Add(new Danger(new PointGrath(r.Next((int)(0 + size), (int)(screen.Width / 4)), r.Next((int)(0 - (size * 2)), (int)(screen.Height - (size * 2)))),
                                                     new Speed(12 + r.NextDouble() * 64, 6 + r.NextDouble() * 24), new PointGrath(size, size), screen));
                        }
                    }

                    boom = false;
                }
            }

            player.Draw(r, new PointGrath(lineX, lineY));

            for (var i = 0; i < medicine.Count; ++i)
            {
                if (player.Collision(medicine[i]))
                {
                    player.Heal(medicine[i].Heal);
                    medicine[i] = new Medicine(new PointGrath((screen.Width / 2) + r.Next(-2000, 2000), (screen.Height / 2) + r.Next(-2000, 2000)), new Speed(0, 0), new PointGrath(60, 60), screen);
                }
                else if (!medicine[i].Draw(r, new PointGrath(lineX, lineY)))
                {
                    medicine[i] = new Medicine(new PointGrath((screen.Width / 2) + r.Next(-2000, 2000), (screen.Height / 2) + r.Next(-2000, 2000)), new Speed(0, 0), new PointGrath(60, 60), screen);
                }
            }

            GeneralizedDelegate <string> d = Summ <string>;

            GL.Color3(Color.Crimson);
            if (score < 5000)
            {
                TextGame.Print2DText(50, (float)(screen.Height - 200), d("Марафон дикой аптечки! ", $"Марафон дикой аптечки! Вы разрушили {score} из 5000 астероидов."));
            }
            else
            {
                TextGame.Print2DText(50, (float)(screen.Height - 200), d("Марафон дикой аптечки выы выйграли!", $"Со счетом {score} астероидов."));
            }

            GL.PopMatrix();
            // дожидаемся завершения визуализации кадра
            GL.Flush();
            // сигнал для обновление элемента реализующего визуализацию.
            glControl.Invalidate();
        }