background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "ЗМЕЙКА НА C++ — ПРАКТИКА #1"

input logo icon
Похожие ролики из нашего каталога
|

Похожие ролики из нашего каталога

Теги видео
|

Теги видео

си
си плюс плюс
плюс
уроки
программирование
на
языке
2023
tutorial
lesson
гайд
обучение
языку
с нуля
С++
C++
ci
курс
быстро
выучить
змейка
змейка на си
написать
как
как написать змейку
игра
gamedev
геймдев
с чего начать
программирование игр
создание игр
игры
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:02
первую практическую работу с
00:00:03
использованием языка c++
00:00:05
конечный целью поставим вот такую игру у
00:00:08
нас будет змейка состоящая из букв о с
00:00:11
помощью клавиш ВСД будем управлять
00:00:13
змейкой и собирать вот такие фрукты
00:00:15
изображаемые символом звездочка любое
00:00:19
столкновение главы змейки с её телом или
00:00:21
краем карты будет означать game over по
00:00:24
окончанию игры будет выводиться вот
00:00:26
такое небольшое окно с результатами
00:00:28
приступим к реализации обязательно
00:00:30
Создайте отдельный проект чтобы потом
00:00:32
возвращаться и улучшать его по мере
00:00:34
изучения нами дальнейших средств языка
00:00:36
Итак прежде всего надо создать вот такой
00:00:39
массив из символов это будет нашей
00:00:42
картой
00:00:43
пишем все на глаз просто чтобы самим
00:00:45
было удобно играть Обратите внимание на
00:00:47
знаки переноса строки Это нужно чтобы
00:00:49
карта вдруг не вывелась в одну строчку
00:00:51
теперь чтобы добавлять на карту объекты
00:00:55
нужно посчитать ее высоту и ширину в
00:00:57
моем случае ширина это 17 а высота равна
00:01:00
10 Не забывайте что обратный слэш с
00:01:03
буквой N означает один символ переноса
00:01:06
строки
00:01:07
создадим константу wins и Hide и запишем
00:01:11
в них ширину и высоту константы обычно
00:01:14
пишут заглавными буквами Для дальнейшего
00:01:16
будет полезно сохранить еще одну
00:01:18
константу максимально возможный размер
00:01:19
змейки нетрудно посчитать что это будет
00:01:22
ширина -3 умножить на высоту минус 2
00:01:25
также определим константы для
00:01:27
определения движения змейки
00:01:30
uptown Left Right соответственно 0 1 2 3
00:01:33
и создадим переменную Snake Deer которая
00:01:37
отвечает за текущее направление змейки
00:01:39
Пускай изначально она будет двигаться
00:01:40
вверх еще нам понадобится булева
00:01:43
переменная и с ранен которая будет
00:01:45
меняться на false когда игра закончится
00:01:47
теперь определим символ змейки букву
00:01:50
символ можно указать Вот так и при
00:01:53
процессор сам подставит туда число
00:01:55
которое кодирует Этот символ еще
00:01:58
создадим для змейки 2 массива которые
00:02:00
будут хранить координаты каждого ее
00:02:02
блока Один массив будет координаты по X
00:02:05
другой по Y
00:02:06
не трудно догадаться что максимальные
00:02:09
размеры этих массивов не может быть
00:02:10
больше площади игрового поля которое мы
00:02:13
уже подсчитали определим теперь
00:02:15
переменную snakeland для хранения
00:02:17
текущей длины змеи при запуске программы
00:02:19
определим голову змейки для этого укажем
00:02:22
Координаты середины поля к нулевому
00:02:24
элементу змейки далее заводим цикл Wild
00:02:27
который будет работать пока переменная и
00:02:29
с ранены принимает значение True теперь
00:02:31
нам надо каждую итерацию добавлять всю
00:02:33
змейку на карту отрисовывать карту и
00:02:36
очистить ее от змейки для следующей
00:02:37
отрисовки догадаться какой номер
00:02:39
элемента массива соответствует положению
00:02:41
на карте с координатами X Y является по
00:02:45
сути ключевой сложностью этой задачи
00:02:46
можете отрисовать карту меняя различные
00:02:49
элементы чтобы понять как это устроено
00:02:51
Ну или не париться и просто повторять за
00:02:53
мной координату Y умножаем на ширину
00:02:56
карты тем самым спускаемся на нужную нам
00:02:58
строку и добавляем к этому разбегаясь по
00:03:01
столбцам Теперь если мы запустим то
00:03:04
Увидим что карта выводится как пленка
00:03:06
как фильм Поэтому нам нужно сдвигать
00:03:09
курсор в консоли в начало Для этого
00:03:12
просто обратимся к Google и скопируем
00:03:14
Решение вот этого замечательного
00:03:15
человека эта функция будет решать
00:03:17
проблему кинопленки нужно будет вызывать
00:03:19
его каждый раз перед отрисовкой карты Да
00:03:22
и не забудьте подключить заголовок
00:03:25
windows.h Ну проверим как это работает
00:03:28
теперь А теперь у нас постоянные
00:03:31
моргание консоли Ну уже лучше можем
00:03:33
также перед отрисовкой карты выводить
00:03:35
текущую длину змейки Вот так и еще сразу
00:03:38
позаботимся об очищении змейки из буфера
00:03:40
карты чтобы при движении ее предыдущее
00:03:43
положение не отображались пририсовываем
00:03:45
положение змейки знак пробела Теперь
00:03:48
давайте разберемся с движением каждый
00:03:50
ход нам надо смещать все элементы
00:03:52
массива позиции змейки кроме последнего
00:03:55
а голову смещать на единицу в сторону
00:03:57
движения причем сдвигать надо начинать с
00:04:00
конца Так как иначе все элементы будут
00:04:03
одинаковыми пишем цикл начинается он
00:04:05
будет с номера верхнего положительного
00:04:07
элемента массива то есть последняя часть
00:04:10
змейки имеет номер снейклин минус 1
00:04:13
апрель последняя Снейк Лен минус 2 и
00:04:16
присваиваем следующему элементу змейки
00:04:18
предыдущий точнее его координат далее
00:04:21
надо сдвинуть голову змейки в
00:04:23
направлении заданном переменным Snake
00:04:25
DIR поскольку система координат у нас
00:04:28
перевернута то при движении вверх
00:04:30
координата Y будет уменьшаться а не
00:04:32
увеличиваться вообще очень много
00:04:34
графических библиотек часто работают
00:04:36
именно с перевернутой системой Итак
00:04:38
пишем условную конструкцию если текущее
00:04:42
положение змейки вверх то есть то в
00:04:45
начале Y на 1 аналогичное рассуждение
00:04:48
можно провести для остальных ситуаций
00:04:50
можете поставить видео на паузу и
00:04:52
написать самостоятельно
00:04:55
Давайте запустим и проверим что все
00:04:57
работает так как надо видим что улетает
00:05:01
ошибка нарушение прав доступа Давайте
00:05:03
замедлим цикл чтобы точнее посмотреть на
00:05:05
происходящее заводим переменную Time и
00:05:08
кладем в неё результат вот такой функции
00:05:10
клок эта функция дает нам так называемые
00:05:13
процессорное время затраченное на
00:05:15
программу оно измеряется в тиках Поэтому
00:05:17
если мы хотим узнать это время в
00:05:19
секундах то надо разделить это число на
00:05:21
вшитую постоянную клок
00:05:23
теперь вначале цикла будем проверять
00:05:26
разницу между текущим и защищенным
00:05:28
временем пишем вызов функции Clock и
00:05:31
вычитаем из него временную отметку
00:05:32
сделанную ранее мы получили процессорное
00:05:35
время от момента засечение до текущего
00:05:37
Давайте поделим это число на Clock
00:05:39
persec и потребуем чтобы полученное
00:05:41
число было больше либо равно единице
00:05:45
и только тогда разрешаем чтобы игра
00:05:47
игралась иначе этот блок условия будет
00:05:50
пропускаться пока не будет выполнено
00:05:51
условия когда условия выполнятся надо
00:05:54
опять сделать временную отметку то есть
00:05:56
Положи текущее значение клок в
00:05:58
переменную тайну Короче говоря разрешаем
00:06:00
заходить в цикл Только один раз в
00:06:02
секунду Давайте теперь запустим игру
00:06:04
опять
00:06:08
Ага видим что змейка уходит за границу и
00:06:12
потом обращаются куда-то в ней карт
00:06:14
Давайте реализуем окно гейм овера Итак
00:06:18
если голова змейки оказывается на месте
00:06:20
решетки то переменная из ранена должна
00:06:23
стать false и далее выводится счёт так и
00:06:25
пишем если позиция головы по X равна
00:06:28
нулю или позиция по Y равна нулю или
00:06:32
позиция головы по X равна ширине минус 2
00:06:35
так как там символ новой строки не
00:06:38
забываем или позиция головы по Y равна
00:06:42
высоте минус 1 тогда присваиваем из
00:06:45
ранен false Давайте проверим что игра
00:06:47
будет закрываться при столкновении
00:06:49
змейки со стенкой
00:06:52
[музыка]
00:06:54
Отлично Теперь вне игрового цикла
00:06:57
напишем перенос курсора консоли в
00:06:59
середину и вывода счета на экран
00:07:01
например как-то Так давайте запустим и
00:07:04
посмотрим что все работает а и для
00:07:06
скорости проверки поставим период цикла
00:07:08
0,3
00:07:11
видим что дальше пишется все равно
00:07:13
какая-то чепуха поэтому добавим перенос
00:07:16
курсора за карту вот так вот отлично но
00:07:19
мы все еще не можем управлять змейкой
00:07:21
так но как считывать клавиши обычно
00:07:25
ответ на такой вопрос для любой
00:07:27
библиотеки за 2 секунды находится в
00:07:28
Гугле в случае Windows мы грубо говоря
00:07:31
получаем набор бит для конкретного
00:07:33
символа на клавиатуре и проверяем Имеет
00:07:35
ли место его нажатия Одиночный имперсант
00:07:37
означает побитого и проверяем например
00:07:41
букву а при нажатии мы меняем
00:07:43
направление змейки на Left Аналогично
00:07:46
для остальных кнопок ВСД Давайте
00:07:48
запустим и проверим что все работает
00:07:51
отлично но как вы наверное знаете если
00:07:54
змейка ползет вверх то она не может
00:07:57
резко ползти вниз поэтому надо добавить
00:07:59
эти условия движения
00:08:02
замечательно дело за малым Если вы
00:08:05
досмотрели До этого момента то вы на
00:08:07
финишной прямой А если еще и все поняли
00:08:09
то это вообще круто Теперь надо добавить
00:08:11
еду Давайте создадим две переменные для
00:08:13
хранения позиций еды по X и py и
00:08:17
рандомно определим ей изначальную
00:08:18
позицию на поле А ну еще надо символы
00:08:21
еды конечно добавить Давайте поподробнее
00:08:24
рассмотрим эту конструкцию функция ранд
00:08:26
возвращает случайное число из
00:08:28
равномерного распределения на отрезки от
00:08:30
0 до что-то там около 30 тысяч далее мы
00:08:35
усекаем это число на отрезок от 0 до
00:08:37
нужной нам ширины поля и прибавляем к
00:08:40
этому единицу так как 0 это позиция края
00:08:43
доски но нам это не надо чтобы проверить
00:08:45
что все работает добавляем нашу еду на
00:08:48
экран перед отрисовкой змейки вот так
00:08:50
запускаем чтобы посмотреть что все
00:08:52
работает
00:08:53
Отлично Теперь давайте каждый кадр мы
00:08:56
будем проверять совпадают ли координаты
00:08:57
головы змейки и позиции еды Если да то
00:09:00
увеличиваем длину змейки на 1 и
00:09:02
присваиваем еде рандомную позицию на
00:09:05
карте тем же способом за счет движения
00:09:07
змейки мы уже позаботились Поэтому вроде
00:09:09
как все должно запуститься и работать
00:09:11
проверяю
00:09:14
Все работает но Как видим змейка может
00:09:17
иметь самопересечение а это должно
00:09:19
приводить к концу игры поэтому каждый
00:09:21
кадр нам надо проверять не совпадает ли
00:09:23
координата головы с какой-нибудь
00:09:25
координацией другой части тела для этого
00:09:28
напишем цикл Да напомню что каждый
00:09:30
возникающую проблему полезно Попробуйте
00:09:32
решить самостоятельно а уже потом
00:09:34
смотреть ответ цикл должен проходить
00:09:36
Каждый элемент и сравнивать его
00:09:38
координаты с координатой головы пишем и
00:09:41
будет меняться нет нуля а от единицы так
00:09:44
как нулевой элемент это сама голова
00:09:45
из-за длины змейки
00:09:47
а в цикле пишем нашу проверку если
00:09:50
позиция головы совпадает с какой-то еще
00:09:52
частью тела то присваиваем переменные из
00:09:54
ранен fals и делаем и равный Снейк клен
00:09:57
чтобы цикл остановился проверим что все
00:10:00
работает пособираем немного пищи и да
00:10:03
дюймовер своего дома очков но все мы
00:10:06
выполнили наше ТЗ на сегодня в
00:10:08
дальнейшем будем изучать больше
00:10:10
инструментов и дорабатывать нашу игру на
00:10:12
этом У меня сегодня все задавайте ваши
00:10:14
вопросы в комментарии ну а мы в свою
00:10:16
очередь будем разъяснять в следующих
00:10:18
роликах Спасибо за просмотр Надеюсь
00:10:20
видео вам было полезно
00:10:23
обычно ответ на такой вопрос для любого

Описание:

Написали змейку, используя пройденные средства Поддержать: https://boosty.to/somestudentchannel/donate Плейлист со всеми уроками: https://www.youtube.com/playlist?list=PLxMF5eCe_8DV49bHfdTBCFG7iuqOwewux Music: Lawrence - TrackTribe

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "ЗМЕЙКА НА C++ — ПРАКТИКА #1"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "ЗМЕЙКА НА C++ — ПРАКТИКА #1" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "ЗМЕЙКА НА C++ — ПРАКТИКА #1"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "ЗМЕЙКА НА C++ — ПРАКТИКА #1" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "ЗМЕЙКА НА C++ — ПРАКТИКА #1"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "ЗМЕЙКА НА C++ — ПРАКТИКА #1"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.