Перенос с другого сайта.
Возвращаюсь к программированию.
Прибрался в коде который привязан к игроку.
Разделил один скрипт на 4 и раскидал остальные по папкам.
И начал добавлять комментарии в код.
Продолжу прибираться в остальном коде.
К примеру на этом скриншоте можно объединить несколько проверок.
Но мне так удобнее. Меньше путаницы.
---
Из-за плохой оптимизации 2D освещения, пришлось всё возвращать назад.
Так как я буду добавлять ещё источники света, и чем больше этих источников, тем хуже работает.
Сейчас у меня 3D освещение в 2D мире.
Соответственно теней никаких нет.
И вернулась проблема, как скрыть карту которая находится за пределами видимости игрока.
Пришлось придумывать "Туман войны".
В итоге просто добавил "Заглушки" над каждым чанком.
Её нужно задеть лазером, чтобы она исчезла. Позже будет радар, который при активации удаляет эти заглушки в определённом радиусе.
Но я наверно попадание лазера заменю на луч. Иначе открытые участки карты, типа пещер, не будут открываться целиком, хотя технически их должно быть видно на всю глубину.
Это ещё будет настраиваться. Результатом пока доволен.
Луч настроил. Теперь через отверстие, можно разглядеть всю пещеру.
Обратный переход мне дался проще.
И я сейчас больше знаю о настройке света. как работать со слоями.
---
Реализовал доставку ресурсов для постройки зданий.
Такая же система будет отправлять ресурсы на переработку и складирование.
Ещё нужно реализовать подсчёт расстояния.
Чтобы был поиск не ближайшего здания, а здания с самым коротким расстоянием до главной базы.
Это не критично, но хочется добавить.
---
Хотел в новую версию игры добавить звук. Не получилось...
Совершенно не понятно как создавать эти звуки.
Я также куча времени тратил на подбор музыки для своих видео для игрового канала. В итоге плюнул и запускал одну и туже. Потом вообще перестал добавлять фоновую музыку.
Со звуками ещё хуже. Во первых их нужно правильно вырезать, иначе в начале и в конце появляется треск.
Даже сгенерировать или найти тоже проблема. отдельно слышится нормально. начинаешь добавлять в игру, и ощущения совершенно другие.
Пробовал скачивать готовые звуки с интернета и вырезать куски, пробовал сгенерировать через Bfxr.
Ничего путного не получается.
В итоге я буду тупо программистом. Мне для работы нужен будет геймдизайнер, художник и человек который занимается звуком.
Полноценно красивую игру я не создам в одиночку.
Пока продолжу просто изучать программирование.
Ещё могу быть тестировщиком.
---
Я устал воевать с Unity. К примеру сейчас он засвечивает спрайты, если вокруг него несколько источников освещения.
Я даже не знаю как сформировать вопрос для поисковика.
Я не могу найти причин.
Надоедает воевать с такими мелочами...
Никто не знает решения данной проблемы...
Пришлось увеличивать размер спрайта и на свет ставить режим Important
Покушал и меня отпустило. :)
Завтра продолжу бой.
Попробую потом увеличить размер спрайтов.
Хотя мне кажется, что это не поможет...
Это не должно так работать...
Создал вопрос в сообществе разработчиков. Буду ждать ответ...
---
Recycling the World v0.0.9
https://musinmihail.itch.io/recycling-the-world
В новой версии я убрал 2D освещение. Сильно снижает фпс. И убрал веб версию игры. Она тоже работает хуже.
Добавил доставку ресурсов для постройки зданий. И добавил фабрику для переработки ресурсов.
Сейчас синий ресурсы можно тратить на улучшения или копить, чтобы завершить текущую цель игры.
---
Пришло время создавать репозиторий.
Хорошо, что я когда-то пробовал это делать. И проблем не возникло.
А создал я его по причине того, что мне нужно было протестировать старую версию кода, но её уже не найти, а писать с нуля было лень.
И после создания я сообразил, что я могу удалить весь закомментированной код из скриптов, так как он сохранится в репозитории.
Теперь буду программировать по современному. : )
И в конце рабочей сессии сохранять изменения в репозиторий.
Я до этого делал архив на компьютере, но так будет удобнее. И видно какой код изменился.
---
Разработка затормозилась.
Есть некоторые идеи, но всё упирается в идею распределение ресурсов.
Чтобы эта система была умная и не тяжёлая.
Пока не получается в голове связать логику. Жду вдохновения.
Пока все решения занимают много операций для поиска пути движения.
Или она очень простая и её нельзя будут масштабировать при добавлении новых цепочек производства. Придётся для каждой цепочки создавать свою систему движения.
Я хочу чтобы игрок думал только о стратегии, и не занимался логистикой.
---
Реализовал поиск пути к одному зданию.
Теперь нужно протестировать поиск, если в игре несколько одинаковых зданий.
Нужно проверить какие здания свободны и выбирать ближайший из них.
И долго тестировать.
Потом переделывать старую систему доставки и добавлять новые цепочки производства.
Добавил несколько зданий. И даже на этом коде ищется ближайшее здание.
Так как до него меньше выполнений кода и результат возвращается быстрее.
Осталось только реализовать поиск свободного здания.
Ещё заметил что структура.
if(Nbase.name != "MainBase" || Nbase.name != deleted.name)
Не работает. В таком случае проверяется одно из двух.
Пришлось разделить
---
Заменил всю доставку ресурсов на новую.
Можно добавлять что-то новое и тестировать.
Сейчас достаточно навесить на новое здание один скрипт и включить здание в общую систему с помощью одной строчки кода.
Но для этого нужно ограничить проверку на поиск пути. а то код будет гулять кругами, от одного здания к другому.
И сейчас у меня вся база соединяется через главное здание.
И новое здание создаёт связь только с одним зданием.
Нужно будет попробовать сделать более сложную систему взаимосвязей.
А то видео будет некрасивое.
И для игры будет полезнее.
Нужно будет добавить ещё несколько строк кода.
Чтобы создать демонстрационное видео.
Хотя можно ещё добавить проверку на расстояние. Сейчас идёт проверка на количество зданий между точками
Но это не обязательно. Может позже.
---
Просматривая обучающие ролики по C# я решил начать писать программы.
А то мне иногда нужно делать рутинные повторяющиеся действия.
К примеру сейчас мне нужно проверять ip адреса, порты, логины и пароли.
Сейчас я эти проверки делая через 2 программы. А логины и пароли приходится вводить вручную для проверки.
В подробности я углубляется не буду. : )
Первый шаг сделан. Hello World!
---
Как же прикольно когда понимаешь что делать. :)
Нашёл как проверять пинг, и если есть доступ, то проверять порт.
Осталось разобраться как создать массив из файла и научится отправлять на проверку логин и пароль.
Есть конечно код который я не понимаю.
Я его просто скопировал, но по крайней мере я знаю что и как искать.
---
Разобрался с массивом. Теперь нужно изучать асинхронное или многопоточное выполнение кода.
А сейчас опрос каждого адреса идёт очень долго.
для пробы запихнул в файл несколько ип адресов.
Создал асинхронную работу. По крайней мере при данных условиях всё работает
Только одна проблема. Основной скрипт завершается быстрее, чем асинхронная работа.
Мне нужно выводить результат асинхронной работы в файл. Как вариант создавать отдельные файлы.
Разобрался как выводить данный в файл. Путём добавления строк в документ
Вроде с этим всё. Сейчас нужно диапазоны ип адресов перевести в список ип адресов.
Но это я сделаю просто перебором до 255.
И потом нужно научится отправлять запросы на проверку логина и пароля.
Но как я понимаю, у разных фирм разные методы. Нужно будет изучать документация.
---
Написал код который преобразует диапазон ип адресов в список.
Просто несколько циклов. Выглядит громоздко, даже не влезает на один экран, но работает.
Только заменить 20 на 255 и диапазон адресов перевести в 8 цифр.
К примеру
193.0.168.0-193.0.169.255
Хотя я предварительно могу в таблице всё объединить и добавить разделитель между цифрами.
И останется разобраться с запросом проверки логина и пароля.
Ради интереса сравниваю результаты с программой Advanced Port Scanner
И мой моя программа не видит того, что видит другая программа.
И я не могу определить когда заканчивает работу моя программа.
Приходится ждать неопределённое время.
Переменные в консольной программе немного по другому работают. Но я разобрался. Теперь могу следить когда программа закончит работать.
Хотя всё ровно странно. было 40 тысяч адресов.
и не обработались 300.
До сих пор странно работает.
Такое ощущение, что создаётся очень много потоков.
И часть данных теряется.
Каждый раз разное количество ип адресов находит.
В текущем коде я записываю адреса у которых есть доступ к порту. Это очень редко происходит.
Хотя речь же о диапазоне адресов. А то у меня голова думает о другом. Эта часть работает, я её так и оставил. : )
Только приходится удалить старый файл с созданными адресами перед новым запуском.
Пробовал перезаписывать файл при старте, но ошибка с доступом. Но не пробовал просто удалить через код.
Попробую перевести в массив. Это логичнее.
Но 40000 адресов он не так долго создаёт. Но в массив будет быстрее.
---
Немного исправил цикл. Удалил лишние данные и нашёл ошибку, забыл цифру 20 заменить на 255.
Добавил списки и в конце работы выгружаю всё в файлы.
700000 адресов обрабатываются примерно за 13 минут.
Только моя программа находит больше адресов у которых есть отклик.
Но нужно ещё тестировать. Чтобы искал нужные мне порты.
Сейчас нашёл диапазон для тестов. Стороння нашла 3 адреса.
А моя или ничего не находит или находит один и разные.
Ладно. Хватит играть с этим кодом. Продолжу создавать свою игру.
И всё ровно я вывожу список в файл не в самом конце работы программы.
Потоки могу закончить свою работу позже.
Для полной уверенности. мне нужно создавать свои потоки в начале.
Тогда я смогу проверить закончили они работу или нет.
---
Записал 2 часа видео с голосом, как я программирую игру.
Но не факт что видео выйдет. Ещё даже не пробовал монтировать.
В последнее время я работаю в DaVinci Resolve, и подобный монтаж я в нём не делал.
И я в игре гирлянду сделал. : )
---
сейчас ищу программу для запоминания действий клавиатуры и мыши. Чтобы сделать автоматизацию монтажа видео.
И снова подумал, что я же сам могу сделать такую программу. Нужно попробовать.
Но там нужно разбираться с фоновой обработкой запроса. Чтобы запускать программу, пока находишься в другом окне.
Позже этим займусь.
Пока установил программу Clickermann
Раньше ей пользовался.
Смонтировал 30 минут. Получилось 15. Многовато получается.
Ещё 90 минут монтировать.
Я просто ускоряю в 5 раз моменты, где я молчу.
Я могу ещё сократить итоговый результат. Удаляя больше лишних слов и звуков. Но я не хочу на это тратить время.
Я по большей части это делаю для себя, чтобы в будущем посмотреть и сравнить.
В итоге получилось 60 минут. Я думал будет меньше.
Сейчас звук настраиваю.
---
Понакрутил разных крутилок в настройках звука.
Убрал низкие частоты в голосе и убрал самые высокие.
Интересно, что через один эквалайзер мне не получилось удалить высокие частоты с сохранением остальных в нужном мне состоянии.
Сейчас буду слушать, запускать рендер, снова слушать и загружать на канал. И через несколько часов покажу что получилось.
Решил не слушать до рендера. А рендер таких маленьких кусочков идёт очень долго. Примерно 3 часа.
Я оказывается ещё фоновую музыку не обрезал а заготовка этой музыки у меня на 3 с лишним часа.
Придётся рендер по новой запускать.
Всё ровно приходится прослушивать в программе для монтажа.
Автокликер работает быстрее чем программа. И есть несколько ошибок. Я это не сразу заметил и уменьшил скорость.
И нужно удалить кашель вручную.
---
Создал видео с процессом создания игры.
В большей степени я его создал для себя, чтобы в будущем посмотреть.
Говорю я плохо, некоторые буквы и слова съедаю. Но другова меня у меня нет.
Звук я попытался отредактировать. Чтобы было не совсем плохо.
---
Мысленно возвращаюсь к своей программе по перебору ип адресов. И понял, что нужно создавать свои потоки или научится ограничивать существующие.
Сейчас начал пользоваться программой где можно менять количество потоков.
Когда ставлю 50, то видимо компьютер или какой-то узел не успевает обрабатывать такое количество запросов.
Установил 5, и всё работает стабильно. Пусть и медленнее.
А моя программа создаёт ещё больше потоков. Судя о логам.
---
Вроде я доделал проверку IP адресов.
Создаю потоки самостоятельно. И сделал ограничение на их количество.
И создаю отдельный файл, при нахождения порта.
При этом исчезает шанс, что к одному файлу будут обращается два потока.
Сначала я создавал массив и выводил его в конце. Но потоки не всегда прекращают работу и бесконечно висят.
Из-за этого я не могу вывести массив в файл.
И в этом варианте я могу не удалять полученные файлы при новом поиске. Если IP адреса совпадут, то файл просто будет переписан, а все остальные файлы не будут затронуты.
Пример на скриншоте. 1 поток не завершился. Можно найти способ ограничить время выполнения, но я не буду. вдруг на выполнение нужно много времени по каким то причинам.
А выключить программу я могу в любое время самостоятельно.
Но результаты всё ровно отличаются от сторонней программы. на скриншоте у меня 9 адресов по 2 порта. В другой программе 12 по 2.
Отключил проверку пинга. и порты стало видно.
Нужно другие варианты пробовать.
Выяснил если пинг вернул DestinationNetworkUnreachable, то к порту всё ровно можно подключится.
Поэтому поменял условие. Убираю только статус TimedOut. В остальных проверяю порт.
if (pingReply.Status != IPStatus.TimedOut)
В этом случае результаты совпадают со сторонней программой.
Сеть недоступна, а порт проверить можно. Странно.
Если ограничение увеличить до 100, то начинаются сбои.
Установил 200. нашлось всего 4 порта.
Вроде 50 потоков нормально работает. всегда находит 24 порта.
Хотя сейчас 23 нашёл...
В другой программе у меня тоже были сбои при 50.
Установил 40 потоков. обработал 257 адресов, нашёл 24 порта. За ~1:34
Advanced Port Scanner эту же работу выполнил за ~1:48.
Я доволен. : )
Сейчас осталось добавить обработку нескольких диапазонов из файла.
Я запустил 65000 адресов для теста. и решил посчитать.
Это больше шести часов...
Нужно будет сначала пинг собирать, и делать больше потоков.
И после уже обрабатывать порты.
Хотя если потоки всегда заняты, то нет смысла что-то менять.
Хотя я поменял ожидание с 5 секунд до 1.
Чтобы все 40 потоков были всегда заняты.
5000 адресов проверил за 30 минут. Но в тестовом диапазоне портов не было
---
Ещё одно видео, где я туплю и не понимаю что делаю
---
В моей программе была проблема. Если порт открыт, то на проверку тратится в среднем 400 миллисекунд. Если закрыт, то 3500.
Я долго соображал как ограничить эту проверку.
В итоге создал отдельный метод, передаю туда TcpClient, включаю таймер и отключаю TcpClient при завершения таймера.
Сделал ограничение в 1000 миллисекунд. в итоге 1000 адресов проверяются за 2 минуты.
Сейчас программа Advanced Port Scanner проверяет 4864 адреса за 4 минуты.
Моя программа примерно за 15 минут. Это 30 потоков.
Ограничил пинг до 500. Так как средний пинг 300. Результат обработки стал 6:30. Но поставил 1000. Иначе почему то некоторые проверки не проходили. Видимо моя задержка и средние 300, это разные показатели.
Хочется увеличить количество потоков, но теряются проверки. Куда исчезают не понятно. Просто возвращают ошибку проверки.
И реализовал создание массива из файла со списком диапазонов.
Я за эталон беру диапазон, где есть 24 открытых порта. Может не стоит на него ориентироваться.
Нужно ещё найти диапазоны.
Или просто найти список с открытыми портами. Чтобы тестировать.
Можно пользоваться сторонней программой. Но хочется своей.
И всё равно это всё ради обучения.
Ещё одно интересное наблюдение. Если обращается к одному адресу много раз. То открыт он будет только один раз.
В независимости от количества потоков....
---
Заменил TcpClient на Socket и все проблемы исчезли.
Убрал ограничение на количество потоков. В среднем автоматом идёт 300 потоков.
И убрал все ограничения на время выполнения операций. Они сейчас особо не нужны.
Ещё добавил отображение времени обработки.
Некоторые потоки всё ровно зависают, но это несколько штук на пару тысяч.
Просто умножаю количество оставшихся потоков на среднее время выполнение и завершаю работу через это время.
Провёл ещё один тест. Advanced Port Scanner обработал 32768 адресов за 25:40 И почему-то не нашла порты.
Моя программа за 18:30. И нашла несколько портов.
Если настраивать ограничение выполнения операция, то можно ещё быстрее. Но мне пока лень тестировать. И не хочется из-за ошибки терять данные.
Забыл добавить в код File.Create(@"C:\Programm\IP\37777_" + IP + ".txt");
И если кому не понятно, то эти знания мне помогут делать многопользовательскую игру.
Но сейчас мне эти знания нужны в другой области.
А сейчас он снова начал пропускать порты...
Как это понимать...
Или я так часто мучаю эти порты и видимо они на одном сервере, что сервер блокирует меня периодически.
Так как результаты всегда разные. иногда всё чётко иногда ерунду кажет.
Хотя сейчас несколько раз прогнал диапазона по 5 раз. и всё нормально...
Бред какой-то.
Лучше я не сделаю...
Но сейчас буду пользоваться своей программой.
Сейчас нужно делать программу для следующего шага. Но это я буду делать в одиночку.
---
Скомпилировал программу в Exe файл.
65000 адресов обработались за 1 минуту...
Я не думал, что внутри редактора скорость настолько низкая.
Видимо также как в Unity нужно часто компилировать и смотреть на результат в не программы.
Не обработал за 1 минуты. А создал потоки.
Сейчас нужно будет по новой тестировать и настраивать время.
А то я выставил время обработки одного потока в 120 милисекунд. И мне выдало в конце, что нужно ждать 7 минут. Это было 14 тысяч адресов примерно
В среднем он поддерживает 6000 потоков в таком варианте.
И он почти все потоки завершил за несколько секунд. Висеть осталось 90 из 14000.
---
Не получается собрать порты. Нужно изучать как делать другие проверки и понять почему порты вообще пропускаются при большой скорости обработке.
Пока пробую просто собирать открытые адреса и передавать их в другую программу.
Может позже буду пробовать сначала искать доступные адреса, а потом обрабатывать этот список. Разделить процессы.
Доступные адреса вроде нормально ищутся. есть отличия, но незначительные.
Хотя и порты у меня собираются тоже по-разному.
Отправил 900 доступных адресов в другую программу. Она увидела только 350...
Из-за таких отличий я и не понимаю что как работает.
Нет стабильных результатов. Тесты не помогают понять причин.
900 из 600000 адресов.
Видимо и пинг на высокой скорости работает плохо.
Но у меня и интернет мобильный. Это тоже может влиять.
Диапазоны адресов в список адресов приводятся быстро и всегда одинаково.
Так как все операции происходят на одном компьютере в одной программе.
А при работе с другими компьютерами и серверами, результаты разные.
Я "психанул" и загрузил 600 тысяч адресов в Advanced Port Scanner. И это на несколько часов.
Из 200 тысяч он нашёл 140 открытых адресов. Значит моя проверка работает нормально. Может примерно и получится 350.
Пусть проверяет дальше. Мне нужно хоть какие-то данные. Иначе я думаю, что моя программа ни на что не годна.
---
В процессе изучения консольных программ я понял, что вывод состояния работы можно выводить параллельно от работы программы.
До этого момента эти сообщения перегружали консоль текстом, или были очень редкими и было не понятно, на каком моменте программа виснет или работает не так как нужно.
Сейчас я запустил параллельно цикл который каждую минуты выводит мне состояние.
Программа от этого не стала работать лучше, но это мне поможет в будущем.
Я не забыл о игре. Я изучаю этот же язык программирования. Я далеко не отхожу.
Этот цикл я ещё буду переделывать. Чтобы при разных стадиях работы он выводил разную информацию.
---
Немного изменил отображение статуса. Разделил на стадии и уменьшил частоту появления.
Можно ещё уменьшить частоту.
Заменил в конце Main код Console.ReadLine(); на while (JobCheck != 4);
Иначе оставался шанс, что я случайно выключу программу.
Сейчас программа сама выключится, когда вся работа будет завершена.
Изменил на while (true);
и добавил Environment.Exit(0); для закрытия программы.
---
Перевёл консольную программу в Windows Form.
---
Небольшое видео, где я сокращаю некоторые части своего кода.
Постарался вырезать слова которые не несут особой смысловой нагрузки.
---
Сейчас буду изучать все вакансии для программиста C# и создавать сводную таблицу с требованиями. Чтобы понимать что изучать в первую очередь.
И создавать мини проект после изучения каждой технологии.
Свои игры и программы, а также занимается фрилансом я не готов.
---
Открыл несколько свежих вакансий. Даже есть джуниоры в нашем городе.
В том числе и удалённо.
Выписал от туда все технологии и непонятные слова.
Частенько попадалось требования к знаниям сайтоделов.
И почти везде работа с базой данных.
Сайты я раньше делал и с базой данных работал, но немного.
---
"Высшая математика"
---
Я вот задумался... Когда я делал консольную программу я использовала асинхронные потоки.
А если я их добавлю в игру. К примеру в генерацию мира. Чтобы мир грузился фоном и использовал только свободные ресурсы компьютера.
А то сейчас, если идёт загрузка мира, вся игра тормозит.
Нужно будет это реализовать. Если Unity поддерживает такую возможность.
Сейчас у меня основная нагрузка идёт на генерацию пещер. Я её особо не оптимизировал и у меня там много уничтожения блоков.
Поэтому на пещерах и буду пробовать.
Ещё немного подумал. У меня и так погрузка карты идёт асинхронно. У меня куча объектов и у каждого свой скрипт, который он выполняет.
Получается нужно придумать систему динамической задержки, в зависимости от производительности компьютера.
Первое что приходит в голову, это добавить проверку на фпс. Нужно будет изучить это вопрос, какие ещё есть варианты.