- Вложения
-
- 8R6Haw2FkUc.jpg
- (66.35 КБ) 594 скачивания
Светодиодная змейка
- Сообщения: 2
- Зарегистрирован: Ср июл 18, 2018 20:20:49
Доброго времени суток! Требуется помощь в реализации змейки, не знаю в каком направлении двигаться. Есть матрица из светодиодов 4х8 нужно чтоб по её периметру зажигались светодиоды. Как бы бегающая змейка по периметру. Надеюсь на помощь!

- Реклама
- Сообщения: 1492
- Зарегистрирован: Ср июн 25, 2008 15:19:44
В лоб: составляете таблицу из "кадров" и по таймеру выводите.
Не в лоб: конечный автомат, массив состояния всех светодиодов, задаёте начальное состояние, сдвиг, пока не дойдёт, задаёте следующее состояние, опять сдвиг.
На каком языке пишете программы?
Не в лоб: конечный автомат, массив состояния всех светодиодов, задаёте начальное состояние, сдвиг, пока не дойдёт, задаёте следующее состояние, опять сдвиг.
На каком языке пишете программы?
- Сообщения: 2
- Зарегистрирован: Ср июл 18, 2018 20:20:49
Пишу на AVR Си. Немножко не понял про конечный автомат. Вот допустим пошла змейка по первому порту 0х00000111, 0х000001110, 0х00011100 ... 0х11100000 вот она дошла до низу дальше должна по сути повернуть вправо, как видно по таблице требуется задействовать сразу несколько портов а не один. В дальнейшем нужно будет ещё кнопки приделать , одна кнопка ускоряет другая замедляет третья меняет направление.
абстрагируйтесь от байтов, представьте себе ваш "экранчик", как двумерный массив точек.
напишите функцию, которая этот двумерный массив выведет на реальные порты/светодиоды (вот в ней надо будет мозговать с битами и портами).
также создайте функцию, которая рисует точку в этом массиве (в ней тоже придется с битами и байтами мудрить, для 32 точек можно и без битов, только байтами обойтись).
а потом работайте только с массивом при помощи этой функции: нарисовали в массиве змейку по точкам в массиве - вызвали функцию вывода - проанализировали кнопки - рассчитали новое положение змейки - нарисовали змейку по точкам в массиве... и так все время
автомат тут не первостепенное
напишите функцию, которая этот двумерный массив выведет на реальные порты/светодиоды (вот в ней надо будет мозговать с битами и портами).
также создайте функцию, которая рисует точку в этом массиве (в ней тоже придется с битами и байтами мудрить, для 32 точек можно и без битов, только байтами обойтись).
а потом работайте только с массивом при помощи этой функции: нарисовали в массиве змейку по точкам в массиве - вызвали функцию вывода - проанализировали кнопки - рассчитали новое положение змейки - нарисовали змейку по точкам в массиве... и так все время
автомат тут не первостепенное
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Делаете класс ТОЧКА с координатами X,Y и методом Зажечь/Потушить.
Делаете связный список из объектов класса ТОЧКА.
При добавлении элемента в список вызываете метод Зажечь.
Движение заключается в том, что последний элемент списка переносится из хвоста в голову. При этом сначала вызывается метод потушить, а потом задаются новые координаты и метод Зажечь. Новые координаты при перемещении вычисляются из координат первого элемента списка и нажатой кнопки.
Всё
Делаете связный список из объектов класса ТОЧКА.
При добавлении элемента в список вызываете метод Зажечь.
Движение заключается в том, что последний элемент списка переносится из хвоста в голову. При этом сначала вызывается метод потушить, а потом задаются новые координаты и метод Зажечь. Новые координаты при перемещении вычисляются из координат первого элемента списка и нажатой кнопки.
Всё
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="VladislavS",url="/forum/viewtopic.php?p=3422144#p3422144"]Делаете связный список из объектов класса ТОЧКА.[/uquote]
Зачем там связный список, достаточно кольцевого буфера, а для змейки бегающей по периметру хватит и обычного массива во флеше.
Зачем там связный список, достаточно кольцевого буфера, а для змейки бегающей по периметру хватит и обычного массива во флеше.
Да и на счёт кольцевого буфера сомнения... Достаточно знать координаты двух точек: начала и конца.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Это сегодня змейка по периметру бегает, а завтра начнутся зигзаги и изменения длины. Лучше изначально сделать "на вырост". Каждый начинающий программист просто обязан написать свой связный список с шашками и стюардессами. Что, уже и постебаться нельзя? 
Методы, классы...
Буфер матрицы точек и добавляем алгоритм перемещения.
Хоть "покадрово".
(правда то на ассемблере
)

Буфер матрицы точек и добавляем алгоритм перемещения.
Хоть "покадрово".
(правда то на ассемблере
если взять какой-нибудь AVR или PIC, то со связным списком будут проблемы: там и простой массив не всякий влезает.VladislavS писал(а):Каждый начинающий программист просто обязан написать свой связный список с шашками и стюардессами.
кстати, змейку я так и не сделал ни разу в своей жизни... тряхнуть, что ли, стариной?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


