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

BenniShifer919

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

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

  • Посещение

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

    7

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


  1. 1 минуту назад, eu_tomat сказал:

    Картинки бесполезны из-за их размера. Чтобы увидеть различия между ними, приходится скролллить их вверх-вниз, удерживая детали в памяти. К таким усилиям я не готов, поэтому прекратил попытки ориентации по ним. Предлагаю вырезать из картинок всё несущественное, оставив только значимую часть. А подписи к картинкам имеет смысл как-то группировать, чтобы понимать принадлежность подписи к верхней или нижней картинке.

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

     

    2 минуты назад, eu_tomat сказал:

    Описание проблемы непонятное:

    Что значит "генерируется заново"? Как это проявляется? Что значит "в принципе некорректно работает"?

    Под "генерируется заново", я имею ввиду что мне кажется что карта генерируется вся с нуля, а "некорректно работает" я имею ввиду что оно по какой-то причине делает дубляжи, однако я уже понял почему прочитав твой пост

     

     

    3 минуты назад, eu_tomat сказал:

    Код я не стал читать полностью, но вижу странность в первых строчках. Предполагаю наличие аналогичной проблемы и в остальных участках.

    
        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

    Если развернуть этот цикл, то получим следующее:

    • Строка с номером 2 заполняется значениями из предыдущей строки, то есть из строки с номером 1.
    • Строка с номером 3 заполняется значениями из строки с номером 2, а по сути всё из той же строки с номером 1.
    • ...
    • Строка с номером sizeY заполняется значениями из строки с номером sizeY-1, а в конечном итоге из строки с номером 1.
    • Строка с номером 1 очищается.

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

    Да, действительно, спасибо что указал. Я попробую исправить данную проблему


  2. У меня есть такая функция:

    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

    Так вот, если я сдвигаю вправо/влево - все отлично! Но когда я пытаюсь вверх/вниз - это заставляет ВСЮ карту загенерироватся заново, хотя оно генерирует заново только пустые клетки. А также впринципе некорректно работает.

     

    Скрытый текст

    2023-11-05-163316.png
    Начальная позиция
    2023-11-05-163407.png
    Влево +1
    2023-11-05-163443.png
    Влево +2
    2023-11-05-163509.png
    Вправо +1
    2023-11-05-163549.png
    Вверх +1
    2023-11-05-163627.png
    Вниз +1

    Немогу понять причину возникновения бага.


  3. Делал граф библиотеку, главной идеей которой была сделать более удобную отрисовку. Ведь на СС ты не можешь просто поменять 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

     



    Надеюсь, это кому-то как либо поможёт, или будет интересно


  4. Здраствуйте люди и не очень! Представляю вам, свою мини-бродилку по лабиринту! Данную идею я пытался реализовать много раз, однако каждый раз бросал из-за того что не справлялся. Однако, в этот раз у мне что-то да вышло. Главное отличие этой попытки в несколько другой реализации комнат, но не суть.

    Что есть:

    • Голод, и жажда
    • Магазинчик
    • По комнатам могут появляться разные вещи, вроде монет, воды, и еды.
    • Процедурно генерируемая карта.

    Чего я бы хотел добавить в будущем:

    • Врагов! Однако у меня нету идей как реализовать боевку.
    • Увеличить карту с 3х3 до 7х7, и добавить улучшения.
    • Больше комнат. Каких именно я не знаю
    • Ловушки! Комнаты, в которых ты получаешь урон, но как-то можешь избежать его
    • Здоровье.

    Проблемы игры которые известны:

    • Проблемы с генерацией при ходьбе. Связано это с купой факторов вроде: Зона которая видна равна размеру всей карты. А также маленькая карта(всего 3х3).
       

    Цели игры:

    • Купить алкоголь в магазине за 500 монет
    • Достичь показателя в 666 монет

    Каждая цель даёт разную "концовку"


    Написал за 3 часа, тестировал только в CCemuX

    Пастебин

     

    Скрытый текст

    2023-11-05-122429.png
    2023-11-05-122733.png
    2023-11-05-122811.png

    • Нравится 3

  5. Произошёл микро апдейт, единственное, что поменялось - теперь нельзя скроллить если файлы не заполняют весь экран, или, если всё таки файлов больше чем может уместится, нельзя скроллить бесконечно вниз, скролл прекращается когда самый нижный файл показывается.


  6. Здраствуйте все люди и не очень! Представляю форуму и миру мой очень простой файловый менеджер, написал буквально за примерно час. Тестил только в CCEmuX.

     

    Его функционал:

    • Просмотр файлов и директорий(Неожиданно, правда?)
    • Переход между директориями
    • Создание новых файлов
    • Создание новых директорий
    • Удаление файлов/директорий
    • Перемещение файлов/директорий
    • Копирование файлов/директорий
    • Максимально ужасный интерфейс, и код
    • Скролл

    Единственное что нету в его функционале что, как лично я считаю нужен каждому проводнику - переименование и открытие файлов. На начале он был жутко лагучий, но буквально 10 минут оптимизации и он летает.

    Уместился в 311 строк

    Пастебин

    • Нравится 1

  7. 1 минуту назад, eu_tomat сказал:

    Зависит от того, какими подходами ты уже пользовался.

    Ну, как бы, в CC нет сложной работы с графикой. В CC можно передавать неправильные типы, в то время как в OC нужно использовать функции tostring()/tonumber() и подобные. В основном, я использовал принцип создания 1-2 независимых скриптов (да, это не самый лучший подход).

     

    2 минуты назад, eu_tomat сказал:

    Что именно в моде OpenComputers ты считаешь наиболее сложным?

    Самое сложное для меня в моде OpenComputers - это код-редактор, потому что использование внешних редакторов не удобно(Пусть и возможно), и, конечно же, сложная работа с графикой. В первую очередь, это касается "Больших" экранов, а также особенностей самой ОС.


  8. Я уже давно хочу перейти на OpenComputers, но всегда работал только с ComputerCraft. Ранее я пробовал, но все завершалось неудачно из-за специфики этого мода. Из-за этого у меня возник вопрос: как сделать этот переход более простым? Как адаптироваться к моду с совершенно другим подходом?


  9. Привет! Решил поделиться своим первым "мини" чатом, который работает по принципу IRC. Я создал его практически без опыта(С Socket.io), используя HTML, Node.js и Socket.io. На данный момент в чате можно изменить свой никнейм и цвет сообщений. Отправку сообщений я считаю стандартной функцией чата, так что не буду это уточнять.

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

    Программа весит 8 МБ, преимущественно из-за библиотек, необходимых для работы с Socket.io. Сам клиентский код всего лишь 8 КБ. О дизайне я особо не беспокоился, но это тоже может быть улучшено в будущем.

    Ссылка на Google Диск для ознакомления: ссылка.

    Буду рад вашей оценке и предложениям!

    Скрытый текст

    1085664961_2023-09-12005301.png.baca123fea2d821f3c9187aa6494ff0a.png1350863828_(1).png.08ac4d11b34c571d27a1f85e3d1afb90.png

    148398223_.png.0f9112124677efac30488f561c7bfab9.png

    • Грусть 1

  10. 58 минут назад, Taoshi сказал:

    Если задачи в целом стали выполняться медленнее, то одна из вероятных причин – понижение частоты работы процессора во время зарядки в разы Биос. Сам сталкивался с этим. Если это действительно так, то возможное решение – обновить Биос. В моем случае представитель техподдержки мне скинул файл в телеграм.

    У меня проблема в том, что у меня теперь при любых обстоятельствах частота ГПУ(Встроенная) всегда ровняется 100мгц. Раньше я мог запускать SEv2 на около максимальных в 30-45 фпс, то сейчас она даже и на низких нормальные 10 не выдает


  11. После того как я разобрал сегодня свой компьютер, чтобы установить дополнительную плашку памяти и жесткий диск (HDD), я столкнулся с проблемой. Я не установил ни то, ни другое (для HDD мне нужен специальный шлейф, который нельзя найти в моей стране, и моя оперативная память работает на DDR3, когда у меня DDR4). Я аккуратно собрал компьютер, не снимая ничего, кроме нижней крышки. Тепловые трубки и вентиляторы не были повреждены, и я не использовал компрессор. Однако, после сборки, компьютер начал тормозить в тяжелых задачах, с которыми он раньше справлялся на отлично (и с более сложными задачами тоже). Сначала я подумал, что проблема в вентиляторе, и что я не правильно подключил шлейф. Я разобрал компьютер снова, проверил - шлейф был на месте. Я даже запустил компьютер с разобранной крышкой, и вентилятор заработал (хотя и не сразу). Я не знаю, что делать. У меня была мысль сдать компьютер по гарантии, но я не хочу объяснять, почему он разобран, и, технически, это моя вина. Также, не хочу нести его в сервисный центр.


  12. 4 минуты назад, eu_tomat сказал:

    Тогда ещё один вопрос. Скорость разогрева этого реактора не зависит от его температуры, или же возможен саморазгон?

     

    В целом, в целом, уже говорили про то, что при нагреве можно выдавать редстоун. Можно сделать программу которая запускает реактор, ждёт сигнала редстоуна, и ещё какие-либо действия. Это позволить вычеслить только время нагрева, и, если, как сказано, температура никак не влияет, то можно в целом через разделение получить нагрев. Правда, долго наверное будет? + Ещё нужно знать охлаждение, но здесь можно просто ждать когда сигнал перестанет подаватся, и уже данную информацию использовать


  13. 30 минут назад, eu_tomat сказал:

    Вряд ли для этого потребуется какой-то новый язык, когда уже есть Lua. И чтобы не изобретать лишнего, надо понять задачу и систематизировать её условия. А с этим пока имеются проблемы, я пока не уверен, что точно понимаю все условия. Если ты знаком с механикой этих реакторов, растолкуй, как оно работает. А всякие там языки, форматы и API — вторичны.

     

    Я обычно никогда не играю с модами такого плана. Могу только как в Draconic Evolution реактор сделать, а до того как увидел данную тему о данном моде вообще не знал(Вообще думал опечатка с Fussion Reactor)


  14. Можно сделать какой-то простой API, и написать для каждого отдельно, или, теоретически можно ещё изобрести велосипед свой язык. Типа там с условиями, и апи, но это уже какой-то идиотизм. Пусть и сделает мелкие корректировки более простыми

     


  15. 10 часов назад, eu_tomat сказал:

    Надо попробовать придумать какой-то компактный способ хранения этих характеристик. Тогда можно было бы задавать схему заполнения реактора в файлах конфигурации нашей программы.


    А что, если использовать HEX? Или что-то в этом роде? Допустим, у нас есть файл, где длина каждой строки - это ширина сетки, а высота - высота. Каждому элементу дать свой номер от 0 до 15, и номер можно хранить в формате HEX. F - это 15-й элемент. Но здесь также важно знать, сколько элементов в целом, ибо если их больше, может потребоваться использовать 2 разряда, или же добавлять свои(Буквы).

     


  16. Обновление

    Изменения в клиенте:

    • Добавлена возможность изменять ID роутера, к которому будет выполняться подключение.
    • Теперь можно менять пароль для подключения.
    • Разработка графического клиента завершается, сфокусирована на реализации практического функционала.

    Изменения в роутере:

    • Внедрена поддержка сообщений (основной задумки проекта).
    • Исправлены некоторые моменты.

    API для клиентской части:

    • Разработка API близка к завершению.

    Ссылки на пастебины остаются такими же:

     

    Также, если вы захотите попробовать код, не бейте меня тапком, ибо это мой первый проект подобного формата :smile44:


  17. 47 минут назад, eu_tomat сказал:

    Но почему ничего не сказано про работу сети? Какую функцию выполняет роутер? Каков протокол обмена сообщениями?

     

    Например, у моего соседа подключены три компьютера, и я хочу передать сообщение на один из них. Как это сделать?

    Отвечаю: Пока-что, особо не как. Ибо я сосредоточился на другом, но это уже в процессе и совсем скоро будет доступно


  18. В общем, я задумал создать что-то вроде Wi-Fi с защищенной сетью, подключением и доступом к внешним подключенным серверам и т.п. Пока что функций в нем не так уж и много, но я планирую его развивать. Вот основные функции на данный момент:

    Роутер:

    • Умеет хранить данные о том, кто подключен.
    • Имеет "уровни доступа" — чем ниже уровень, тем больше возможностей.
    • Можно менять пароль.
    • Есть возможность удалять из сети и блокировать подключения.

    Клиент:

    • Возможность менять имя.
    • Просмотр списка участников роутера (в зависимости от уровня доступа будет видна разная информация).
    • Изменение состояния видимости (видно/не видно).

    Требования: Важно! Для корректной работы требуются мониторы, для роутера минимум 6 в длину и желательно 2 в высоту. Для клиента нужны мониторы размером 3x4. Роутер может продолжать работать даже без монитора, в то время как клиент не запустится без него.

    Планы:

    • Добавить взаимодействие с клиентами. Уже есть база
    • Добавить управление через терминал.
    • Расширить функционал.
    • Добавить возможность изменения названия сети и ее видимости (я начал делать сеть, но забыл о хосте, теперь нужно будет внедрять).
    • Реализовать шифрование.
    • Обеспечить доступ к внешним серверам.
    • Разработать что-то вроде API.
    • И много другого.

    Как попробовать:

    Известные баги:

    • По какой-то причине сломалась смена ника.

     


  19. 2 минуты назад, eu_tomat сказал:

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

    Мне не комфортно спрашивать людей что-то вроде "Как отобразить результат 2+2", это конечно не лучший пример, но для знатаков он будет на этом уровне.

     

    3 минуты назад, eu_tomat сказал:

    На доки наговаривать не надо, документация весьма хороша. Да, в документации некоторые нюансы отсутствуют. Так оно так и в реальной жизни зачастую бывает. Можешь считать игру с OC симулятором разработчика ПО.

    Я не наговариваю, лично мне они не понятны, а еще, меня ставит в ступор недопонимание и раздражение то, что вы это максимально сравниваете с реальной жизнью

×
×
  • Создать...