Оглавление:
- Запасы
- Шаг 1: основной цикл
- Шаг 2: джойстик
- Шаг 3: Показать буфер
- Шаг 4: захватчики, пули и игрок
- Шаг 5: сделайте это по-своему
Видео: Space Invaders в Micropython на Micro: bit: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
В наших предыдущих статьях мы исследовали создание игр на GameGo, портативной игровой консоли в стиле ретро, разработанной TinkerGen education. Созданные нами игры напоминали старые игры Nintendo. В сегодняшней статье мы сделаем шаг назад, в золотой век аркадных игр. Мы воссоздадим игру Space Invaders в Micropython на микроконтроллере Micro: bit, а также будем использовать расширение BitPlayer Micro: bit, которое позволяет нам играть в игру более удобно.
Поскольку это руководство посвящено кодированию игры на Micropython, вместо традиционной поэтапной последовательности, которую мы использовали ранее для учебных пособий по графическому программированию, мы собираемся пройти по блоку кода, пройдя по важным функциям, классам и основным петля. Вы можете загрузить полный код в репозитории GitHub этого проекта. Пристегнитесь и начнем!
Запасы
TinkerGen BitPlayer
BBC Micro: бит
Шаг 1: основной цикл
В этом уроке я буду часто использовать слово «метод». Метод в python чем-то похож на функцию, за исключением того, что он связан с объектом / классами. Итак, для упрощения вы можете прочитать это как «функция внутри класса». Вы можете узнать больше о методах здесь.
Входим в основной цикл с
пока не game_over:
состояние. Внутри мы получаем количество захватчиков, вероятность их появления и количество необходимое для перехода на следующий уровень из словаря уровней. Затем мы проверяем движение влево-вправо с помощью методов экземпляра Listen_Dir экземпляра класса JoyStick. Если одно из условий оценивается как True, мы увеличиваем / уменьшаем x-значение нашего игрового персонажа. Мы ограничиваем его до [-2, 2] двумя условиями if. Затем мы инициализируем экземпляр класса DisplayBuffer и проверяем нажатия кнопок «щит» или «пуля». Мы используем метод DisplayBuffer.set () для установки объектов для последующего рендеринга. Для рендеринга щита мы используем DisplayBuffer.set () напрямую, но для пуль и захватчиков мы добавляем их в соответствующий список и устанавливаем () их один за другим в цикле for со следующим кодом для последующего рендеринга с помощью DispBuffer.render ():
для b в маркерах: b.render (dispBuf) для v в vaders: v.render (dispBuf)
Все захватчики, пули и щит отображаются на дисплее один раз на каждой итерации основного цикла с
dispBuf.render ()
Перед завершением основного цикла мы проверяем, достигли ли какие-либо пули захватчиков конца экрана, и, если это так, мы удаляем их из соответствующих списков.
Шаг 2: джойстик
BitPlayer легко держать и использовать, с двухосевым джойстиком, таким как контроллеры Gameboy или PSP, он также включает в себя еще 6 программируемых кнопок, обозначенных как L, R, A, B, C и D. Для полного погружения и интерактивности BitPlayer сам оснащен зуммером, вибромотором и портом Grove I2C для подключения дополнительных периферийных устройств, таких как OLED-дисплей.
Мы используем только левый-правый переключатель джойстика для этой игры, для полного примера использования всех кнопок BitPlayer вы можете взглянуть на joystick_example.py в репозитории GitHub этого проекта. При создании экземпляра класса JoyStick мы проверяем чтение по оси X по умолчанию и сохраняем это значение в self. Read_X. Затем в функции Listen_Dir мы проверяем, превышает ли отклонение от этого значения по умолчанию значение переменной чувствительности (попробуйте настроить его самостоятельно, если вы чувствуете, что JoyStick слишком чувствителен), и возвращаем True или False в соответствии с обнаруженным направлением.
Давайте посмотрим на конкретный пример того, как это работает:
Скажем, наше значение по оси X по умолчанию равно 0. Затем, если мы переместим джойстик вправо:
New_X = JoyStick_X.read_analog () # New_X = 200
Right = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
Затем, когда мы проверяем направление:
Precision = 150if Right> Precision: # 200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: # -200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: вернуть True иначе: вернуть False
Шаг 3: Показать буфер
Класс DisplayBuf отвечает за управление светодиодным экраном. Это делается с помощью двух методов: set () и render (). set () изменяет значения, соответствующие пикселям светодиодного экрана. Как вы помните, пиксели на экране Micro: bit LED могут быть представлены в виде строки или списка - «00000: 00000: 00000: 00000: 00000» - это пустой экран. «00000: 00000: 00000: 00000: 00100» - это экран с тускло освещенным пикселем в центре нижнего ряда.
00000:
00000
:00000
:00000:
00100"
Это обозначение может быть проще обработать:)
Итак, во время основного цикла мы вызываем метод set () DisplayBuf, чтобы установить все наши объекты, которые должны отображаться на экране. Затем мы используем метод render (), чтобы отображать их все на экране одновременно.
Шаг 4: захватчики, пули и игрок
Bullets и Invaders относятся к классу Mover. Экземпляры класса Mover имеют свои координаты x, y и скорость, а также яркость. Класс Mover имеет два метода экземпляра: set () и move (). set () просто вызывает метод DisplayBuf set () с обновленными координатами для сохранения для последующего рендеринга на светодиодной матрице. Метод move () обновляет координату экземпляра в соответствии со скоростью экземпляра - это пригодится позже, когда нам нужно изменить скорость захватчиков по мере прохождения уровней.
Класс Bullet и класс Invader являются подклассами класса Mover. Здесь мы используем так называемое наследование. Функциональность super () позволяет нам вызывать методы суперкласса в подклассе без необходимости повторять код.
Шаг 5: сделайте это по-своему
Поздравляю! Вы только что воссоздали классическую игру Space Invaders на Micro: bit с помощью крутого игрового оборудования. Конечно, отсюда вы можете улучшить код игры - например, на данный момент в игре только один уровень - вы можете добавить более сложные. Кроме того, как вы помните, в оригинальной игре перед игроком плавают камни, которые вы также можете добавить.
Если вы делаете улучшенную версию игры, поделитесь ею в комментариях ниже! Для получения дополнительной информации о BitPlayer и другом оборудовании для производителей и преподавателей STEM посетите наш веб-сайт https://tinkergen.com/ и подпишитесь на нашу новостную рассылку.
TinkerGen недавно создал кампанию на Kickstarter для MARK (Make A Robot Kit), набора роботов для обучения программированию, робототехнике и искусственному интеллекту!
Исходный код Micropython из hexkcd / micro-vaders был изменен для работы с TinkerGen BitPlayer.
Рекомендуемые:
Портативная игровая консоль Lego с Space Invaders: 4 шага
Портативная игровая консоль Lego с Space Invaders: вы когда-нибудь думали о том, чтобы стать разработчиком игр и создать собственную игровую консоль, в которую можно играть на ходу? Все, что вам нужно, это немного времени, оборудование Lego bricksa Mini-Calliope (можно заказать на этом сайте https://calliope.cc/en) и некоторые навыки
LCD Invaders: Space Invaders Like Game на символьном ЖК-дисплее 16x2: 7 шагов
LCD Invaders: Space Invaders Like Game на символьном ЖК-дисплее 16x2: нет необходимости представлять легендарную игру «Space Invaders». Самая интересная особенность этого проекта заключается в том, что он использует отображение текста для графического вывода. Это достигается за счет реализации 8 пользовательских символов. Вы можете загрузить полную версию Arduino
Программирование Micro: Bit Robot & Joystick: Bit Controller с MicroPython: 11 шагов
Программирование Micro: Bit Robot & Joystick: Bit Controller с помощью MicroPython: для Robocamp 2019, нашего летнего лагеря робототехники, молодые люди в возрасте 10-13 лет паяют, программируют и строят «робота-противовеса» BBC на основе micro: bit, а также занимаются программированием. Micro: bit для использования в качестве пульта дистанционного управления. Если вы сейчас находитесь в Robocamp, катайтесь на лыжах
Часы Space Invaders (при ограниченном бюджете!): 6 шагов (с изображениями)
Часы Space Invaders (при ограниченном бюджете!): Недавно я увидел классную сборку от GeckoDiode и сразу захотел построить ее сам. Учебным пособием являются настольные часы Space Invaders, и я рекомендую вам взглянуть на них после прочтения этого. Проект был почти полностью построен из частей, полученных от поставщиков
Люстра Space Invaders со светящимся в темноте Экшен: 16 шагов (с изображениями)
Люстра Space Invaders со светящимся в темноте Экшен: используйте 3D-моделирование / печать, лазерную резку акрила, литье из смолы, УФ-реактивный пигмент, светодиоды и простую проводку, чтобы сделать люстру или лампу в стиле ретро и круто космических захватчиков. Я включил хороший трюк для создания изогнутых углов из лазерной