Сделать змейку с помощью лед панели

Собираем змейку на Arduino

Это будет самая необычная змейка, в которую вы играли.

Змейка — очень благодатная тема для программистов, и вот почему:

  • понятные и простые правила,
  • минимум логики, которую нужно запрограммировать,
  • примитивная графика,
  • простое управление,
  • море кайфа.

У нас уже был разбор того, как в неё играет искусственный интеллект, и статья о том, как за 10 минут сделать змейку для браузера. Теперь шагнём дальше и не только напишем код, но и соберём железо. Результат — ваша собственная змейка на микропроцессорной плате, с экраном.

Что понадобится

Есть много вариантов платформы Adruino, но нам нужна одна из самых простых — микросхема на плате с ножками для монтажа в специальную плату. Обратите внимание: при покупке вам нужно указать, что хотите плату с уже припаянными ногами (soldered headers / soldered pins). Иначе придётся паять ноги на плату, а смысл был в том, чтобы не паять.

Примерно вот так мы соединим между собой все элементы на плате.

По ней и будет бегать наша змейка. Можно, конечно, использовать ЖК-матрицы, чтобы картинка была получше, но они стоят дороже и программировать их сложнее.

Обычный переменный резистор на 10 кОм. Суть этих устройств в том, что, вращая регулятор, мы можем изменять сопротивление резистора. В нашем проекте он будет отвечать за скорость движения змейки. Если она двигается слишком быстро — крутите ручку и змейка замедлится.

Работает так же, как на обычной приставке. Им мы будем управлять змейкой.

Самый кайф этого проекта в том, что нам не придётся паять, чтобы собрать все модули вместе. Вместо этого используем провода с разными разъёмами, поэтому лучше сразу заказать полный комплект.

Загружаем код игры

Мы сейчас не будем разбирать особенности программирования под Arduino, а вместо этого сразу дадим готовый скетч. Скетч — это программа для Arduino, которая написана на C++ и которую сохранили как файл с расширением .ino.

Чтобы загрузить код игры в микроконтроллер, вам понадобится:

  1. Сохранить программу в виде .ino-файла.
  2. Подключить плату к компьютеру с помощью USB-кабеля.
  3. Установить Arduino IDE — среду разработки под Arduino для компьютера.
  4. Настроить компьютер для работы с платой. Нужно поставить драйверы для контроллера и убедиться, что компьютер всё распознал верно. Чтобы понять, как это правильно сделать, поищите в интернете «Как подключить arduino nano к компьютеру» или почитайте эту статью (не нашу).
  5. Открыть в Arduino IDE наш файл с программой.
  6. Там же нажать кнопку «Загрузить».
  7. Подождать сообщения о том, что программа загружена.

Собираем и запускаем

Главное на этом этапе — не спешить и делать всё по картинке. Чтобы подключить провода к Arduino, нужно вставить его в центр белой пластиковой монтажной платы и подключить нужные провода рядом с нужными входами. «Рядом» — то есть на том же, грубо говоря, столбце: дырки на монтажной плате соединены как бы поперёк платы, то есть все провода, которые вы воткнёте в один столбец, будут соединены.

Если всё равно непонятно, что и куда подключать, посмотрите видео:

Чтобы игра заработала после сборки, достаточно подключить плату к любому блоку питания или компьютеру.

Источник

Своя змейка, или пишем первый проект. Часть 0

Предисловие

Привет Хабр! Меня зовут Евгений «Nage», и я начал заниматься программированием около года назад, в свободное от работы время. Просмотрев множество различных туториалов по программированию задаешься вопросом «а что же делать дальше?», ведь в основном все рассказывают про самые основы и дальше как правило не заходят. Вот после продолжительного времени за просмотром разных роликов про одно и тоже я решил что стоит двигаться дальше, и браться за первый проект. И так, сейчас мы разберем как можно написать игру «Змейка» в консоли со своими начальными знаниями.

Глава 1. Итак, с чего начнем?

Для начала нам ничего лишнего не понадобится, только блокнот (или ваш любимый редактор), и компилятор C#, он присутствует по умолчанию в Windows, находится он в С:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe. Можно использовать компилятор последней версии который поставляется с visual studio, он находится Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.exe.

Создадим файл для быстрой компиляции нашего кода, сохранил файл с расширением .bat со следующим содержимым:

«@echo off» отключает отображение команд в консоли. С помощью команды goto получаем бесконечный цикл. Задаем переменную name, а с модификатором /p в переменную записывается значение введенное пользователем в консоль. «echo.» просто оставляет пустую строчку в консоли. Далее вызываем компилятор и передаем ему файл нашего кода, который он скомпилирует.

Таким способом мы можем скомпилировать только один файл, поэтому мы будем писать все классы в одном документе (я не разобрался еще как компилировать несколько файлов в один .exe через консоль, да и это не тема нашей статьи, может кто нибудь расскажет в комментариях).

Для тех кто сразу хочет увидеть весь код.

Глава 2. Первые шаги

Подготовим поле нашей игры, начиная с точки входа в нашу программу. Задаем переменные X и Y, размер и буфер окна консоли, и скроем отображение курсора.

Для вывода на экран нашей «графики» создадим свой тип данных — точка. Он будет содержать координаты и символ, который будет выводится на экран. Также сделаем методы для вывода на экран точки и ее «стирания».

Это интересно!
Оператор => называется лямбда-оператор, он используется в качестве определения анонимных лямбда выражений, и в качестве тела, состоящего из одного выражения, синтаксический сахар, заменяющий оператор return. Приведенный выше метод переопределения оператора (про его назначение чуть ниже) можно переписать так:

Создадим класс стен, границы игрового поля. Напишем 2 метода на создание вертикальных и горизонтальных линий, и в конструкторе вызываем отрисовку всех 4х сторон заданным символом. Список всех точек в стенке нам пригодится позже.

Как вы могли заметить для инициализации типа данных Point используется форма Point p = (x, y, ch); как и у встроенных типов, это становится возможным при переопределении оператора implicit, в котором описывается как задаются переменные.

Конструкция (int, int, char) называется кортежем, и работает только с .net 4.7+, по этому если у вас не установлен visual studio, то в вашем распоряжении только компилятор v4.0.30319 и нужно использовать стандартную инициализацию через оператор new.

Вернемся к классу Game и объявим поле walls, а в методе Main инициализируем ее.

Все! Можно скомпилировать код и посмотреть, что наше поле построилось, и самая легкая часть позади.

Глава 3. А что сегодня на завтрак?

Добавим генерацию еды на нашем поле, для этого создадим класс FoodFactory, который и будет заниматься созданием еды внутри границ.

Добавляем инициализацию фабрики и создадим еду на поле

Глава 4. Время главного героя

Перейдем к созданию самой змеи, и для начала определим перечисление направления движения змейки.

Теперь можем создать класс змейки, где опишем как она будет ползать, поворачивать. Определим список точек змеи, наше перечисление, шаг на сколько будет перемещаться за ход, и ссылки на хвостовую и головную точки, и конструктор, в котором рисуем змею в заданных координатах и заданной длинны при старте игры.

В методе поворота, что бы избежать возможности повернуть сразу на 180 градусов, просто указываем, что в каждом направлении мы можем повернуть только в 2 стороны. А проблему поворота на 180 градусов двумя нажатиями — поставив «переключатель», отключаем возможность поворачивать после первого нажатия, и включаем после очередного хода.

Осталось вывести ее на экран.

Готово! теперь у нас есть все что нужно, поле огороженное стенами, рандомно появляющаяся еда, и змейка. Пришла пора заставить все это взаимодействовать друг с другом.

Глава 5. Л-логика

Заставим нашу змейку двигаться, напишем бесконечный цикл для считывания клавиш нажатых на клавиатуре, и передаем клавишу в метод поворота змеи

для движения змеи воспользуемся классом .net который будет запускать метод Loop через определенные промежутки времени.

Теперь, перед тем как написать метод движения змейки, надо реализовать взаимодействие головы с едой, стенками и хвостом змеи. Для этого надо написать метод, позволяющий сравнивать две точки на совпадение координат. Переопределим оператор равенства и не равенства, их обязательно нужно переопределять в паре.

Теперь можно написать метод, который будет проверять совпадает ли интересующая нас точка с какой нибудь из массива стен.

И похожий метод проверяющий не совпадает ли точка с хвостом.

И методом проверки съела ли еду наша змейка, и сразу делаем ее длиннее.

теперь можно написать метод движения, со всеми нужными проверками.

Вот и все! Наша змейка в консоли закончена и можно поиграть.

Заключение

Мы посмотрели как можно реализовать первую простенькую игру с небольшим использованием ООП, научились перегружать операторы, посмотрели на кортежи и лямбда оператор, надеюсь это было полезно!

Это была пилотная статья, и если вам понравилось, я напишу про реализацию змейки на Unity.
Всем удачи!

Источник

Игра змейка. Проекты. Ардуино

Привет. в прошлый раз мы начали программировать змейку. Мы используем светодиодную матрицу и джойстик для управления. Сегодня допишем код, чтобы у нас получилась настоящая игра змейка.

В предыдущей статье мы уже начали писать программу для игры. Посмотрите тот пост, если пропустили или уже забыли. Сегодня мы допишем программу, чтобы получить настоящую игру.

Для того, чтобы выполнить этот проект нам понадобиться

  • Ардуино UNO
  • Перемычки
  • Макетная плата
  • Светодиодная матрица
  • Резистор 220 Ом
  • Джойстик
  • Кабель USB

Игра змейка

Мы уже можем управлять змейкой с помощью джойстика и переходить через границы матрицы. Но, чтобы это была настоящая игра, нужно добавить еще несколько моментов.

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

Во-вторых мы должны создать еду, проверять, не съели ли ее. И создавать новую.

И в-третьих, нужно создать условия проигрыша. Иначе какая это будет игра.

Несколько секций змейки

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

Для этого заведем специальный массив. В нем будут храниться координаты каждой секции змейки. Максимальный размер змеи будет равен размеру матрицы, поэтому сразу зарезервируем 256 элементов. Также создадим переменную для реального размера змейки в текущий момент. И текущую скорость.

В начале игры, все элементы змеи, кроме ее реального размера, должны быть пустыми. А несколько элементов должны быть рядом со стартовой позицией. Инициализируем это следующим образом.

Теперь в функции перемещения змейки мы должны нарисовать все элементы, но убрать лишние при движении вперед. Для этого 0 элементу присвоим новое значение из функции Snakedirection, а последующим элементам присвоим значения предыдущих элементов.

Таким образом, в нашей змейке появилось три секции. И при движении они перемещаются по матрице. А при смене направления движения джойстиком, весь маршрут сохраняется и прорисовывается на матрице.

Движение с сохранением координат

Теперь создадим что-нибудь съедобное. Чтобы змея могла съесть и вырасти. В переменную f запишем координаты точки с едой. Она будет генерироваться случайно.

И напишем небольшую функцию. Она будет проверять, съедена ли еда. И создавать новую.

Если точка съедена, вы увеличим размер змейки, увеличим скорость и создадим новую точку со случайными координатами. Также перекрасим змейку в цвета съеденной ранее еды.

Генерация еды и увеличение размера

Конец игры

Для определения конца игры напишем еще одну функцию. Она будет восстанавливать размер змейки, скорость, а также перекрашивать ее в красный цвет.

Таким образом мы будем понимать, что старая змейка умерла и нужно все начинать сначала. Конечно, вы можете изменить код и добавить текст или закрасить всю матрицу красным.

Теперь добавим условие, при котором считать игру законченной. Поскольку мы сделали границы матрицы прозрачными. То, запретим змейке пересекаться со своим собственным телом. Для этого в функцию прорисовки текущего шага добавим проверку.

Если координаты текущего шага уже есть в составе змейки, вызываем функцию death()

Конец игры

Мы не стали сбрасывать все цифры из массива snake, а значит после смерти несколько элементов останутся лежать на месте. Наезжать на них так же будет нельзя, ведь эти координаты находятся в составе змейки.

Полный текст программы

Заключение

Мы написали нашу первую игру для Ардуино. Конечно, в коде еще много возможностей для улучшения игры. И у вас в запасе еще 78% памяти Ардуино. Но это уже готовая классическая аркадная игра.

Источник

Читайте также:  Вячеслав бутусов мокрый снег падал
Оцените статью