コード例 #1
0
        public void MenuSelect()
        {
            Console.Clear();

            // Установка размера окна меню
            int width  = 33;
            int height = 6;

            Console.SetWindowSize(width + 1, height + 1);

            Walls frame = new Walls(width, height, '*');

            // Название игры и пункты меню
            TextItem title = new TextItem(1, 1, "~~~~~~~~~~~~ЗМЕЙКА~~~~~~~~~~~~".PadBoth(31));

            // Передача пунктов в меню
            Menu menu = new Menu(new List <TextItem>
            {
                new TextItem(1, 2, "НАЧАТЬ ИГРУ".PadBoth(31)),
                new TextItem(1, 3, "НАСТРОЙКИ".PadBoth(31)),
                new TextItem(1, 4, "ВЫХОД".PadBoth(31))
            });

            // Цвета
            frame.SetColor(ConsoleColor.Black, ConsoleColor.Yellow);
            title.SetColor(ConsoleColor.DarkBlue, ConsoleColor.Green);
            menu.SetColor(ConsoleColor.DarkGreen, ConsoleColor.Green);

            // Отрисовка рамки вокруг меню
            frame.Draw();

            // Показ названия и меню
            title.Show();
            menu.Show();

            // Индекс выбранного пункта
            int selected = menu.SelectItem();

            switch (selected)
            {
            case 0:
                Game();
                break;

            case 1:
                Settings();
                break;

            case 2:
                Exit();
                break;
            }
        }
コード例 #2
0
        public void Game()
        {
            // Символы поля и стен
            char fieldCh = ' ';
            char wallCh  = '#';

            // Установка размера окна игры
            int width  = 55;
            int height = 15;

            Console.SetWindowSize(width + 1, height + 1);

            // Размеры поля и стен
            int columns = 30;
            int rows    = 15;

            // Инициализация статистики
            Stats.Initialize(32, 10);
            Stats.Score  = 0;
            Stats.Moves  = 0;
            Stats.Speed  = speed;
            Stats.Length = length;
            Stats.Show();

            // Отрисовка поля и стен
            Field field = new Field(columns, rows, fieldCh);
            Walls walls = new Walls(columns, rows, wallCh);

            // Отрисовка змейки
            Point tail  = new Point(1, 1, 'o');
            Snake snake = new Snake(tail, Stats.Length, Direction.Right);

            // Еда
            FoodSpawner foodSpawner = new FoodSpawner(walls.Width, walls.Height, "♥♦♣♠");

            foodSpawner.Initialize();

            // Ускорение змейки в процентах
            double modifier = 5;

            // Установка цвета
            field.SetColor(ConsoleColor.DarkCyan, ConsoleColor.Cyan);
            walls.SetColor(ConsoleColor.Black, ConsoleColor.DarkGreen);
            snake.SetColor(ConsoleColor.DarkCyan, ConsoleColor.Green);
            FoodSpawner.Food.SetColor(ConsoleColor.DarkCyan, ConsoleColor.Red);

            // Отображение
            field.Draw();
            walls.Draw();
            snake.Draw();
            FoodSpawner.Food.Draw();

            // Движение змейки
            while (true)
            {
                // Выбор следующего направления
                snake.HandleKey();

                // Условия смерти змейки
                if (snake.IsWallHit(walls.Width, walls.Height) || snake.IsTailHit())
                {
                    GameOver();
                    Thread.Sleep(2000);
                    MenuSelect();
                }
                // Змейка ест
                if (snake.Eat(FoodSpawner.Food))
                {
                    do
                    {
                        foodSpawner.Initialize();
                    } while (snake.IsHit(FoodSpawner.Food));
                    FoodSpawner.Food.Draw();
                    // Увеличение очков
                    Stats.Score += 10;
                    // Параллельное увеличение рекорда
                    if (Stats.Score >= Stats.HighScore)
                    {
                        Stats.HighScore = Stats.Score;
                    }
                    // Увеличение длины
                    Stats.Length++;
                    Stats.Speed += Stats.Speed / 100 * modifier;
                }
                else
                {
                    // Движение змейки
                    snake.Move();
                    // Увеличение шагов
                    Stats.Moves++;
                }

                // Показ статистики
                Stats.Show();
                // Установка скорости
                Thread.Sleep(1000 / (int)Stats.Speed);
            }
        }