Asioron

Calculator for OC

Nov 19th, 2018
152
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -------------------------------------------------------
  2. --               Программа КАЛЬКУЛЯТОР               --
  3. --        для компьютеров из мода OpenComputers      --
  4. --          проект http://computercraft.ru           --
  5. --                  Version 0.2                      --
  6. --                 2018, © Asior                     --
  7. -------------------------------------------------------
  8.  
  9. local gpu = require('component').gpu
  10. local computer = require('computer')
  11. local un = require('unicode')
  12. local pull_e = require('event').pull
  13. gpu.setResolution(25, 19)
  14. local W, H = gpu.getResolution()
  15. local b_color, f_color = gpu.getBackground(), gpu.getForeground()
  16. num_vr, num1, mat = '','',''
  17.  
  18.  
  19. local tButtons = {
  20.   {
  21.     visible = false,
  22.     X = 23,
  23.     Y = 1,
  24.     W = 3,
  25.     H = 1,
  26.     color = 0xff0000,
  27.     textColor = 0xffffff,
  28.     text = 'X',
  29.     action = function()
  30.       gpu.setBackground(b_color)
  31.       gpu.setForeground(f_color)
  32.       gpu.fill(1, 1, W, H, ' ')
  33.       gpu.setResolution(80, 25)
  34.       os.exit()
  35.   end
  36.   },
  37.   {
  38.     visible = false,
  39.     X = 2,
  40.     Y = 5,
  41.     W = 5,
  42.     H = 2,
  43.     color = 0x004444,
  44.     textColor = 0xffff00,
  45.     text = 'CE',
  46.     action = function()
  47.       gpu.setForeground(0xffffff)
  48.       gpu.setBackground(0x000000)
  49.       num_vr = ''
  50.       num1 = ''
  51.       gpu.set(2, 2, (' '):rep(23))
  52.       gpu.set(2, 3, (' '):rep(23))
  53.     end
  54.   },
  55.   {
  56.     visible = false,
  57.     X = 8,
  58.     Y = 5,
  59.     W = 5,
  60.     H = 2,
  61.     color = 0x004400,
  62.     textColor = 0xffff00,
  63.     text = '/',
  64.     action = function()
  65.       gpu.setForeground(0xffffff)
  66.       gpu.setBackground(0x000000)
  67.       num1 = tonumber(num_vr)
  68.       num_vr = ''
  69.       mat = '/'
  70.       if num1 then
  71.         gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  72.         gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  73.       end
  74.     end
  75.   },
  76.   {
  77.     visible = false,
  78.     X = 14,
  79.     Y = 5,
  80.     W = 5,
  81.     H = 2,
  82.     color = 0x004400,
  83.     textColor = 0xffff00,
  84.     text = '*',
  85.     action = function()
  86.       gpu.setForeground(0xffffff)
  87.       gpu.setBackground(0x000000)
  88.       num1 = tonumber(num_vr)
  89.       num_vr = ''
  90.       mat = '*'
  91.       if num1 then
  92.         gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  93.         gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  94.       end
  95.     end
  96.   },
  97.   {
  98.     visible = false,
  99.     X = 20,
  100.     Y = 5,
  101.     W = 5,
  102.     H = 2,
  103.     color = 0x004400,
  104.     textColor = 0xffff00,
  105.     text = '-',
  106.     action = function()
  107.       gpu.setForeground(0xffffff)
  108.       gpu.setBackground(0x000000)
  109.       num1 = tonumber(num_vr)
  110.       num_vr = ''
  111.       mat = '-'
  112.       if num1 then
  113.         gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  114.         gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  115.       end
  116.     end
  117.   },
  118.   {
  119.     visible = false,
  120.     X = 20,
  121.     Y = 8,
  122.     W = 5,
  123.     H = 5,
  124.     color = 0x004400,
  125.     textColor = 0xffff00,
  126.     text = '+',
  127.     action = function()
  128.       gpu.setForeground(0xffffff)
  129.       gpu.setBackground(0x000000)
  130.       num1 = tonumber(num_vr)
  131.       num_vr = ''
  132.       mat = '+'
  133.       if num1 then
  134.         gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  135.         gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  136.       end
  137.     end
  138.   },
  139.   {
  140.     visible = false,
  141.     X = 20,
  142.     Y = 14,
  143.     W = 5,
  144.     H = 5,
  145.     color = 0x004400,
  146.     textColor = 0xffff00,
  147.     text = '=',
  148.     action = function()
  149.       gpu.setForeground(0xffffff)
  150.       gpu.setBackground(0x000000)
  151.       num1 = arf(num1, tonumber(num_vr), mat)
  152.       mat = ''
  153.       num_vr = ''
  154.       gpu.set(2, 2, (' '):rep(22))
  155.       gpu.set(2, 3, (' '):rep(23-string.len(num1))..num1)
  156.     end
  157.   },
  158.   ---------------------------------
  159.   {
  160.     visible = false,
  161.     X = 2,
  162.     Y = 8,
  163.     W = 5,
  164.     H = 2,
  165.     color = 0x008800,
  166.     textColor = 0xffff00,
  167.     text = '7',
  168.     action = function()
  169.       gpu.setForeground(0xffffff)
  170.       gpu.setBackground(0x000000)
  171.       num_vr = num_vr..7
  172.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  173.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  174.     end
  175.   },
  176.   {
  177.     visible = false,
  178.     X = 8,
  179.     Y = 8,
  180.     W = 5,
  181.     H = 2,
  182.     color = 0x008800,
  183.     textColor = 0xffff00,
  184.     text = '8',
  185.     action = function()
  186.       gpu.setForeground(0xffffff)
  187.       gpu.setBackground(0x000000)
  188.       num_vr = num_vr..8
  189.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  190.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  191.     end
  192.   },
  193.   {
  194.     visible = false,
  195.     X = 14,
  196.     Y = 8,
  197.     W = 5,
  198.     H = 2,
  199.     color = 0x008800,
  200.     textColor = 0xffff00,
  201.     text = '9',
  202.     action = function()
  203.       gpu.setForeground(0xffffff)
  204.       gpu.setBackground(0x000000)
  205.       num_vr = num_vr..9
  206.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  207.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  208.     end
  209.   },
  210.   ---------------------------------
  211.   {
  212.     visible = false,
  213.     X = 2,
  214.     Y = 11,
  215.     W = 5,
  216.     H = 2,
  217.     color = 0x008800,
  218.     textColor = 0xffff00,
  219.     text = '4',
  220.     action = function()
  221.       gpu.setForeground(0xffffff)
  222.       gpu.setBackground(0x000000)
  223.       num_vr = num_vr..4
  224.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  225.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  226.     end
  227.   },
  228.   {
  229.     visible = false,
  230.     X = 8,
  231.     Y = 11,
  232.     W = 5,
  233.     H = 2,
  234.     color = 0x008800,
  235.     textColor = 0xffff00,
  236.     text = '5',
  237.     action = function()
  238.       gpu.setForeground(0xffffff)
  239.       gpu.setBackground(0x000000)
  240.       num_vr = num_vr..5
  241.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  242.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  243.     end
  244.   },
  245.   {
  246.     visible = false,
  247.     X = 14,
  248.     Y = 11,
  249.     W = 5,
  250.     H = 2,
  251.     color = 0x008800,
  252.     textColor = 0xffff00,
  253.     text = '6',
  254.     action = function()
  255.       gpu.setForeground(0xffffff)
  256.       gpu.setBackground(0x000000)
  257.       num_vr = num_vr..6
  258.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  259.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  260.     end
  261.   },
  262.   ---------------------------------
  263.   {
  264.     visible = false,
  265.     X = 2,
  266.     Y = 14,
  267.     W = 5,
  268.     H = 2,
  269.     color = 0x008800,
  270.     textColor = 0xffff00,
  271.     text = '1',
  272.     action = function()
  273.       gpu.setForeground(0xffffff)
  274.       gpu.setBackground(0x000000)
  275.       num_vr = num_vr..1
  276.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  277.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  278.     end
  279.   },
  280.   {
  281.     visible = false,
  282.     X = 8,
  283.     Y = 14,
  284.     W = 5,
  285.     H = 2,
  286.     color = 0x008800,
  287.     textColor = 0xffff00,
  288.     text = '2',
  289.     action = function()
  290.       gpu.setForeground(0xffffff)
  291.       gpu.setBackground(0x000000)
  292.       num_vr = num_vr..2
  293.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  294.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  295.     end
  296.   },
  297.   {
  298.     visible = false,
  299.     X = 14,
  300.     Y = 14,
  301.     W = 5,
  302.     H = 2,
  303.     color = 0x008800,
  304.     textColor = 0xffff00,
  305.     text = '3',
  306.     action = function()
  307.       gpu.setForeground(0xffffff)
  308.       gpu.setBackground(0x000000)
  309.       num_vr = num_vr..3
  310.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  311.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  312.     end
  313.   },
  314.   ---------------------------------
  315.   {
  316.     visible = false,
  317.     X = 2,
  318.     Y = 17,
  319.     W = 11,
  320.     H = 2,
  321.     color = 0x008800,
  322.     textColor = 0xffff00,
  323.     text = '0',
  324.     action = function()
  325.       gpu.setForeground(0xffffff)
  326.       gpu.setBackground(0x000000)
  327.       num_vr = num_vr..0
  328.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  329.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  330.     end
  331.   },
  332.   {
  333.     visible = false,
  334.     X = 14,
  335.     Y = 17,
  336.     W = 5,
  337.     H = 2,
  338.     color = 0x008800,
  339.     textColor = 0xffff00,
  340.     text = ',',
  341.     action = function()
  342.       gpu.setForeground(0xffffff)
  343.       gpu.setBackground(0x000000)
  344.       num_vr = num_vr..'.'
  345.       gpu.set(2, 2, (' '):rep(20-string.len(num1))..num1..' '..mat..' ')
  346.       gpu.set(2, 3, (' '):rep(23-string.len(num_vr))..num_vr)
  347.     end
  348.   },
  349. }
  350.  
  351. function arf(n1,n2,m)
  352.   if m ~= '' and n1 and n2 then
  353.     if m == '/' then
  354.       if n1 == 0 then
  355.         return -0
  356.       else
  357.         return n1/n2
  358.       end
  359.     elseif m == '*' then
  360.       return n1*n2
  361.     elseif m == '-' then
  362.       return n1-n2
  363.     elseif m == '+' then
  364.       return n1+n2
  365.     end
  366.   else
  367.     return 0
  368.   end
  369. end
  370.  
  371. local function drawButton(n) -- функция рисования кнопки
  372.   gpu.setBackground(tButtons[n].color) -- задаем цвет кнопки
  373.   gpu.setForeground(tButtons[n].textColor) -- задаем цвет текста
  374.   gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- заливаем область
  375.   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) -- пишем текст по центру
  376. end
  377.  
  378. local function toggleVisible(n) -- переключение видимости кнопки
  379.   if tButtons[n].visible then -- если кнопка видима
  380.     tButtons[n].visible = false -- отключаем
  381.     gpu.setBackground(b_color) -- берем цвет фона, полученный при старте программы
  382.     gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') -- стираем кнопку
  383.   else -- если кнопка не активна
  384.     tButtons[n].visible = true -- активируем
  385.     drawButton(n) -- запускаем отрисовку
  386.   end
  387. end
  388.  
  389. local function blink(n) -- мигание кнопки
  390.   tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color -- меняем местами цвета фона и текста
  391.   drawButton(n) -- отрисовываем кнопку
  392.   os.sleep(0.09) -- делаем задержку
  393.   tButtons[n].color, tButtons[n].textColor = tButtons[n].textColor, tButtons[n].color -- меняем цвета обратно
  394.   drawButton(n) -- перерисовываем кнопку
  395. end
  396.  
  397. gpu.fill(1, 1, W, H, ' ') -- очищаем экран
  398.  
  399. gpu.set(1, 1, '╔═════════════════════')
  400. for i=2,18 do
  401.   gpu.set(1, i, '║                       ║')
  402. end
  403. gpu.set(1, 4, '╠═══════════════════════╣')
  404. gpu.set(1, 19, '╚═══════════════════════╝')
  405.  
  406. for i = 1, #tButtons do
  407.   toggleVisible(i) -- активируем каждую кнопку
  408. end
  409.  
  410. while true do
  411.   local tEvent = {pull_e('touch')} -- ждем клика
  412.   for i = 1, #tButtons do -- перебираем все кнопки
  413.     if tButtons[i].visible then -- если кнопка активна
  414.     if tEvent[3] >= tButtons[i].X and tEvent[3] <= tButtons[i].X+tButtons[i].W-1 and tEvent[4] >= tButtons[i].Y and tEvent[4] <= tButtons[i].Y+    tButtons[i].H-1 then -- если клик произведен в пределах кнопки
  415.      blink(i) -- мигнуть кнопкой
  416.        tButtons[i].action() -- выполнить назначенный код
  417.        break
  418.       end
  419.     end
  420.   end
  421. end
RAW Paste Data