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

LeshaInc

Пользователи
  • Публикации

    777
  • Зарегистрирован

  • Посещение

  • Победитель дней

    68

Сообщения, опубликованные пользователем LeshaInc


  1. Если функция вызывается из одного и того же места, то можно ее не выносить отдельно.

     

    if x >= rx and y >= ry and x < (rx + w) and y < (ry + h) and btn == rbtn then ... end
    
    -- VS
    
    local function buttonClickInBox(x, y, btn, rx, ry, rw, rh, rbtn)
      return x >= rx and y >= ry and x < (rx + w) and y < (ry + h) and btn == rbtn
    end
    
    if buttonClickInBox(x, y, btn, rx, ry, rw, rh) then ... end

    сравни и сделай вывод, какой код понятнее

    • Нравится 1

  2. Евентов как таковых нет в самом ОС, они предоставляются ОпенОС, а для этой систему реализация обработки событий на плечах NightFury, я лично решил проблему по своему, так что будем ждать решения NightFury)
    ?

    сам ос предоставляет евенты


  3. local event = require("event")
    local computer = require("computer")
    local keyboard = require("keyboard")
    
    local running = false
    local commands = {}
    
    function commands.exit()
     running = false
    end
    
    commands["run hadron collider"] = function()
      print("Hadron Collider has been runned!")
      os.sleep(5)
      print("Boom! Universe has been destroyed!")
      while true do
        computer.beep()
        computer.pullSignal(2)
      end
    end
    
    local funcion onKeyDown(_, _, _, code)
      if keyboard.keys[code] == "q" then
        running = false
      end
    end
    
    event.listen("key_down", onKeyDown)
    
    while running do
      local command = io.read()
      local handler = commands[command]
      
      if handler then
        handler()
      end
    end
    
    event.ignore("key_down", onKeyDown)

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


  4. Индентация из одного места, задача кода не понятна. Что это? Командная оболочка? Программа управления адронным коллайдером? Рекурсия в бесконечном цикле в рекурсии? Что это з зверь?

    test запускается, в нем бесконечный цикл, потом очередной test при нажатии. Я нажму 100 раз на клаву и прога вылетит, вероятно. А если ничего не трогать, овердофига раз в секунду будет зачем то сетиться надпись. Каждый раз, черт возьми. Непонятна суть листенеров тут, они только ухудшают все.

     

    Решение (лучшее, имхо): ^A; Del; ^S; переписать.

    • Нравится 2

  5. можно так

    local function wrap(fn, desc)
      return setmetatable({}, {
        __call = function (_, ...) return fn(...) end,
        __tostring = function () return desc end
      })
    end
    
    local test = {
      something = wrap(function ()
        return 42
      end, "function (): number -- does cool things")
    }
    
    print(tostring(test.something), test.something())
    

    = в оболочке луа просто показывает ключи таблицы и их содержимое при помощи tostring(). такой вариант пойдет.

    • Нравится 5

  6. Не хватает только ограничения кол-ва инструкций на игрока.Думаю,стоит сделать.

    local coroutines = {}
    
    coroutines[coroutine.create(function ()
      -- код игрока
    end)] = 0  -- количество операций
    
    debug.sethook(function ()
      local running = coroutine.running()
      if running then
        coroutines[running] = coroutines[running] + 100
        coroutine.yield(--[[ ... ]])
      end
    end, 100)
    

    что тут сложного?


  7.  

     

    - “*a” – читает из сокета, пока соединение не будет закрыто. Не совсем понял как это. А если я не собираюсь закрывать сокет в ближайшее время?

     

    Заблокирует навечно, пока не встретит EOF.

     

     

     

    - число – определяет количество байт, которые будут считаны из сокета. Этот вариант нам не очень подходит, поскольку мы не знаем количества принятых байт. Можно, конечно вычитывать по одному символу, но…

     

    Во взрослых протоколах пишется в первых байтах размер сообщения. Например так:

    <4 байта - размер сообщения как N: 15> <текст сообщения, N байт: something 12345>
    

    Но в таком случае достаточно чтения одной строки, да.


     

     

    Следует заметить, что обмен реализуется исключительно путем передачи строк

     

    Строки, да, но внутри них мы можем писать бинарные данные, например длину сообщения ту же.


  8.  

     

    Сетевой обмен

     

    Нужно в первую очередь определиться с целью обмена. А некоторых случаях нужно использовать UDP, в некоторых TCP.

     

    Насчет луа-скриптов от игроков: исполнять их в любом случае надо на сервере. Пока неизвестно на чем будет написан сервер нельзя точно сказать как прервать блокирование такого потока, ограничение по ресурсам и прочие хитрости. Конечно можно написать сервер и на самом love2d, но скорость будет хромать. love2d не предназначен для высоконагруженных серверов, это фреймворк для 2д игр.


  9. К сожалению в луа нет встроенных бинарный операторов, так что извращаемся делением)

     

    есть, & | << >> ~, зачем мозги пудрить людям. берешь и переходишь на луа 5.3, вот тебе и битовые операции

    • Нравится 1

  10. Что тебя заставило вообще полезть в программирование? Какие ты цели себе ставишь? Что рассчитываешь получить от программирования и что уже получил?

    Если не хочешь отвечать здесь, то хотя бы подумай и ответь самому себе на эти вопросы. Возможно, это просто не твоё.

     

    Что тебя заставило вообще полезть в жизнь? Какие ты цели себе ставишь? Что рассчитываешь получить от жизни и что уже получил?

    Если не хочешь отвечать здесь, то хотя бы подумай и ответь самому себе на эти вопросы. Возможно, это просто не твоё.

    • Нравится 1

  11. Кстати по запросу "Как реализовать ввод переменных в программу?" можно придумать почти бесконечность решений, начиная от простого клавиатурного ввода, заканчивая танцом, пением и рисованием совмещенным с нейронными сетями и человеческим фактором  :)


  12. Мне одному кажется, что Totoro специально создал конкурс здесь, чтобы выбрать лучший результат и поучаствовать в оригинальном конкурсе? (я кстати прочитал, там в качестве подарка ключ в стиме выдать могут :) )

     

    конкурс создал фингер, тоторе же хватило сил создать тему, фингер побоялся


  13. 162 байта. Pyth master (Unsafe mode - вставки на Python).  :Р

    DlNR$int.from_bytes(N[1:4],'little')$Jw=Zg$open(J,'rb').read()$18=JlZ=ZgZ5=NlZ=ZgZ120FdUNFTUJ=b:Z1 5=+k@"|=#' ."?>@b4 0/h++@b1@b2@b3 154 5=ZgZ5)=+k"\n")j_c<1k"\n"
    

    Передаем путь к файлу в stdin, получаем картинку. Отмечу еще что пока оно отображает пиксели другими символами, проблема была в том что не получилось заставить Pyth работать с UTF-8. (Так что я вряд-ли победю, решать вам).

    Установка:

    $ git clone https://github.com/isaacg1/pyth.git <path to pyth>
    $ alias pyth="python3 <path to pyth>/pyth.py"
    

    Запуск:

    $ echo <path to image> | pyth bump.pyth
    

    Скрины:

    8bfb2440a4854ad3a44ac3862d441862.png

     

     

     

     

    691daef024c346adb078ca68b6ccde09.png

     

    c6a5ed8901514abe8a9308d5d43563a8.png

     

     

     

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

    • Нравится 4

  14. @@qwertyMAN, да в общем надо понимать назначение функций и назначение других типов. Функция может производить важные вычисления исходя из ее аргументов и возвращать результат в таблице:

    local function foo(a, b)
      return {
        a = a ^ b * 3,
        b = b ^ a * 6
      }
    end
    

    Если же функция выдает статический результат:

    local function foo()
      return {answer = 42}
    end
    

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

    Создав простую переменную с таблицей мы сократим количество системных вызовов, и работать оно будет быстрее, ибо сборщику мусора не придется следить за каждой копией таблицы.

    local foo = {answer = 42}
    

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

    • Нравится 1
×
×
  • Создать...