@DeletedUser40396890 (обс. | вклад) мНет описания правки |
Метка: Визуальный редактор |
||
(не показаны 3 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
− | Итак, [[OpenComputers/Робот|роботы]] [[OpenComputers/Шахта-тоннель|копают руду]], [[OpenComputers/Туториал: Автоматическая ферма|сеют пшеницу]] и [[OpenComputers/Робот-дровосек|рубят лес]] |
+ | Итак, [[OpenComputers/Робот|роботы]] [[OpenComputers/Шахта-тоннель|копают руду]], [[OpenComputers/Туториал: Автоматическая ферма|сеют пшеницу]] и [[OpenComputers/Робот-дровосек|рубят лес]]… Чего не хватает? Построим танцпол! |
Строка 6: | Строка 6: | ||
== Что потребуется? == |
== Что потребуется? == |
||
− | * [[OpenComputers/Корпус компьютера|Компьютер]]. Не имеет значения, какого уровня. Программа будет работать на любом. Но желательно, чтобы [[OpenComputers/Видеокарта|видеокарта]] была второго уровня или выше. Тогда танцпол будет цветным. Компьютер должен быть обеспечен энергией |
+ | * [[OpenComputers/Корпус компьютера|Компьютер]]. Не имеет значения, какого уровня. Программа будет работать на любом. Но желательно, чтобы [[OpenComputers/Видеокарта|видеокарта]] была второго уровня или выше. Тогда танцпол будет цветным. Компьютер должен быть обеспечен энергией и [[OpenComputers/Жёсткий диск|жёстким диском]]. |
− | * [[OpenComputers/Монитор|48 мониторов]]. Второго |
+ | * [[OpenComputers/Монитор|48 мониторов]]. Второго либо третьего уровня, т.к. мониторы первого уровня не посылают сигнал <code>walk</code>. |
* Другие материалы. Зависит от того, как вы захотите оформить танцпол. |
* Другие материалы. Зависит от того, как вы захотите оформить танцпол. |
||
== Устройство == |
== Устройство == |
||
− | Выберем место для танцпола. Прямоугольное отверстие в полу размерами 8×6 блоков замостим мониторами. Обратите внимание на полупрозрачную белую стрелку, которая показывает |
+ | Выберем место для танцпола. Прямоугольное отверстие в полу размерами 8×6 блоков замостим мониторами. Обратите внимание на полупрозрачную белую стрелку, которая показывает «верх» будущего мультиблочного экрана, когда вы держите в руках монитор. Если вы все сделаете правильно, мониторы объединятся в один. |
Строка 21: | Строка 21: | ||
+ | |||
− | Теперь запустите компьютер. Если |
+ | Теперь запустите компьютер. Если Вы запускаете его в первый раз, то получите такое сообщение: |
Строка 29: | Строка 30: | ||
Она означает, что компьютер не может найти операционную систему. |
Она означает, что компьютер не может найти операционную систему. |
||
− | Вставьте в компьютер (или [[OpenComputers/Дисковод|дисковод]]) [[OpenComputers/Дискета|дискету]] с операционной системой OpenOS. Введите команду <code>install</code>. Затем укажите |
+ | Вставьте в компьютер (или [[OpenComputers/Дисковод|дисковод]]) [[OpenComputers/Дискета|дискету]] с операционной системой OpenOS. Введите команду <code>install</code>. Затем укажите жёсткий диск компьютера в списке (скорее всего, он там будет один) и дождитесь окончания установки (на слабом компьютере — чуть дольше, на мощном — быстрее). Согласитесь на перезагрузку компьютера и выньте дискету. |
Строка 40: | Строка 41: | ||
− | Теперь введите команду <code>edit dancefloor.lua</code>. В |
+ | Теперь введите команду <code>edit dancefloor.lua</code>. В текущей директории будет создан новый файл <code>dancefloor.lua</code>. |
== Программирование == |
== Программирование == |
||
− | Вы можете перепечатать этот код вручную и сохранить, либо скопировать его и вставить ( |
+ | Вы можете перепечатать этот код вручную и сохранить, либо скопировать его и вставить ({{Кнопка|Insert}} в игровом редакторе кода). |
− | И наконец, |
+ | И наконец (только в одиночной игре), Вы можете открыть (свернув игру на время, выключив компьютер и поместив винчестер в инвентарь) папку <code>\.minecraft\saves\<Название вашего мира>\opencomputers\<Адрес винчестера>\</code>. Там находится только что созданный файл <code>dancefloor.lua</code>. Вы можете открыть его любым редактором и вставить текст программы. |
Строка 143: | Строка 144: | ||
В первой части программы расположены функции, которые вызывает главный цикл. |
В первой части программы расположены функции, которые вызывает главный цикл. |
||
− | Функция <code>draw()</code> отвечает за рисование |
+ | Функция <code>draw()</code> отвечает за рисование «кадра» на полу. Она перебирает список всех созданных колец, и рисует те их части, которые не выходят за пределы экрана. Затем радиус каждого кольца увеличивается, а самые большие удаляются из списка. |
− | Небольшая функция <code>rgb2hex(r, g, b)</code> отвечает за преобразование трех переменных RGB цвета (red, green и blue) в константу для функции <code>setBackground</code>. Эта функция требует задавать цвет в шестнадцатеричном формате <code>0xRRGGBB</code>. Однако, мы можем передать ей соответствующее десятичное значение. Это значение легко получить по формуле <code>r*65536+g*256+b</code>. |
+ | Небольшая функция <code>rgb2hex(r, g, b)</code> отвечает за преобразование трех переменных RGB цвета (red, green и blue) в константу для функции <code>setBackground</code>. Эта функция требует задавать цвет в шестнадцатеричном формате <code>0xRRGGBB</code>. Однако, мы можем передать ей соответствующее десятичное значение. Это значение легко получить по формуле <code>r*65536+g*256+b</code>. |
''Примечание'': интерфейс [[OpenComputers/Colors API|Colors API]] не содержит необходимых функций и хранит цвета в другом формате. Он больше подходит для работы с разноцветными проводами из других модификаций. |
''Примечание'': интерфейс [[OpenComputers/Colors API|Colors API]] не содержит необходимых функций и хранит цвета в другом формате. Он больше подходит для работы с разноцветными проводами из других модификаций. |
||
Строка 154: | Строка 155: | ||
− | В начале программы мы устанавливаем разрешение экрана (ШИРИНА*2, ВЫСОТА). |
+ | В начале программы мы устанавливаем разрешение экрана (ШИРИНА*2, ВЫСОТА). Так как мы будем рисовать на полу крупные клетки, большое разрешение не требуется. Для ускорения работы программы, и уменьшения энергопотребления будет достаточно разрешения равного количеству блоков мониторов. |
− | Однако символьные |
+ | Однако символьные «пиксели» монитора вытянуты по вертикали (приблизительно 1 к 2-м). Поэтому разрешение по ширине будет равно ШИРИНА*2. |
Строка 166: | Строка 167: | ||
== Итоги == |
== Итоги == |
||
− | |||
[[Файл:Dancefloor 4 (OpenComputers).png|800px]] |
[[Файл:Dancefloor 4 (OpenComputers).png|800px]] |
||
Строка 174: | Строка 174: | ||
== Материалы == |
== Материалы == |
||
− | * [[OpenComputers/Component API|Component API |
+ | * [[OpenComputers/Component API|Component API — работа с компонентами]] (см. также [[OpenComputers/Сигналы|Сигналы]]) |
− | * [[OpenComputers/Event API|Event API |
+ | * [[OpenComputers/Event API|Event API — обработка событий и сигналов]] |
− | * [[OpenComputers/GPU API|GPU API |
+ | * [[OpenComputers/GPU API|GPU API — работа с видеокартой]] |
− | [[Категория:OpenComputers/ |
+ | [[Категория:OpenComputers/Туториалы]] |
{{OpenComputers}} |
{{OpenComputers}} |
Текущая версия от 09:10, 12 января 2020
Итак, роботы копают руду, сеют пшеницу и рубят лес… Чего не хватает? Построим танцпол!
Танцпол будет состоять из цветных плиток и реагировать на касание. Он будет иметь размеры 8×6 блоков (максимальный размер мультиблочного экрана по умолчанию). Но его легко увеличить, если изменить ограничения в файле конфигурации.
Что потребуется?
- Компьютер. Не имеет значения, какого уровня. Программа будет работать на любом. Но желательно, чтобы видеокарта была второго уровня или выше. Тогда танцпол будет цветным. Компьютер должен быть обеспечен энергией и жёстким диском.
- 48 мониторов. Второго либо третьего уровня, т.к. мониторы первого уровня не посылают сигнал
walk
. - Другие материалы. Зависит от того, как вы захотите оформить танцпол.
Устройство
Выберем место для танцпола. Прямоугольное отверстие в полу размерами 8×6 блоков замостим мониторами. Обратите внимание на полупрозрачную белую стрелку, которая показывает «верх» будущего мультиблочного экрана, когда вы держите в руках монитор. Если вы все сделаете правильно, мониторы объединятся в один.
Теперь подведите к монитору кабель, соединяющий его с компьютером. Компьютер удобно расположить этажом ниже, под танцполом. Прикрепите к нижней плоскости экрана клавиатуру.
Теперь запустите компьютер. Если Вы запускаете его в первый раз, то получите такое сообщение:
Она означает, что компьютер не может найти операционную систему.
Вставьте в компьютер (или дисковод) дискету с операционной системой OpenOS. Введите команду install
. Затем укажите жёсткий диск компьютера в списке (скорее всего, он там будет один) и дождитесь окончания установки (на слабом компьютере — чуть дольше, на мощном — быстрее). Согласитесь на перезагрузку компьютера и выньте дискету.
Теперь компьютер выдает стандартное приглашение системы.
Вы можете переименовать свой винчестер для удобства.
Теперь введите команду edit dancefloor.lua
. В текущей директории будет создан новый файл dancefloor.lua
.
Программирование
Вы можете перепечатать этот код вручную и сохранить, либо скопировать его и вставить (Insert в игровом редакторе кода).
И наконец (только в одиночной игре), Вы можете открыть (свернув игру на время, выключив компьютер и поместив винчестер в инвентарь) папку \.minecraft\saves\<Название вашего мира>\opencomputers\<Адрес винчестера>\
. Там находится только что созданный файл dancefloor.lua
. Вы можете открыть его любым редактором и вставить текст программы.
-- загружаем библиотеки и получаем прокси видеокарты local component = require("component") local event = require("event") local gpu = component.gpu -- константы — размер экрана WIDTH = 8 HEIGHT = 6 --============================ Ф У Н К Ц И И ==============================-- -- отрисовка кругов function draw() -- очищаем экран gpu.setBackground(0x000000) gpu.fill(1, 1, WIDTH*2, HEIGHT, " ") -- рисуем все круги for i=#circles, 1, -1 do local x = circles[i][1]+1 local y = circles[i][2]-circles[i][4]+2 gpu.setBackground(circles[i][3]) for c=1, (circles[i][4]-1)*4 do -- рисуется один "пиксель" круга if x>0 and x<=(WIDTH*2) then if y>0 and y<=HEIGHT then gpu.set((x-1)*2+1, y, " ") end end -- следующий "пиксель" круга if x>circles[i][1] then if y<circles[i][2] then x = x+1 else x = x-1 end y = y+1 else if y>circles[i][2] then x = x-1 else x = x+1 end y = y-1 end end -- обновление (круги увеличиваются в диаметре, если диаметр -- становится больше 8, круг удаляется) circles[i][4] = circles[i][4] + 1 if circles[i][4] > WIDTH then table.remove(circles, i) end end end -- функция, которая конвертирует цвет в формате RGB в соответствующее -- ему шестнадцатеричное значение function rgb2hex(r, g, b) return r*65536+g*256+b end --===========================================================================-- -- устанавливаем разрешение "танцпола" gpu.setResolution(WIDTH*2, HEIGHT) gpu.fill(1, 1, 16, 6, " ") -- таблица в которой будут храниться круги circles = {} -- главный цикл while true do -- обработка сигналов _, _, code, _, _ = event.pull(0.01, "key_down") _, _, x, y = event.pull(0.03, "walk") -- если получен сигнал walk создаем новый круг if x ~= nil then table.insert(circles, {x, y, rgb2hex(math.random(255), math.random(255), math.random(255)), 1}) end -- отрисовываем кадр draw() -- выход из программы, если была нажата кнопка Q if code == 113 then break end end -- возвращаем монитор к нормальному состоянию =) gpu.setBackground(0x000000) gpu.fill(1, 1, WIDTH*2, HEIGHT, " ") gpu.setResolution(gpu.maxResolution())
Разбор программы
В первой части программы расположены функции, которые вызывает главный цикл.
Функция draw()
отвечает за рисование «кадра» на полу. Она перебирает список всех созданных колец, и рисует те их части, которые не выходят за пределы экрана. Затем радиус каждого кольца увеличивается, а самые большие удаляются из списка.
Небольшая функция rgb2hex(r, g, b)
отвечает за преобразование трех переменных RGB цвета (red, green и blue) в константу для функции setBackground
. Эта функция требует задавать цвет в шестнадцатеричном формате 0xRRGGBB
. Однако, мы можем передать ей соответствующее десятичное значение. Это значение легко получить по формуле r*65536+g*256+b
.
Примечание: интерфейс Colors API не содержит необходимых функций и хранит цвета в другом формате. Он больше подходит для работы с разноцветными проводами из других модификаций.
В начале программы мы устанавливаем разрешение экрана (ШИРИНА*2, ВЫСОТА). Так как мы будем рисовать на полу крупные клетки, большое разрешение не требуется. Для ускорения работы программы, и уменьшения энергопотребления будет достаточно разрешения равного количеству блоков мониторов.
Однако символьные «пиксели» монитора вытянуты по вертикали (приблизительно 1 к 2-м). Поэтому разрешение по ширине будет равно ШИРИНА*2.
Сохраните программу и закройте редактор.
Все готово к запуску.
Введите команду dancefloor
и поднимайтесь наверх.
Итоги
Танцпол откликается на касания, когда сверху по нему кто-нибудь ходит. Это может быть игрок или другое живое существо. От шагов по полу бегут разноцветные круги.