Перейти к содержимому
  • 0
Barawik_

Кнопочки

Вопрос

Добрый день. Можете кто-то написать маленький код, для 5 кнопок, с возможностью обновления того отдела на который он ведет. На подобии 

os.execute("wget -f https://pastebin.com/raw/....... te.lua")
os.sleep(1)
os.execute("te")

что-то так, и располагалось на 1 строке) размеры програмки: 72x30, примерное расположение кнопок 27 строка))) Исходный код:

 

 

local c = require('component')
local u = require('unicode')
local t = require('term')
local e = require('event')
local shell = require('shell')
local g = c.gpu
local color = g.setForeground
 
local w,h = 72,30 -- разрешение экрана
local outer = 1 -- отступ от строк
 
local frases = { -- таблица с фразами и цветовой разметкой
    '&c Магазин 3Д Моделей',
    '&6Внеземные                      &aОбычные                      &fДекор',
    '                                                                       ',
    '&6Эндермен - 6                    &aКурятин - 3           &fФонарь - 2,5',
    '&6Ифрит - 5                     &a Оцелотик - 3           &fЦветок - 2,5',
    '&6Мимик - 25                    &a Волчонок - 3            &fФонтан - 40',
    '&6Голем - 10                    &a  Коровка - 3            &fХаммер - 40',
    '&6Кровавый алтарь - 40                               &fПосох силы - 15',
    '                                                           &fДиван - 15',
    '                                                   &fКубик Рубика - 2,5',
    '                                                 &fКоролевский трон - 4',
    '                                                           &fТанк - 2,5',
    '                                                           &fУнитак - 4',
    '                                                         &fРаковина - 4',
    '                                                         &fСтолик - 2,5',
    '                                                                       ',
    '                                                                       ',
    '                                                                       ',
    '                                                                       ',
    '&aЦены указаны в игровой валюте - Эмиральды',
    '&f=====================================================================',
    '&bВопросы по разработке моделей к &aMag010 &bили &3Xyanide_ &b(владельцы)',
    '  &aРазработка программы &f- &c Barawik_&a(ленивый не будет вам писать)',
    '&6Тут могла быть ваша реклама! Круто, да? Хочешь? Не будет. Ну или нет?'
    }
 
local colorsTable = {
            ['&0'] = function() color(0x000000) end,
            ['&1'] = function() color(0x0000AA) end,
            ['&2'] = function() color(0x00AA00) end,
            ['&3'] = function() color(0x00AAAA) end,
            ['&4'] = function() color(0xAA0000) end,
            ['&5'] = function() color(0xAA00AA) end,
            ['&6'] = function() color(0xFFAA00) end,
            ['&7'] = function() color(0xAAAAAA) end,
            ['&8'] = function() color(0x555555) end,
            ['&9'] = function() color(0x5555FF) end,
            ['&a'] = function() color(0x55FF55) end,
            ['&b'] = function() color(0x55FFFF) end,
            ['&c'] = function() color(0xFF5555) end,
            ['&d'] = function() color(0xFF55FF) end,
            ['&e'] = function() color(0xFFFF55) end,
            ['&f'] = function() color(0xFFFFFF) end }
 
function printFormatText(x,y,text)
    local crit = '&'
    local corr = 0
    for i = 1, u.len(text) do
        local letter = u.sub(text,i,i)
        if letter == crit then
            pcall(colorsTable[u.sub(text,i,i+1):lower()])
            corr = corr + 2
            skip = true
        else
            if not skip then
                g.set(x+i-corr,y,letter)
            end
            skip = false
        end
    end
end
 
function getX(frase)
    local len = u.len(frase:gsub('&.',''))
    local x = w/2 - len/2
    return math.floor(x)
end
 
t.clear()
g.setResolution(w,h)
 
for i = 1, #frases do
    local frase = frases[i]
    printFormatText(getX(frase),outer*i,frase)
end
 
color(0xFFFFFF)
g.set(1,25,'========================================================version 0.1====')
color(0xFFFFFF)
 
while true do
    local _,_,_,curY = e.pull('touch')
    if curY == 25 then
        os.execute("wget -f https://pastebin.com/raw/mK3KkRJB test.lua")
        os.sleep(3)
        os.execute("test")
    end
  end
t.clear()

 

 

Можете что-то исправить чтобы работало) + пробывал вашу схему, не работаит(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Гость Kartze

юзай какую-нибудь из существующих библиотеку для гуёв, не создавай монстров. на форуме их несколько штук на любой вкус.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://computercraft.ru/topic/1155-gui  http://computercraft.ru/topic/2020-psevdograficheskie-interfeisy-v-opencomputers-ch2-knopki/   немного лень что-то писать, попробуй это. Должно помочь разобраться.

Изменено пользователем Asior

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

юзай какую-нибудь из существующих библиотеку для гуёв, не создавай монстров. на форуме их несколько штук на любой вкус.

Я новичек, пробывал, не получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://computercraft.ru/topic/1155-gui  http://computercraft.ru/topic/2020-psevdograficheskie-interfeisy-v-opencomputers-ch2-knopki/   немного лень что-то писать, попробуй это. Должно помочь разобраться.

Попробывал, сильно сложно, начинал разбиратся, сломал голову...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

и ты, не осилив в целом изичные либы, пытаешься свою написать. как думаешь, каковы твои шансы на успех?
я так понимаю, ты делаешь магазин 3D-моделек, который будет автоматически печатать и выдавать пользователю модельку за какие-то деньги?

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

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

внешне это будет выглядеть примерно так:

Магазин 3D-моделек Ивана Ивановича
Доступные модели:
ID | Название           - Цена(у.е.)
---|--------------------------------
00 | легущька - 3.5
01 | асфальтоукладчик - 9
02 | ...
13 | чайник рассела - over9000
------------------------------------
Введите ID нужной вам модели, чтобы
заказать ее:
>> _

список делаешь очень просто: что-то типа print(models[id][id].." | "..models[id][label].." - "..models[id][price]) заключаешь в for, бегающий по массиву models, в котором перечислены все модельки. да простят меня магистры за извращения.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Kartze Мне не нужна авто-печать) У меня есть комнатки, в которые заходишь. фигуры печатаются, ты платишь и тебе выпадает МЭ Ячейка. Вот.. Мне нужен просто прайс. Начальный экран, потом кнопки внизу по типу thermal, ic2, ex nihilio, ae 2, ресурсы, прочее, и т.д . мне можно просто 1 кнопку, объяснить что где, я с остальными сам попробую разобраться) :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

@@Barawik_, хых, ты сам не сказал, шо за программу пилишь.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробывал, сильно сложно, начинал разбиратся, сломал голову...

Ну даже незнаю. там вроде все просто пошагово описано что где, куда и как. Попробуй пройти статью потихоньку набирая весь код, что предлагает Doob. Там просто нереально сильно все разжевано. Но коль не понятно, отделяю оттуда только 1 кнопку и даю тебе её код. Незнаю как это поможет.

 

 

 

local gpu = require('component').gpu
local computer = require('computer')
local pull_e = require('event').pull
local W, H = gpu.getResolution()
local un = require("unicode")
local b_color, f_color = gpu.getBackground(), gpu.getForeground()
 
local tButtons = {
  {
    visible = false,
    X = 1, --местоположение кнопки по Х
    Y = 5, --местоположение кнопки по У
    W = 13, --длина кнопки (длина названия кнопки + 3)
    H = 1,   --ширина кнопки
    color = 0x008800, --цвет фона кнопки
    textColor = 0xffff00,  --цвет текста кнопки
    text = 'Йа кнопофка',  --текст кнопки
    action = function()  --функция с командами которые выполняются по нажатию, в этом примере простой вывод сообщения
      gpu.setForeground(0xffffff)
      gpu.set(1, 1, 'А я её действие')
    end
  }
}
 
local function drawButton(n) -- функция рисования кнопки
  gpu.setBackground(tButtons[n].color) -- задаем цвет кнопки
  gpu.setForeground(tButtons[n].textColor) -- задаем цвет текста
  gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- заливаем область
  gpu.set(tButtons[n].X+(tButtons[n].W/2)-(un.len(tButtons[n].text)/2), tButtons[n].Y+(tButtons[n].H/2), tButtons[n].text) -- пишем текст по центру
end
 
local function toggleVisible(n) -- переключение видимости кнопки
  if tButtons[n].visible then -- если кнопка видима
    tButtons[n].visible = false -- отключаем
    gpu.setBackground(b_color) -- берем цвет фона, полученный при старте программы
    gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- стираем кнопку
  else -- если кнопка не активна
    tButtons[n].visible = true -- активируем
    drawButton(n) -- запускаем отрисовку
  end
end
 
local function blink(n) -- мигание кнопки
  tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color -- меняем местами цвета фона и текста
  drawButton(n) -- отрисовываем кнопку
  os.sleep(0.09) -- делаем задержку
  tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color -- меняем цвета обратно
  drawButton(n) -- перерисовываем кнопку
end
 
gpu.fill(1, 1, W, H, ' ') -- очищаем экран
 
for i = 1, #tButtons do
  toggleVisible(i) -- активируем каждую кнопку
end
 
while true do
  local tEvent = {pull_e('touch')} -- ждем клика
  for i = 1, #tButtons do -- перебираем все кнопки
    if tButtons[i].visible then -- если кнопка активна
      if tEvent[3] >= tButtons[i].X and tEvent[3] <= tButtons[i].X+tButtons[i].W and tEvent[4] >= tButtons[i].Y and tEvent[4] <= tButtons[i].Y+tButtons[i].H then -- если клик произведен в пределах кнопки
       blink(i) -- мигнуть кнопкой
       tButtons[i].action() -- выполнить назначенный код
       break
      end
    end
  end
end

 

 

 

 

8IWQHNy.png

 

 

P.s Пришлось подтянуть библиотеку юникода еще, а то с русскими названиями букв оно работает ужасно криво.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну даже незнаю. там вроде все просто пошагово описано что где, куда и как. Попробуй пройти статью потихоньку набирая весь код, что предлагает Doob. Там просто нереально сильно все разжевано. Но коль не понятно, отделяю оттуда только 1 кнопку и даю тебе её код. Незнаю как это поможет.

...

Благодарю, но ваш код не очень, из-за того что при внедрении в мою программу либо видно только сам текст программы, кнопок не видно, либо только кнопки, но не видно программы. Помогите, буду рад c: Изменено пользователем eu_tomat
сокращение цитаты

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Благодарю, но ваш код не очень, из-за того что при внедрении в мою программу либо видно только сам текст программы, кнопок не видно, либо только кнопки, но не видно программы. Помогите, буду рад c:

А что за текст программы? Код, что ли? Но зачем видеть код во время исполнения программы?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...