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

qwertyMAN

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

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

  • Посещение

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

    47

Все публикации пользователя qwertyMAN

  1. Добрый день игроки. Я хотел бы узнать, как опытные игроки проводят эксперименты по определению какой кусок кода работает лучше. А ещё хотел бы узнать, какой оператор будет работать быстрее: > или >= Например: y = x>13 and x<17 и y = x>=14 and x<=16 А может ещё быстрее работает оператор == ? Например: y = x==14 or y==15 or y==16
  2. Я бы написал my_first_lib чтобы не делать трудно читаемый текст, ну или на крайний случай MyFirstLib, но некак не myfirstlib. Отличный гайд, но по такому случаю мог бы рассказать и про dofile заодно. Как я понимаю у неё схожее применение. Кстати, допиши чтобы игроки глобальные переменные не создавали в библиотеках. А то ошибки посыпятся у игроков.
  3. Я думаю, функцию в "библиотеки" надо сделать локальной. Потом разобраться, для каких таких целей создаётся таблица из 2^8 значений. Есть и другие способы использования цветов. Например сделать формулу генерирующую цвет по введённым данным, например color = func(r,g,b), где r,g и b от 0 до 3 например. Или сделать тройной цикл, который бы генерировал и сохранял цвета в одну таблицу. Можно было бы даже упорядочить эту таблицу, которая бы могла выдавать нам нужный цвет по введённым данным color = color_table[r][g] В любом случае я против этой огромной таблицы. Да и не пойму какой был смысл был её создавать вручную. P.S. Нео прав, библиотека имеет конкретные критерии по которым она имеет право называть библиотекой. Во первых, это создание локальной переменной с типом данных - таблица. Далее функции присущи этой таблице и наконец вывод информации через return таблица. А так же главное требование: все функции записанные в таблицу должны иметь общее назначение. Например, если ты пишешь функции по конвертации систем счисления, то ты не должен туда записывать функции для управления роботом. Для таких целей следует писать отдельную библиотеку. Библиотека не должна содержать глобальных переменных. У тебя например там создаётся глобальная функция. Глобальные переменные в большинстве своём - зло. Так же библиотека не должна содержать прочих исполняемых компонентов вне функций. Например просить ввести пароль вне функций или напечатать что то. То есть когда ты прогружаешь библиотеку, она не должна при этом никак влиять на код программы, кроме того что возвращает таблицу. Если ты внутри неё напишешь такую глупость print("библиотека загружена") вне функций, это будет большой минус. Так как библиотеки имеют такой свойство как загрузка на любом движке с поддержкой языка на котором они написаны. Например я могу взять свою библиотеку по конвертации систем счисления и использовать в своей игре на другом движке. Конечно можно делать библиотеки заточеные под один конкретный движок, например под OpenOS, но лучше этого не делать если нет острой необходимости.
  4. Вообще я сейчас понял для чего служит эта библиотека. Она видимо для работы с цветными проводами из других модов. То есть с цветами в OC эта библиотека вообще не связана. Ну ладно, теперь о самом коде. Там стоит 2 цикла. Что делает такая форма цикла for можешь подробнее почитать в интернете, скажу лишь коротко. Эта форма перебирает все значения таблицы и выводит пару: ключ-значение. Во втором цикле есть переменная _ (нижний знак подчёркивания). Обычно её нигде не используют, это переменная - "мусорка". Когда функция возвращает 3 значения, а первое и второе нам не нужно, мы пишем _,_, x = func() Таким образом не забиваем лишние переменные лишней информацией.
  5. Да ну в пень эту библиотеку. Я всегда заношу в таблицу только те цвета что мне нужны. Например вот код из игры Open Clicker: local color = { back=0x000000, --цвет фона по умолчанию foreg=0xffffff, --цвет текста по умолчанию cookie=0xffcc33, --далее идут прочие цвета различных деталей. Всё это находится вначале программы, позволяя легко настроить то что нужно пользователю, не роясь в коде в поисках нужной переменной chocolate=0x663300, scoreboard=0xaaaaaa, work_cash=0x6699ff, work=0xffcc33, exit=0xff0000, reboot=0xffcc33, quit_cash_1=0x00ff00, quit_cash_2=0xff0000 }
  6. Зайди в папку lib при помощи команды cd lib и посмотри код набрав edit color.lua Можешь также в этой папке набрать ls, чтобы посмотреть список других библиотек И в следующий раз изучи повнимательнее компоненты OpenOS - много чего интересного найдёшь просто от прогулки по системным файлам. P.S. Насколько я знаю, понятия "двухсторонние таблицы" не существует. Бывают двухмерные, трёхмерные и прочие таблицы, но двухсторонних как то не встречал. И да, там не две таблицы, а одна. Библиотека возвращает лишь 1 таблицу color
  7. qwertyMAN

    Для новичков в программировании

    Вспомнился такой интересный пример как русский - русич. Странно когда все слова из списка - существительные, а что то одно - прилагательное. Например: китаец, японец, белорус, русский. Или как у меня: строка, число, функция, булевый. Тебе не кажется это странным? Возникает вопрос, чем этот тип данных хуже что он прилагательное?
  8. qwertyMAN

    Для новичков в программировании

    Идею с использованием поясняющих рисунков я нашёл в одной довольно известной проприетарной стратежки в ini файлах. Мне показалось это довольно хороших способ наглядно, быстро и точно продемонстрировать какой цифрой что ты называешь. Лично мне такая фишка очень нравится. Вместо того чтобы писать "--цифрой 1 я называю первый слот сверху -- цифрой 2 - первый слот снизу", и так далее, проще нарисовать рисунок и всё. Я говорю про случай когда комменты необходимы и скорее всего игроки будут читать твой код и спрашивать, а что обозначают эти индексы массива. P.S. Ничто не мешает вам - мастерам lua программирования написать тему и изложить все аспекты красивого программирования. Лично я не видел подобных тем, особенно в последнее время. Как сервер стремиться научить игроков программировать без написания гайдов, не понимаю.
  9. В принципе всё верно. Например в игре игрок должен вырасти до нужного размера названного target_mass, у нас есть переменная в которой записана масса игрока mass. Как найти и отобразить проценты? local target_mass=10^6 --цель миссии набрать такую массу local mass=100 --стартовая масса в игре, которая может изменяться ... --всякий код игры local procent=mass*100/target_mass --узнаём процент print(procent .. "%") --отображаем эту информацию В игре про бактерий помниться у меня была шкала показывающая наглядно этот процент, которая меня цвет от красного к зелёному плавно. А вообще этому в школе учат - как получить проценты. Нечего сложного тут нет.
  10. qwertyMAN

    Для новичков в программировании

    А что если я скажу что на личном опыте когда то давно писал if x==true, 1 и 0 и прочее? Ещё когда на vbs сидел. От незнания языка и не такое напишешь. А без отступов так вообще не удобно читать код. + в обычном редакторе который не подсвечивает ничего.
  11. Доброго времени суток, игроки. Я тут решил написать небольшой сборник советов для начинающих программистов. Возможно кому нибудь понадобится. 1 проблема: не использование булева В чём суть проблемы: игроки используют 1 и 0 как включено и выключено. Вместо true и false, как это надо делать. В чём причина проблемы: булева занимают минимальное из всех типов данных место. Булева поддерживают такую операцию как x = not x, которая так быстро прижилась в моём коде для создания переключателей. В добавок и сам код выглядит красивее, не нужно ставить комменты в коде что означает 1 и 0. 2 проблема: комментировать всё подряд (если это не обучающий код) Способ решения: со временем приходит осознание того что ты делаешь и как. Если код написан так как надо, то тут и комменты не нужны. Любой прогер взглянет и поймёт что в переменных x и y хранятся координаты. Комменты следует ставить там где они действительно нужны 3 проблема: использование чего то вроде этого if x==true then ... end. В чём ошибка? Да в том что сравнение тут совершенно не нужно. Достаточно написать if x then ... end чтобы условие выполнялось, когда x чему либо равен, кроме false и nil. 4 проблема: длинный комменты, там где они могут замениться более простым пояснением что к чему. Способ решения: нарисовать псевдографикой поясняющий рисунок между символами --[[ и ]]. Внутри них всё воспринимается как коммент. Вот пример: Итак что мы видим в примере? Это игра Cube. Здесь мы видим такую строку как door.pos={false,false,false,false} (в проге она означает положение дверей, закрыты они или открыты). Но без комментов не понять под каким номером какая комната. Можно было бы написать 4 коммента и расписать что 1 - верхняя комната и так далее что не так удобно. Но при помощи псевдографики можно очень понятный рисунок нарисовать, который сразу все вопросы закроет. 5 проблема: использование глобальных переменных. Это очень важный пункт. В большинстве случаев в проге используются локальные переменные (в том числе и локальные функции). Это позволит экономить память, так как когда задаются локальные переменные в функции, по завершении этой функции они все удаляться из памяти. Освободив как саму переменную, которую мы сможем использовать с таким же именем, так и место в памяти. В общем, экономия и порядок будет в коде тех кто использует локальные переменные. Способы выявления ошибка: Как правило строку в которой произошла ошибка и путь к ней пишется на экране, где бы вы lua не использовали. Но если случилась непонятная ситуация - ставьте print(здесь нужная переменная). Так мы сможем проверить, соответствует ли переменная тому что мы хотим получить. Если нет - решаем причину несоответствия. А так же мы можем написать следующую конструкцию print(type(x)), где мы проверим тип переменной x ( в вашем случае другой переменной). Для чего нужно? А вот например случается беда когда числовая переменная с какой то кстати становится строкой. (как произошло в моей проге Open Clicker). В итоге цифра как бы есть, но не производятся всяческие вычисления. Так как тип переменной - string. В данной ситуации на помощь приходят функции tostring() и tonumber() которые пытаются перевести переменную в стоку и число. Например tonumber("1".."02"). В данном случае две string строки сложатся в одну строку и переведутся в тип число. Как предотвратить ошибки: Учиться программировать. Использовать хороший текстовый редактор с подсветкой синтаксиса (очень помогает при выявлении лишнего или недостающего end). У меня вот стоит Notepad++, поддерживает вкладки что тоже удобно. Да и нумерация строк полезна. Не в коем случае не программируйте в стандартном блокноте или ещё хуже в OpenOS. Это возможно, но крайне не удобно.
  12. Взяв виндосовский пэинт и сделав пару скринов, могу сказать что примерно у монитора 2 уровня шаг составляет 0x33. Например цвета 0x6633cc 0xff0099 и подобные.
  13. Не знаю. В гугле по этому поводу не могу составить правильно запрос чтобы тебе дать ссылку, так что придётся так рассказать. Хотя нет, не придётся. Фингер в ту же секунду уже рассказал, так что спасибо ему Пока что в обычных прогах это бесполезно и не понятно зачем. Пользователям думаешь будет приятно, если 10 твоих прог будут создавать 10 конфигов и забивать ими комп? Хотя всё прекрасно помещается в программу. Странно, но чем больше я изучаю программирование, тем меньше у меня цели. Надеюсь, до того момента когда затеешь писать граф оболочку, у тебя будет много желания и сил для этого. Только что заметил что ты не рассказал про RGBA, записывается как 0xRRGGBBAA. Последняя цифра A - это прозрачность. 32-бит, как и у всех мониторов. И луа видя цифру начинающуюся с 0x, автоматически переводит её в десятичный вид. То есть написав x = 0xF при print(x) получим 15. И ещё, вот такой текст можно перевести в число таким образом tonumber("0x".."ff".."ff".."00"). То есть мы даём три переменные (rgb), складываем их как текст и при помощи tonumber() и переводим в hex число.
  14. qwertyMAN

    OpenClicker

    Мне кажется подобные игры рассчитаны на радости прокачки, покупки. А так больше нечем не могу объяснить популярность подобных игр. Сколько кликеров перевидал, видел и те что ставили цель - уничтожить что то, достигнуть. Но тем не менее везде было странное чувство. Как будто чего то не хватает. Какой то нестабильный жанр игр. Не понятно что, зачем и почему делаешь. Непонятно когда завершать игру. Непонятно вообще зачем эта игра была создана. Насчёт убийства игр нет, тут я не согласен. Ты играешь стратегию - у тебя чёткая цель, отработать тактику, думать, совершать хитрые манёвры и так далее. Играешь в гонки - анализируешь как лучше пройти поворот, когда затормозить чтобы в поворот войти, как стартовать и прочее. В любой из игр жанров есть конкретный ряд целей - повысить скилл игры. Да и вообще это больше ради развлечения чем ради убийства времени. В Морровинд так вообще играют как правило из-за атмосферы игры. Потому что нравится, есть интерес и прочее. А что есть в кликерах? Скилл никакой набить нельзя, они не заставляют задуматься. И сюжетом интересным не могут занять. И цели собственно в них никакой нет (правда в некоторых, не классических есть, но это не меняет погоды). Если бы все игры делались с учётом золотого сечения, кликеры не входили бы в их число
  15. Я это ещё год назад осуществлял в игре про бактерий. Тогда я даже про cc.ru не знал. Правда после обновления, "разноцветную" строку роста бактерии решил снять. Но не в этом дело. Всё очень просто реализуется. Плавный цветной градиент просто осуществить. У нас есть функция что принимает 3 цвета. RGB. (если нет, то юзаем мою библиотеку конвертор). Итак, что нам нужно? Переменная test где хранится значение. Переменная max где храним максимальное значение переменной test. (за минимальное будем считать 0) Мы ставим на переменную отвечающую за красный цвет формулу r=math.modf(255/(test/max)) и на зелёный цвет g=math.modf(test*255/max). А на синий b=0. Таким образом у нас цвета плавно перетекают от красного через жёлтый в зелёный. Но увы с 8-битным цветом все эти фишки малоэффективны. Не ну красиво будет мне кажется. В любом случае, чтобы преобразовать 3 цвета в одну переменную и обратно, используйте мою библиотеку conv: http://computercraft.ru/topic/1387-universalnyi-konverter-sistem-schisleniia-i-tcv/?hl=conv Я уже сказал как. Действуй! Нужна будет помощь - обращайся. В математических алгоритмах постараюсь помочь. Здесь очень здорово будет использовать библиотеку note. Она есть в самой OpenOS. Можно небольшую мелодию из пары нот составить и в цикле с задержкой прокручивать пока не восстановится энергия. А вообще бред бредовый, юзать комп ещё сильнее, на то чтобы предупредить о том что энергии мало. Хотя как знать, сколько там энергии бипалка тратит. dases, если не в курсе как это сделать, то всё очень просто. Берёшь переменную и записывает максимальный объём чего либо max=цифра. Берёшь переменную с тем что надо измерить test=цифра. Переводишь показания в проценты test=test*100/max далее выводишь инфу вот так print(test .. "%").
  16. P.S. Булева - это удобная для программирования штука. Вот тебе доказательство этому: local quit_cash = false --положение кнопки по умолчанию (выкл) local color = { --цвета используемые в программе quit_cash_1=0x00ff00, --цвет активной кнопки (зелёный) quit_cash_2=0xff0000 --цвет пассивной кнопки (красный) } local function draw_quit_cash() local msg,col --устанавливаем локальные переменные (а локальные они потому, что после окончания функции обнуляться, очистив память) if quit_cash then --установим сообщение на кнопки и её цвет, в зависимости от её положения msg=" on " col=color.quit_cash_1 else msg=" off " col=color.quit_cash_2 end gpu.setBackground(col) --цвет который установили gpu.setForeground(0x000000) gpu.set(14, 24, msg) --сообщение которое написали end local function touch(_,_, x, y) if x>13 and x<21 and y==24 then --ловим клик по нужным координатам quit_cash = not quit_cash --переключаем переключатель на противоположное значение draw_quit_cash() --отрисовываем кнопку end end Ссылка на полный код: http://pastebin.com/bvxyh7fX Теперь о коде. Что удобного? Во первых эти переменные повышают читаемость кода. Во вторых тратят минимум памяти. В третьих - гибкие и удобные. Например сравним if i==1 и if i . В первом случае прога сначала сравнит i и 1, и в случае соответствия выдаст true (тип переменной учитывается, i=="1" выдаст false) А во втором случае сразу переменная передаёт false или true, увеличив скорость работы. Ещё одна фишка показана в коде button = not button. Что очень просто и легко обращает переменную. В ином случае тебе бы пришлось строить сложную схему if button==1 then button=0 else button=1 end что увеличило бы время работы программы и усложнило читаемость кода таким костылём. По всем критериям булева - это крутой тип данных! Впрочем, все типы данных круты, если использовать их по назначению. P.S. Помнишь я тебе говорил о том что нужно все важные локальные переменные выносить вверх? Я ведь этого не сделал с msg. А ведь мог вначале написать msg_1= и msg_2=. Но дело в том что изменять их значения нет смысла никому. Это не важные переменные. Да и памяти будет лучше если они будут удаляться после завершения функции так как это локальные переменные.
  17. У меня есть основания полагать что это была твоя прога, которая была на компе у игроков, так как там было 3 пароля: Для админа и ещё 2. В целом очень похоже на твою прогу. Тоже открывает двери, причём у игроков было 2 двери. И кажется 2 пароля как раз открывали эти двери по отдельности. Либо я ошибаюсь и третий пароль просто выходил из проги. Уже и не помню. Как взломал не скажу, в какой то степени потому что не помню. Но факт в том что на Ctrl+Alt+C закрыть прогу нельзя было и вызывалось сообщение об этом на компе. Насчёт конфигов, зачем тебе их записывать куда то? Это лишнее. Просто храни в программе всё что нужно как я показал. Так будет и проще и лучше. Я всегда в своих прогах сначала прогружаю библиотеки, потом задаю переменные, и лишь потом пишу функции. И всё что хранится в переменных у меня хранится именно в верхней части кода что очень удобно. Если вдруг кто захочет изменить параметры - сможет легко их изменить, не гуляя по коду в поисках где эта переменная была присвоена (как у тебя происходит с паролем). Так что старайся все важные переменные (которые игроки могут захотеть изменить) прописывать вначале кода. Так будет реально лучше. Ты говоришь про лень, мне кажется это отмазка. Использовать 1 и 0 вместо true и false - это плохая привычка. У всех кто более менее разбирается в lua или другом языке программирования, глаз режет подобный подход. Будешь учиться писать правильно - будешь привыкать. Привыкнешь к использованию всех типов данных по назначению - будет намного проще и удобнее программировать. Я вон за 3 часа 150 строк кода написал - в итоге рабочий кликер в майнкрафте. Для меня это уже достижение в скорости, но и это не предел. Вот тебе совет. Бери чужой код и разбирайся. В оптимизации это сильно помогает. А без оптимизации обучение стоит на месте. Тут один игрок мне подсказал как круто использовать оператор %, теперь я с радостью его использую там где мог бы быть костыль. Чужой код рулит.
  18. В таких случаях обычно ставят true и false. Такие переменные занимают всего 1 бит памяти как я понимаю. Так что для работы и чтения кода 0 и 1 писать - плохой вариант. Используй всю мощь разных типов данных lua. Вот прям сейчас зайди в гугл и забей: "типы данных lua", почитай повнимательнее что и для чего используется. P.S. Подумай о людях. Добавь в описание простую и удобную ссылку на код. А то я заметил, что при выкладывании работы многие недооценивают лень пользователей. Всё желание пропадает читать код, когда сам разработчик поленился прямую ссылку выложить. Извини, но это уже 100% быдлокод: local words = {"password=", "adminPass=", "redstone=", "RedCorr=", "RedIncor=", "network=", "port="} Правильно было бы написать вот так: local words = { password = "qwerty", adminPass = "asdfgh", redstone = true, RedCorr = 3, RedIncor = 3, network = false, port = 123 } А то как ты решил это меня совершенно не устраивает. Ты решил всё записать в строку, потом как то разрезать всё на кусочки и взять пароль. Спрашивается зачем? Можно было легко и удобно сразу все переменные задать и не мучится. А когда проверка на редстоун будет писать вот так: if redstone then ... end Пока redstone равна nil или false - условие не выполняется, в других же случаях выполняется. А в остальном код неплохой.
  19. Это случайно не тот замок что 2-3 месяца назад я взломал и поменял пароли? Там ещё 2 игрока жили в доме. И заприватил тоже я, если речь идёт про тот самый комп.
  20. qwertyMAN

    OpenClicker

    Этим сейчас и занимаюсь, а именно внедрением кнопок "buy" и "max" которые есть в большинстве хороших кликеров. Они будут доступны или закрыты в зависимости от денег. А так же подправлю баланс в сторону хардкора, ибо лучше сложно чем легко. Ждём обновлений. P.S. Я люблю жанр кликеров, но не могу понять в чём цель игры. Чтобы поиграть пока не надоест? Если подскажите какую цель внедрить, будет очень полезно. (вводить достижения смысла не вижу) Вообще весь жанр таких игр довольно противоречив. И игрок и разработчики как правило не в курсе чего хотят.
  21. qwertyMAN

    OpenClicker

    Технически это "работники" От них зависят сколько будет денег приходить в секунду. А клик - это отдельная функция, которая не зависит от времени. То есть счёт не обновляется? Странно, всё должно работать как надо. Но ладно, сейчас внесу некоторые правки для улучшения игры. Но два вопроса я сейчас не могу решить: это система сохранений и отображение больших чисел. Возможно позже разберусь и смогу внедрить их.
  22. qwertyMAN

    OpenClicker

    Что за автоклик? Насчёт баланса, я насчёт него особо не зацикливался, настроил более менее и всё. Да и не понимаю как большие числа хранить, переменные рано или поздно забьются. Что сильно ограничивает в настройке баланса.
  23. qwertyMAN

    OpenClicker

    Если хочешь, допиливай прогу, делай улучшения клика и выкладывай что получится. Главное в список авторов потом меня занеси.
  24. qwertyMAN

    OpenClicker

    Добрый день, игроки. Сегодня, вашему вниманию представляю игру, написанную под OpenOS - Open Clicker v0.1 Что есть в игре: Печенька по кторой можно кликать и зарабатывать деньги Покупка разного рода "рабочих" которые автоматически добывают печеньки Учёт заработка и текущих денежных средств По всем правилам кликеров здесь цена за "рабочих" с каждым разом покупки увеличивается Типичный кликер, наверное первый под OpenOS Выход из игры по нажатию кнопки "exit" или по достижению 10^2 денежных средств Возможность легко отрегулировать настройки игры (но не даю гарантии что с другими настройками будет всё адекватно работать) Защита от сочетания клавиш Ctrl+Alt+C Адекватная работа на компах 2 и 3 уровня (игра подгоняет экран под разрешение компа 2 уровня, а при выходе восстанавливает прежнее разрешение экрана) Возможность перезагрузить игру Сам жанр игры (поставил прокачиваться и ушёл по своим делам) Переключатель on/off (если включена, то игра сама завершится при 10^2 $ и более на счету) Скрины: Видео обзор: Чего нет в игре: Сохранений (при выходе все данные стираются. При выигрыше тоже) Учёта какой ник у игрока и прочей личной инфы о игроке Поддержки компов 1 уровня (из-за разрешения экрана) Установка игры: pastebin get -f bvxyh7fX OpenClicker.lua Код игры: http://pastebin.com/bvxyh7fX Если вы не полезете в настройки и код игры что то менять, думаю игра будет работать как надо. По крайне мере баланс мне кажется я настроил достаточно удачно, он практически такой же как и в других кликерах. С вами был qwertyMAN, удачной игры!
  25. Отредактировать OpenOS, добавить в него возможность копировать и вставлять текст из/в глобальную переменную text. Ну или можно найти где нибудь нормальный редактор под OpenOS. Кстати, я читал что блок адаптера может контактировать с звёздными вратами. Так что возможно у тебя и удастся передавать адреса. Поищи документацию по адаптеру.
×
×
  • Создать...