Перейти к публикации
Форум - ComputerCraft
Ren

Дверной замок

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

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

Дамы и господа, рад представить вашему вниманию очередной велосипед!

 

Как видно из названия, это обычный дверной замок, который ждёт, пока ты пройдёшься по монитору, вмонтированном в полу. Если игрок не находится в чёрном списке, то дверь открывается. На втором, главном мониторе отображается список из последних семи посетителей (к слову, зафлудить список, пройдясь по монитору семь раз, не получится), а так же переключатель, нажав на который, можно мановением мышки добавить посетителя в чёрный список.

Вот так выглядит интерфейс:

 

Клац

Клац

Да, я совершенно не в курсе, как вставлять картинки

 

(клавиатуру после установки лучше снести во избежание)

Код находится здесь: http://pastebin.com/EcUXVGe2

Итак, для запуска нам необходим обычный компьютер с графической картой и монитором второго уровня и вставленной Редстоун картой (редстоун блок, как на скрине, тоже подойдёт)
Итак, включаем компьютер, устанавливаем программу, создаём отдельный файлик bl.txt, в котором записываем нежелательных личностей (каждый ник с новой строки). Потом запускаем программу, клацаем по монитору, на который будут выводиться менюшка с надписями, второй монитор выставляем на пол перед дверью. Программа готова!
Да, разрешение экрана настроено для монитора в 2 блока шириной и 3 высотой.

 

P.S. Если вы заметили в коде ужасающий костыль (или что-то ещё), который оскорбляет ваши програмистские чувства, то прошу писать сюда. Автору тоже надо учиться :)

 


 

Внимание!

Программа нерабочая, есть ошибки в коде

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

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


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

Меня смутил вот этот кусок кода:

    ::label::
    f=io.open('bl.txt','w')
    for name,_ in pairs(bl) do
        if f~=nil then
        f:write(name,'\n')
        else goto label end
    end
    if f~=nil then
    f:flush()
    else goto label end
    end

1) Давай подумаем, когда у тебя может произойти переход по метке label? Когда файл не был создан процедурой io.open. Это случится если диск переполнен или защищен от записи. Сомневаюсь, что повторный вызов io.open поможет решить проблему. Скорее всего, это вызовет зависание программы.

2) Если ты все же при сбое решил начинать всё сначала, нет необходимости проверять условие f~=nil каждый раз в цикле. Поскольку в цикле for значение f не меняется, достаточно провести проверку один раз перед началом цикла. Тоже касается и проверке после цикла.

3) По завершении работы с файлом, файл принято закрывать, а не флушить.

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


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

Быстро прошёлся по коду. Здесь лучше поставить локальные переменные:

visited={}
lazy={}
count=0

Так же функции тоже стоит сделать локальными. Глобальные переменные - зло!

 

В этой части кода тоже проблемы:

while true do
what,_,x,y,nameW,nameT=event.pull()
if what == 'walk' then
    lastVisited(nameW)
    if bl[nameW]==nil then
        component.redstone.setOutput(side,15)
        os.sleep(2)
        component.redstone.setOutput(side,0)
    end
elseif what == 'touch' then touched(x,y) end
end

Бесконечный цикл без возможности выйти. Нехорошо.

А так же хотелось бы напомнить про существование библиотеки sides и colors, которые очень удобны будут для настройки программы. (не все поймут что за сторона 3, да и поддержки цветных сигналов нет в проге)

 

В добавок немного придерусь к комментами. Лишние строки с -----------Текст-------------- и прочие делать не стоит. Лишние пробелы тоже. Разделять функции вот так вполне приемлемо:

Первая функция --нормальный коммент
               --нормальный отступ
Вторая функция --нормальный коммент
---------ненормальный коммент------

               --ненормальный отступ размером в 3 строки

-----------------------------------    --ненормальная полоса захламляющая код, особенно если код простой и короткий

--[[
Если между этими скобками рисунок из
псевдографики в несколько строк
который поясняет например отображение
интерфейса - то это нормальный коммент
]]

А так же я обратил внимание что у тебя сторона (side) равна '3' в ковычках. Тестировал прогу? Там же вроде число должно быть, а не текст.

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

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


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

В добавок немного придерусь к комментами. Лишние строки с -----------Текст-------------- и прочие делать не стоит. Лишние пробелы тоже.

Зря ты придираешься к комментариям. И пробельные строки, и комментарии из повторяющихся символов -- нормальные способы оформления, упрощающие восприятие кода.
  • Like 5

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


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

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

Перфекционизм же.

А так можно что угодно творить со своим кодом. Некоторые прогеры даже матершинные комменты встраивают.

Меня убил этот момент:

local pimp = 0x5f5eff   --цвет пимпочки переключателя

Пимпочка :smile3:

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

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


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

Перфекционизм же.

Перфекционизму — да. Голословным заявлениям — нет.

 

Лишние строки с -----------Текст-------------- и прочие делать не стоит.

...

--[[ Если между этими скобками рисунок из псевдографики в несколько строк который поясняет например отображение интерфейса - то это нормальный коммент ]]

Однострочные комментарии из повторяющихся символов являются частным случаем ASCII-графики из нескольких строк.

Объясни, почему плохо пояснять свой код графически.

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


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

Ошибочка.. В чём может быть проблема? - https://imgur.com/a/3930l

 

 

именно когда встаю на моник, что в полу.

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

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


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

Ошибочка.. В чём может быть проблема? - https://imgur.com/a/3930l

 

 

именно когда встаю на моник, что в полу.

попробуйте кавычки убрать у присвоения side

8 строка

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


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

@@Miroshka, скачай лучше эпические дверные, биометрические, кодовые замки от профессионалов (Totoro, ECS, ...) и не мучай ни себя, ни нас :)

http://computercraft.ru/topic/1164-kodovaia-i-biometricheskaia-zaschita-dveri/
http://computercraft.ru/topic/168-dvernoi-zamok-smartlock-04/

 

Ren свою программу, скорее всего, сам даже не запускал ни разу. Я уже молчу про то, что он там что-то комплексно краш-тестил и дебажил.

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


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

@ Теперь при касании по экрану - https://imgur.com/a/kkVv9

уух ,там косяки в программе. тот, что теперь нашел - нет "w" в режимах в 111 строке. и правда лучше другую программу взять, эту ещё дебажить и дебажить

  • Like 1

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


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

 

 

кодовые замки от профессионалов

Довольно большие. Могу предложить мини-программу чисто для примера: https://pastebin.com/FGzEA2jv

Может, поможет)

(да-да, тема мертва и все такое...)

  • Like 1

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×