BenniShifer919
-
Публикации
67 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Сообщения, опубликованные пользователем BenniShifer919
-
-
У меня есть такая функция:
function shiftMap(direction) if direction == "down" then for y=2,sizeY,1 do for x=1,sizeX,1 do map[y][x] = map[y-1][x] end end for x=1,sizeX,1 do map[1][x] = nil end elseif direction == "right" then for y=1,sizeY,1 do for x=2,sizeX,1 do map[y][x] = map[y][x+1] end end for y=1,sizeY,1 do map[y][sizeX] = nil end elseif direction == "top" then for y=sizeY-1,1,-1 do for x=1,sizeX,1 do map[y][x] = map[y+1][x] end end for x=1,sizeX,1 do map[sizeY][x] = nil end elseif direction == "left" then for y=1,sizeY,1 do for x=sizeX-1,1,-1 do map[y][x] = map[y][x-1] end end for y=1,sizeY,1 do map[y][1] = nil end end end
Так вот, если я сдвигаю вправо/влево - все отлично! Но когда я пытаюсь вверх/вниз - это заставляет ВСЮ карту загенерироватся заново, хотя оно генерирует заново только пустые клетки. А также впринципе некорректно работает.
Скрытый текст
Начальная позиция

Влево +1

Влево +2

Вправо +1

Вверх +1

Вниз +1Немогу понять причину возникновения бага.
-
Делал граф библиотеку, главной идеей которой была сделать более удобную отрисовку. Ведь на СС ты не можешь просто поменять 1 пиксель или узнать его, а если попробуешь - то весь остальной текст сдвинется. Что, как по мне, не очень удобно, поэтому я принялся писать библиотеку. Стало сразу понятно что перерисовывать каждый кадр с нуля - не самая лучшая идея, из-за чего была добавлена двойная буферизация. Скорее всего не самая эффективная, но простая. Вообщем, сначала вроде всё даже шло хорошо, но потом начали появлятся баги, причину и даже место возникновения которых я не мог найти, баги, которые появляются из воздуха которых быть не должно впринципе, из-за чего я забросил это затею. Может кому-то будет интересно потыкать, дополнить, или, может, даже понять в чем проблема и где я свернул не туда.
Тестовый код:Скрытый текстlocal mrl = require("mrl_cc") local w,h = term.getSize() local pastFrame,newFrame = mrl.generate(w,h),mrl.generate(w,h) term.setBackgroundColor(colors.black) term.clear() while true do local colors = { colors.white, colors.orange, colors.magenta, colors.lightBlue, colors.yellow, colors.lime, colors.pink, colors.gray, colors.lightGray, colors.cyan, colors.purple, colors.blue, colors.brown, colors.green, colors.red, colors.black, } local x = math.random(1,w) local y = math.random(1,h) local color = colors[math.random(1,16)] local tColor = colors[math.random(1,16)] local symbol = math.random(1,256)-1 --newFrame = mrl.blit(x,y,string.char(symbol),color,tColor,pastFrame) --newFrame = mrl.blit(x,y,"t",colors.black,colors.white,pastFrame) --pastFrame = newFrame newFrame[y][x] = mrl.fBlit(string.char(symbol),color,tColor) mrl.update(pastFrame,newFrame,term) sleep(0.001) end
Сама библиотека:
Скрытый текстlocal module = {} local function getDifference(pastFrame,newFrame) local changedID = {} for i=1,#pastFrame,1 do table.insert(changedID,nil) end for y=1,#pastFrame,1 do for x=1,#pastFrame[y],1 do if pastFrame[y][x] ~= newFrame[y][x] then changedID[y] = x break end end end return changedID end local function redrawLine(y,index,data,trm,w) term.setCursorPos(index,y) if #data < w-index then for i=1,w-index-#data do table.insert(data, {cnt = " ", }) end end for i=1,#data,1 do trm.setBackgroundColor(data[i].bc) trm.setTextColor(data[i].tc) trm.write(data[i].cnt) end end --[[function module.blit(x,y,content,backgroundColor,textColor,canvas) local nC = canvas if #canvas >= y then if #canvas[y] >= x then nC[y][x] = {cnt = content, tc = textColor, bc = backgroundColor} --nC[1][3] = {cnt = "t", tc = colors.white, bc = colors.black} return nC end end return false, -1, "Wrong coordinates" end]] function module.fBlit(con,bgC,tC) return {cnt = con, bc = bgC, tc = tC} end function module.fillLine(y,color,canvas) if #canvas >= y then if #canvas[y] > 0 then for i=1,#canvas[y],1 do canvas[y][i] = {cnt = " ", tc = color, bc = color} end return canvas end end return false, -12, "Wrong coordinates" end function module.clear(color,canvas) if #canvas >= 0 then if #canvas[1] > 0 then for x=1,#canvas,1 do for y=1,#canvas[x],1 do canvas[y][x] = {cnt = " ", tc = color, bc = color} end end return canvas end end return false, -8, "Wrong canvas" end function module.update(pastFrame,newFrame,terminal) local diff = getDifference(pastFrame,newFrame) for i=1,#diff,1 do if diff[i] ~= nil then local extData = {} for x=diff[i],#newFrame[i],1 do table.insert(extData, newFrame[i][x]) end redrawLine(i,diff[i],extData,terminal,#pastFrame[1]) end end end function module.generate(w,h) local canvas = {} for y=1,h,1 do table.insert(canvas,{}) for x=1,w,1 do table.insert(canvas[y],{cnt = "", tc = colors.white, bc = colors.black}) end end return canvas end return module
Надеюсь, это кому-то как либо поможёт, или будет интересно -
Здраствуйте люди и не очень! Представляю вам, свою мини-бродилку по лабиринту! Данную идею я пытался реализовать много раз, однако каждый раз бросал из-за того что не справлялся. Однако, в этот раз у мне что-то да вышло. Главное отличие этой попытки в несколько другой реализации комнат, но не суть.
Что есть:- Голод, и жажда
- Магазинчик
- По комнатам могут появляться разные вещи, вроде монет, воды, и еды.
- Процедурно генерируемая карта.
Чего я бы хотел добавить в будущем:
- Врагов! Однако у меня нету идей как реализовать боевку.
-
Увеличить карту с 3х3 до 7х7, и добавить улучшения. -
Больше комнат. Каких именно я не знаю - Ловушки! Комнаты, в которых ты получаешь урон, но как-то можешь избежать его
- Здоровье.
Проблемы игры которые известны:
-
Проблемы с генерацией при ходьбе. Связано это с купой факторов вроде: Зона которая видна равна размеру всей карты. А также маленькая карта(всего 3х3).
Цели игры:
- Купить алкоголь в магазине за 500 монет
- Достичь показателя в 666 монет
Каждая цель даёт разную "концовку"
Написал за 3 часа, тестировал только в CCemuX
Пастебин
Скрытый текст

-
3
-
Произошёл микро апдейт, единственное, что поменялось - теперь нельзя скроллить если файлы не заполняют весь экран, или, если всё таки файлов больше чем может уместится, нельзя скроллить бесконечно вниз, скролл прекращается когда самый нижный файл показывается.
-
Здраствуйте все люди и не очень! Представляю форуму и миру мой очень простой файловый менеджер, написал буквально за примерно час. Тестил только в CCEmuX.
Его функционал:
- Просмотр файлов и директорий(Неожиданно, правда?)
- Переход между директориями
- Создание новых файлов
- Создание новых директорий
- Удаление файлов/директорий
- Перемещение файлов/директорий
- Копирование файлов/директорий
- Максимально ужасный интерфейс, и код
- Скролл
Единственное что нету в его функционале что, как лично я считаю нужен каждому проводнику - переименование и открытие файлов. На начале он был жутко лагучий, но буквально 10 минут оптимизации и он летает.
Уместился в 311 строк
Пастебин-
1
-
Это нужно все граф. операции под API мода переписать. Там вроде не сложно только компонент поменять, но я не уверен т.к. сам с ОС не играю и не пишу
-
Да там по идеи и без модов можно(Не считая ОС + Форестри)
-
1 минуту назад, eu_tomat сказал:Зависит от того, какими подходами ты уже пользовался.
Ну, как бы, в CC нет сложной работы с графикой. В CC можно передавать неправильные типы, в то время как в OC нужно использовать функции tostring()/tonumber() и подобные. В основном, я использовал принцип создания 1-2 независимых скриптов (да, это не самый лучший подход).
2 минуты назад, eu_tomat сказал:Что именно в моде OpenComputers ты считаешь наиболее сложным?
Самое сложное для меня в моде OpenComputers - это код-редактор, потому что использование внешних редакторов не удобно(Пусть и возможно), и, конечно же, сложная работа с графикой. В первую очередь, это касается "Больших" экранов, а также особенностей самой ОС.
-
Я уже давно хочу перейти на OpenComputers, но всегда работал только с ComputerCraft. Ранее я пробовал, но все завершалось неудачно из-за специфики этого мода. Из-за этого у меня возник вопрос: как сделать этот переход более простым? Как адаптироваться к моду с совершенно другим подходом?
-
11 час назад, BenniShifer919 сказал:Конечно! Даже сейчас займусь ним. Осталось только найти железные нервы чтобы разобратся как он работает
Ну, в общем, разобрался, Вроде-бы
-
1
-
-
2 часа назад, ov3rwrite сказал:А репозиторий в гитхабе будет? Хотелось бы поглядеть
Конечно! Даже сейчас займусь ним. Осталось только найти железные нервы чтобы разобратся как он работает
-
1
-
-
Извините, планы немного изменились. Весь день я потратил на доработку дизайна и исправление мелких ошибок. Сегодня ничего не выйдет, извините.
-
1
-
-
-
Привет! Решил поделиться своим первым "мини" чатом, который работает по принципу IRC. Я создал его практически без опыта(С Socket.io), используя HTML, Node.js и Socket.io. На данный момент в чате можно изменить свой никнейм и цвет сообщений. Отправку сообщений я считаю стандартной функцией чата, так что не буду это уточнять.
В будущем планирую добавить новые функции, такие как различные каналы и личные сообщения, а возможно, даже функцию хранения истории сообщений. Однако, не могу обещать ничего.
Программа весит 8 МБ, преимущественно из-за библиотек, необходимых для работы с Socket.io. Сам клиентский код всего лишь 8 КБ. О дизайне я особо не беспокоился, но это тоже может быть улучшено в будущем.
Ссылка на Google Диск для ознакомления: ссылка.
Буду рад вашей оценке и предложениям!
Скрытый текст
-
1
-
-
58 минут назад, Taoshi сказал:Если задачи в целом стали выполняться медленнее, то одна из вероятных причин – понижение частоты работы процессора во время зарядки в разы Биос. Сам сталкивался с этим. Если это действительно так, то возможное решение – обновить Биос. В моем случае представитель техподдержки мне скинул файл в телеграм.
У меня проблема в том, что у меня теперь при любых обстоятельствах частота ГПУ(Встроенная) всегда ровняется 100мгц. Раньше я мог запускать SEv2 на около максимальных в 30-45 фпс, то сейчас она даже и на низких нормальные 10 не выдает
-
После того как я разобрал сегодня свой компьютер, чтобы установить дополнительную плашку памяти и жесткий диск (HDD), я столкнулся с проблемой. Я не установил ни то, ни другое (для HDD мне нужен специальный шлейф, который нельзя найти в моей стране, и моя оперативная память работает на DDR3, когда у меня DDR4). Я аккуратно собрал компьютер, не снимая ничего, кроме нижней крышки. Тепловые трубки и вентиляторы не были повреждены, и я не использовал компрессор. Однако, после сборки, компьютер начал тормозить в тяжелых задачах, с которыми он раньше справлялся на отлично (и с более сложными задачами тоже). Сначала я подумал, что проблема в вентиляторе, и что я не правильно подключил шлейф. Я разобрал компьютер снова, проверил - шлейф был на месте. Я даже запустил компьютер с разобранной крышкой, и вентилятор заработал (хотя и не сразу). Я не знаю, что делать. У меня была мысль сдать компьютер по гарантии, но я не хочу объяснять, почему он разобран, и, технически, это моя вина. Также, не хочу нести его в сервисный центр.
-
4 минуты назад, eu_tomat сказал:Тогда ещё один вопрос. Скорость разогрева этого реактора не зависит от его температуры, или же возможен саморазгон?
В целом, в целом, уже говорили про то, что при нагреве можно выдавать редстоун. Можно сделать программу которая запускает реактор, ждёт сигнала редстоуна, и ещё какие-либо действия. Это позволить вычеслить только время нагрева, и, если, как сказано, температура никак не влияет, то можно в целом через разделение получить нагрев. Правда, долго наверное будет? + Ещё нужно знать охлаждение, но здесь можно просто ждать когда сигнал перестанет подаватся, и уже данную информацию использовать
-
30 минут назад, eu_tomat сказал:Вряд ли для этого потребуется какой-то новый язык, когда уже есть Lua. И чтобы не изобретать лишнего, надо понять задачу и систематизировать её условия. А с этим пока имеются проблемы, я пока не уверен, что точно понимаю все условия. Если ты знаком с механикой этих реакторов, растолкуй, как оно работает. А всякие там языки, форматы и API — вторичны.
Я обычно никогда не играю с модами такого плана. Могу только как в Draconic Evolution реактор сделать, а до того как увидел данную тему о данном моде вообще не знал(Вообще думал опечатка с Fussion Reactor)
-
Можно сделать какой-то простой API, и написать для каждого отдельно, или, теоретически можно ещё изобрести
велосипедсвой язык. Типа там с условиями, и апи, но это уже какой-то идиотизм. Пусть и сделает мелкие корректировки более простыми -
10 часов назад, eu_tomat сказал:Надо попробовать придумать какой-то компактный способ хранения этих характеристик. Тогда можно было бы задавать схему заполнения реактора в файлах конфигурации нашей программы.
А что, если использовать HEX? Или что-то в этом роде? Допустим, у нас есть файл, где длина каждой строки - это ширина сетки, а высота - высота. Каждому элементу дать свой номер от 0 до 15, и номер можно хранить в формате HEX. F - это 15-й элемент. Но здесь также важно знать, сколько элементов в целом, ибо если их больше, может потребоваться использовать 2 разряда, или же добавлять свои(Буквы). -
Обновление
Изменения в клиенте:
- Добавлена возможность изменять ID роутера, к которому будет выполняться подключение.
- Теперь можно менять пароль для подключения.
- Разработка графического клиента завершается, сфокусирована на реализации практического функционала.
Изменения в роутере:
- Внедрена поддержка сообщений (основной задумки проекта).
- Исправлены некоторые моменты.
API для клиентской части:
- Разработка API близка к завершению.
Ссылки на пастебины остаются такими же:
Также, если вы захотите попробовать код, не бейте меня тапком, ибо это мой первый проект подобного формата
-
47 минут назад, eu_tomat сказал:Но почему ничего не сказано про работу сети? Какую функцию выполняет роутер? Каков протокол обмена сообщениями?
Например, у моего соседа подключены три компьютера, и я хочу передать сообщение на один из них. Как это сделать?
Отвечаю: Пока-что, особо не как. Ибо я сосредоточился на другом, но это уже в процессе и совсем скоро будет доступно
-
В общем, я задумал создать что-то вроде Wi-Fi с защищенной сетью, подключением и доступом к внешним подключенным серверам и т.п. Пока что функций в нем не так уж и много, но я планирую его развивать. Вот основные функции на данный момент:
Роутер:
- Умеет хранить данные о том, кто подключен.
- Имеет "уровни доступа" — чем ниже уровень, тем больше возможностей.
- Можно менять пароль.
- Есть возможность удалять из сети и блокировать подключения.
Клиент:
- Возможность менять имя.
- Просмотр списка участников роутера (в зависимости от уровня доступа будет видна разная информация).
- Изменение состояния видимости (видно/не видно).
Требования: Важно! Для корректной работы требуются мониторы, для роутера минимум 6 в длину и желательно 2 в высоту. Для клиента нужны мониторы размером 3x4. Роутер может продолжать работать даже без монитора, в то время как клиент не запустится без него.
Планы:
- Добавить взаимодействие с клиентами. Уже есть база
- Добавить управление через терминал.
- Расширить функционал.
- Добавить возможность изменения названия сети и ее видимости (я начал делать сеть, но забыл о хосте, теперь нужно будет внедрять).
- Реализовать шифрование.
- Обеспечить доступ к внешним серверам.
- Разработать что-то вроде API.
- И много другого.
Как попробовать:
Известные баги:
- По какой-то причине сломалась смена ника.
-
2 минуты назад, eu_tomat сказал:Собственно, для этого и существует форум. Кто-то спрашивает, кто-то отвечает, кто-то корректирует. По возможности, конечно. Не всегда и не у всех есть время ответить, не всегда собеседник кажется приятным человеком, не всегда есть нужное настроение, не всегда интересен вопрос. Всякое бывает. Но на корректно заданные вопросы на этом форуме ответы поступают почти всегда.
Мне не комфортно спрашивать людей что-то вроде "Как отобразить результат 2+2", это конечно не лучший пример, но для знатаков он будет на этом уровне.
3 минуты назад, eu_tomat сказал:На доки наговаривать не надо, документация весьма хороша. Да, в документации некоторые нюансы отсутствуют. Так оно так и в реальной жизни зачастую бывает. Можешь считать игру с OC симулятором разработчика ПО.
Я не наговариваю, лично мне они не понятны, а еще, меня ставит в ступор недопонимание и раздражение то, что вы это максимально сравниваете с реальной жизнью

Некорректно рабочая функция
в Помогите найти ошибку
Опубликовано:
Да, действительно, может потом вырежу самую нужную часть
Под "генерируется заново", я имею ввиду что мне кажется что карта генерируется вся с нуля, а "некорректно работает" я имею ввиду что оно по какой-то причине делает дубляжи, однако я уже понял почему прочитав твой пост
Да, действительно, спасибо что указал. Я попробую исправить данную проблему