예제 #1
0
        /////////////////////////////////////////////////////////////////////////////////
        // ПРОРИСОВКА ИГРОВОГО ПОЛЯ

        /// <summary>
        /// Метод отрисовывает информационное поле игры (очки, уровень, состояние)
        /// </summary>
        private void DrawInfo()
        {
            string S1,
                   S2 = String.Format(" В розыгрыше: {0,4:D} ", currentScore),
                   S3 = String.Format(" Выигрыш: {0,6:D} ", score),
                   S4 = String.Format(" Съедено: {0,5:D} ", ateApples),
                   S5 = String.Format(" Осталось съесть: {0,2:D} ", applesQuantity - currentScore / SMult);

            if (isWorking)
            {
                S1 = String.Format(" УРОВЕНЬ {0,2:D} ", levelNumber + 1);
            }
            else
            {
                S1 = " ПАУЗА ";
            }

            float StrUp   = Tile.Height * 0.15f,
                  StrDown = BackBufferHeight - Tile.Height * 0.8f;

            // Векторы позиций для отображения элементов учитывают смещение камеры наблюдения
            Vector2 V1 = new Vector2(BackBufferWidth * 0.05f, StrUp) + level.CameraPosition,
                    V2 = new Vector2(BackBufferWidth * 0.21f, StrUp) + level.CameraPosition,
                    V3 = new Vector2(BackBufferWidth * 0.50f, StrUp) + level.CameraPosition,
                    V4 = new Vector2(BackBufferWidth * 0.80f, StrUp) + level.CameraPosition,
                    V5 = new Vector2(BackBufferWidth * 0.05f, StrDown) + level.CameraPosition,
                    V6 = new Vector2(BackBufferWidth * 0.89f, StrDown) + level.CameraPosition,
                    V7 = new Vector2(BackBufferWidth * 0.92f, StrDown) + level.CameraPosition;

            DrawShadowedString(defFont, S1, V1, SnakeGameColors.LRed);
            DrawShadowedString(defFont, S2, V2, SnakeGameColors.Yellow);
            DrawShadowedString(defFont, S3, V3, SnakeGameColors.Green);
            DrawShadowedString(defFont, S4, V4, SnakeGameColors.LBlue);

            // Если игра идёт, выводить строку "осталось съесть"
            if (isAlive)
            {
                DrawShadowedString(defFont, S5, V5, SnakeGameColors.Silver);
            }

            // Если есть музыка или звук, выводить соответствующий знак
            if (isMusic)
            {
                DrawShadowedString(defFont, "[\x266B]", V6, SnakeGameColors.Yellow);
            }
            else
            {
                DrawShadowedString(defFont, "[\x266B]", V6, SnakeGameColors.Black);
            }

            if (isSound)
            {
                DrawShadowedString(defFont, "[\x266A]", V7, SnakeGameColors.Yellow);
            }
            else
            {
                DrawShadowedString(defFont, "[\x266A]", V7, SnakeGameColors.Black);
            }

            // КОМПАС
            // Смена цвета стрелки компаса
            Color compasColor = SnakeGameColors.CompasRed;

            if (GameAuxFunctions.VDist(playerPosition[0], applePosition) < GameAuxFunctions.VDist(compasOffs, applePosition))
            {
                compasColor = SnakeGameColors.CompasGreen;
            }

            // Положение стрелки компаса
            compasOffs       = playerPosition[0];
            compasPosition.X = (int)playerPosition[0].X;
            compasPosition.Y = (int)playerPosition[0].Y;
            Vector2 V8 = applePosition - playerPosition[0];

            // Формула движения стрелки компаса и её отображение
            compasTurn = (float)Math.Acos(V8.X / GameAuxFunctions.VDist(V8, Vector2.Zero)) * GameAuxFunctions.NNSign(V8.Y, true);
            spriteBatch.Draw(compas, compasPosition, compasSize, compasColor, compasTurn,
                             new Vector2(compas.Width, compas.Height) / 2, SpriteEffects.None, 0.0f);
        }
예제 #2
0
        /// <summary>
        /// Метод отрисовывает уровень игры
        /// </summary>
        /// <param name="VGameTime">Время игры</param>
        protected override void Draw(GameTime VGameTime)
        {
            // Создание чистого окна и запуск рисования
            graphics.GraphicsDevice.Clear(SnakeGameColors.DGreen);
            spriteBatch.Begin();

            // В ЗАВИСИМОСТИ ОТ СОСТОЯНИЯ ИГРЫ
            switch (gameStatus)
            {
            //////////////////////////////////////////////////////////////////
            case GameStatus.Start:
                ShowStartMessage();

                break;

            //////////////////////////////////////////////////////////////////
            case GameStatus.Help:
                ShowHelpMessage();

                break;

            //////////////////////////////////////////////////////////////////
            case GameStatus.Playing:
                // ОТОБРАЖЕНИЕ УРОВНЯ
                level.Draw(VGameTime, spriteBatch, playerPosition[0]);

                // ОТОБРАЖЕНИЕ АНИМИРОВАННЫХ ИХОБРАЖЕНИЙ
                // Яблоко
                appleAnimator.Draw(VGameTime, spriteBatch, applePosition, SpriteEffects.None, SnakeGameColors.White, 0.0);

                // Тело змейки
                for (int n = 1; n < playerPosition.Count; n++)
                {
                    bodyAnimator.Draw(VGameTime, spriteBatch, playerPosition[n], SpriteEffects.None, SnakeGameColors.White, 0.0);
                }

                // Голова змейки
                headAnimator.Draw(VGameTime, spriteBatch, playerPosition[0], SpriteEffects.None, SnakeGameColors.White,
                                  // Изменение угла поворота текстуры
                                  Math.Acos(Math.Sign(playerTo.X)) * GameAuxFunctions.NNSign(playerTo.Y, true));


                // ОТОБРАЖЕНИЕ ИНФОРМАЦИИ
                DrawInfo();

                // Отображение сообщений
                Vector2 backBufferSize = new Vector2(SnakeGame.BackBufferWidth, SnakeGame.BackBufferHeight);
                if (showLevelMsg)
                {
                    messageBackAnimator.Draw(VGameTime, spriteBatch, GameAuxFunctions.CenterOf(backBufferSize,
                                                                                               level.CameraPosition), SpriteEffects.None, SnakeGameColors.LBlue_B, 0.0);
                    ShowLevelMessage();
                }

                if (showWinMsg)
                {
                    messageBackAnimator.Draw(VGameTime, spriteBatch, GameAuxFunctions.CenterOf(backBufferSize,
                                                                                               level.CameraPosition), SpriteEffects.None, SnakeGameColors.Green_B, 0.0);
                    ShowWinMessage();
                }

                if (showLoseMsg)
                {
                    messageBackAnimator.Draw(VGameTime, spriteBatch, GameAuxFunctions.CenterOf(backBufferSize,
                                                                                               level.CameraPosition), SpriteEffects.None, SnakeGameColors.Red_B, 0.0);
                    ShowLoseMessage();
                }

                if (showExitMsg)
                {
                    messageBackAnimator.Draw(VGameTime, spriteBatch, GameAuxFunctions.CenterOf(backBufferSize,
                                                                                               level.CameraPosition), SpriteEffects.None, SnakeGameColors.Yellow_B, 0.0);
                    ShowExitMessage();
                }

                break;

            //////////////////////////////////////////////////////////////////

            case GameStatus.Finish:
                ShowFinishMessage();

                break;
            }

            // Отключение устройства рисования
            spriteBatch.End();

            // Перерисовка
            base.Draw(VGameTime);
        }
예제 #3
0
        /// <summary>
        /// Метод отрисовывает уровень игры
        /// </summary>
        /// <param name="VGameTime"></param>
        protected override void Draw(GameTime VGameTime)
        {
            // Создание чистого окна и запуск рисования
            graphics.GraphicsDevice.Clear(TurtleGameColors.Black);
            spriteBatch.Begin();

            // В ЗАВИСИМОСТИ ОТ СОСТОЯНИЯ ИГРЫ
            switch (gameStatus)
            {
            //////////////////////////////////////////////////////////////////
            case GameStatus.Start:
                // Отображает стартовый экран
                ShowStartMessage();

                break;

            //////////////////////////////////////////////////////////////////
            case GameStatus.Help:
                ShowHelpMessage();

                break;

            //////////////////////////////////////////////////////////////////
            case GameStatus.Playing:
                // ОТОБРАЖЕНИЕ УРОВНЯ
                level.Draw(VGameTime, spriteBatch, playerPosition);

                // ОТОБРАЖЕНИЕ ИЗОБРАЖЕНИЙ
                // Съедобные объекты
                for (int i = 0; i < eatable.Count; i++)
                {
                    spriteBatch.Draw(eatableTextures[eatable[i].TextureNumber],
                                     eatable[i].DestinationRect, eatable[i].SourceRect, TurtleGameColors.White,
                                     eatable[i].Turn, eatable[i].Origin, SpriteEffects.None, 0.0f);
                }

                // Игрок (над ними)
                playerAnimator.Draw(VGameTime, spriteBatch, playerPosition, SpriteEffects.None, TurtleGameColors.White,
                                    // Изменение угла поворота текстуры
                                    Math.Acos(playerTo.X) * GameAuxFunctions.NNSign(playerTo.Y, false));

                // Автомобили (ещё выше)
                for (int i = 0; i < carPosition.Count; i++)
                {
                    spriteBatch.Draw(carTextures[carPosition[i].TextureNumber],
                                     carPosition[i].DestinationRect, carPosition[i].SourceRect, TurtleGameColors.White,
                                     carPosition[i].Turn, carPosition[i].Origin, SpriteEffects.None, 0.0f);
                }

                // ОТОБРАЖЕНИЕ ИНФОРМАЦИИ УРОВНЯ
                DrawInfo();

                // Отображение сообщений (если они вызваны)
                if (showLevelMsg)
                {
                    ShowLevelMessage();
                }

                if (showWinMsg)
                {
                    ShowWinMessage();
                }

                if (showLoseMsg)
                {
                    ShowLoseMessage();
                }

                if (showExitMsg)
                {
                    ShowExitMessage();
                }

                break;

            //////////////////////////////////////////////////////////////////

            case GameStatus.Finish:
                ShowFinishMessage();

                break;
            }

            // Завершение рисования
            spriteBatch.End();

            // Перерисовка
            base.Draw(VGameTime);
        }