C# Змейка в консоли / .NET Console Snake Game

C# Змейка в консоли / .NET Console Snake Game

Создание классической змейки в консольном приложении на C#

Обзор раздела: В этом разделе мы создадим консольное приложение для классической игры "Змейка" на языке программирования C#. Мы будем использовать структуры данных и на практике реализовывать различные аспекты игры.

Настройка окна приложения

  • Установим глобальные переменные для ширины и высоты карты.
  • Установим размер окна и буфера соответственно.
  • Выключим курсор для вывода изображения.

Использование структуры пикселя

  • Добавим новую структуру пикселя, которая будет содержать координаты x, y и цвет пикселя.
  • Инициализируем свойства через конструктор.
  • Добавляем метод отрисовки пикселя.
  • Добавляем метод очистки экрана.

Отображение бортика в игре

  • Создаем новый метод для отображения бортика в игре.
  • Создаем объект пикселя и передаем координаты x, y и цвет бортика.
  • Добавляем цикл для отрисовки вертикальных полос слева и справа.

Использование структуры змейки

  • Змейка состоит из головы и тела. Голова - это просто пиксель, а тело представляет собой очередь из пикселей.

Реализация движения змейки

  • Для реализации движения змейки используется очередь.

Создание класса змеи

Обзор раздела: В этом разделе мы создаем новый класс змеи и добавляем excel головы и очередь для тела. Мы также создаем конструктор, который принимает параметры начального положения головы x и y, цвета для головы и тела, а также начальный размер тела по умолчанию.

Создание нового класса змеи

  • Добавляем новый класс змеи.
  • Добавляем excel головы.
  • Добавляем очередь для тела.

Создание конструктора

  • Создаем конструктор.
  • Задаем параметры начального положения головы x и y, цвета для головы и тела, а также начальный размер тела по умолчанию.

Инициализация в конструкторе

  • Инициализируем нашу голову в конструкторе.
  • Создаем цикл для тела, в котором мы будем добавлять пиксели начиная с хвоста проходим от длины тела до нуля при этом декомментируем наш код и вызываем метод and heel для добавления элементов в очередь.
  • Добавляем метод отображения и очистки змеи с экрана.

Отрисовка прямо в конструкторе

  • Вызываем метод отрисовки прямо в конструкторе.
  • Создаем новый экземпляр змеи в нашей программе.
  • Добавляем пару переменных для обозначения цветов для головы и тела.

Исправление метода движения

Обзор раздела: В этом разделе мы исправляем работу метода движения, который позволяет змее двигаться по направлению. Мы создаем новое перечисление in direction, которое содержит все возможные направления движения (вверх, вниз, влево и вправо).

Исправление работы метода движения

  • Исправляем работу метода движения.
  • Создаем новое перечисление in direction, которое содержит все возможные направления движения (вверх, вниз, влево и вправо).
  • Используем направления как параметры для метода движения.

Добавление управления

Обзор раздела: В этом разделе мы добавляем управление змеей. Мы создаем новый метод для чтения управления, который принимает текущее направление и возвращает предыдущее направление, если ничего не нажато. Если что-то нажато, мы считываем эту кнопку.

Создание нового метода для чтения управления

  • Создаем новый метод для чтения управления.
  • Принимаем текущее направление и возвращаем предыдущее направление, если ничего не нажато.
  • Считываем кнопки при нажатии на стрелочки.

Добавление глобальной переменной

Обзор раздела: В этом разделе мы добавляем глобальную переменную, которая означает перерыв между кадрами (200 миллисекунд), используя класс секундомера. Мы также проверяем прошло ли 200 миллисекунд в цикле и вызываем наш метод ритмов month.

Добавление глобальной переменной

  • Добавляем глобальную переменную, которая означает перерыв между кадрами (200 миллисекунд).
  • Используем класс секундомера для проверки прошедших 200 миллисекунд.
  • Вызываем метод ритмов month.

Добавление условия для геймера

Описание раздела: В этом разделе мы добавляем условие для game over, которое произойдет, если змея упрется в борт или свое тело.

Добавление условия для game over

  • Следующий шаг - это добавление условия для геймера.
  • Game over произойдет есть змея упрется на головой в борт или же свое тело.
  • При этом условии мы выйдем из цикла.

Перемещение основного цикла игры в отдельный метод start

Описание раздела: В этом разделе мы перемещаем основной цикл игры в отдельный метод start и не будем при запуске игру оси геймера с перерывом на одну секунду.

Перемещение основного цикла игры в отдельный метод start

  • Переместим наш основной цикл играю в отдельный метод start и
  • В мае не будем при запускать игру оси геймера с перерывом на одну секунду.

Генерация еды

Описание раздела: В этом разделе мы создаем метод генерации еды и используем цикл для случайной генерации еды.

Создание метода генерации еды

  • У нас уже почти готовая змейка, но какая змейка без еды? Для генерации нам потребуется random.
  • Создадим метод gen_food, который будет возвращать пиксель - то есть еду. В него мы будем передавать змею, чтобы еда случайно не генерировалась в самой змее.
  • Используем цикл, чтобы в теле цикла случайно генерировать еду.

Вызов метода генерации еды и отрисовки

Описание раздела: В этом разделе мы вызываем метод генерации еды и отрисовки.

Вызов метода генерации еды и отрисовки

  • Вызываем метод gen_food в основном теле игры.
  • Вызываем метод отрисовки.
  • Видим, что при перезапуске игры еда появляется в случайных местах.

Модификация движения змеи

Описание раздела: В этом разделе мы модифицируем движение для змей.

Добавление флага для движения змеи

  • Добавим флаг, который будет отвечать за то, есть ли змея на движение или нет. Если есть, то мы просто не убираем pixels вас то при движении.
  • В основном цикле игры проверяем попала ли наша голова на место еды.
  • Если попало, то мы двигаемся с параметром "есть", если нет - просто двигаемся.
  • Также, если мы попали на еду, мы генерируем новую еду.

Добавление переменной для очков

Описание раздела: В этом разделе мы добавляем переменную для очков и инкрементируем значение очков при кушании змейки.

Добавление переменной для очков

  • Давайте для интереса добавим переменную для очков.
  • Если змея кушает, то инкрементируем значение очков и отображаем количество при выборе.

Учет лага времени

Описание раздела: В этом разделе мы добавляем учет лага времени, чтобы скорость игры не зависела от процессора.

Добавление учета лага времени

  • Добавим переменную "лак" на 100 миллисекунд каждую итерацию.
  • Теперь нам нужно вычесть этот лак из времени ожидания считывания движения.
  • Добавим искусственный лак в основном цикле игры.

Добавление звуков

Описание раздела: В этом разделе мы добавляем звуки в игру.

Добавление звуков

  • Наша консоль может издавать бипы. Будем их вызывать в отдельном потоке, что не замораживает нашу игру на время биппо, используя класс task.
  • Параметры передаются частотой и длительностью звучания.
  • Но это все - наша змейка полностью готово.
Video description

Создаем классическую змейку в консольном приложении C#. Ссылка на проект: https://github.com/dmstop/SnakeV2

C# Змейка в консоли / .NET Console Snake Game | YouTube Video Summary | Video Highlight