• Почему мой код работает медленнее?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    В более быстром варианте вот тут за константное время проверка делается.
    if (track.ContainsKey(chest))
            {
              yield return track[chest];
              continue;
            }

    У тебя она сделана через цикл:
    for (int i = 0; i < chests.Length; i++)
                    {
                        if (point.Value.Equals(chests[i]))
                        {
                            yield return point;
                        }
                    }

    Если я не туплю, и эти куски действительно делают одно и то же.

    А вообще более детально разобраться в причинах низкой скорости ты можешь:
    1. При помощи бенчмарков (гугли BenchmarkDotNet)
    2. Посмотрев на листинг кода, который генерирует компилятор (смотри sharplab)
    3. Путём профайлинга - посмотри на dotmemory и dottrace
    Ответ написан
    Комментировать
  • Для чего же нужны указатели?

    Nipheris
    @Nipheris Куратор тега C++
    Ну и я тогда тоже попробую.

    Посмотрим на вопрос с другой стороны.
    Переменная - это контейнер для значения. Что нам вообще нужно для работы с переменной? Что нам нужно, чтобы считать/записать значение из/в нее? Нам нужны тип данных и адрес в памяти.
    Тип данных - отдельная история, оставим пока его в стороне. Скажем только, что он определяет допустимые операции со значением и количество памяти, необходимое для хранения значения.
    Поговорим об адресе. В языках, где доступна прямая работа с памятью, любая переменная имеет свой адрес в памяти. Также, в чуть более узком смысле, переменная находится в такой области памяти, в которую разрешена запись. Не имеет особого значения, какой структурой данных управляется эта память - стеком или кучей - важно, чтобы на момент использования эта память была доступна.
    Корректный адрес в памяти - это и уникальный "ключ" переменной, ее отличительная черта. Работая с переменными, программист на низкоуровневом языке неизбежно работает с адресами.
    Другой вопрос - это способ работы с адресом переменной. Когда вы создаете обычную локальную переменную, в работе с ней принимает участие компилятор. Когда вы пишете int a, компилятор (если не вдаваться в детали) размещает у себя в таблице идентификаторов пару: (имя_переменной, адрес_в_памяти). Обычная локальная переменная "а" (еще ее называют "автоматическая переменная") - способ создания переменной средствами компилятора. Компилятор освободит память, занимаемую этой переменной, когда она уйдет из области видимости. Однако, пока вам точно известно, что эта переменная "живет", вы можете совершенно спокойно получить ее адрес с помощью операции & - компилятор отдаст вам его из своей таблицы идентификаторов.

    Но "переменные" в широком смысле можно создавать не только средствами компилятора, но и вручную с помощью malloc (Си) или new (С++). Эти динамические переменные живут столько, сколько вам нужно - вы их создаете, вам их и уничтожать. Об этих переменных компилятор ничего не знает, т.к. вы создаете их динамически во время выполнения программы. Для доступа к этим переменным вам также нужен адрес, но у компилятора его не попросишь: поэтому необходимо самому сохранять те адреса, что вернули вам функция malloc или оператор new. Этот адрес вы можете сохранить в ДРУГОЙ переменной, и такая переменная, хранящая адреса - и есть указатель (кроме того, если указатель не бестиповый (void*) то его тип (float*) еще и подсказывает нам тип переменной, на которую он указывает (float)).

    Очень важно, что в указатель можно сохранить адрес ЛЮБОЙ переменной - как автоматической, которую вам создал компилятор, так и "ручной" - которую создали ВЫ с помощью malloc/new. И передать, например, этот адрес в функцию. Фактически, в языке Си указатели это и есть способ передачи САМОЙ ПЕРЕМЕННОЙ в функцию, а не ее ЗНАЧЕНИЯ на момент вызова. В C++ есть еще ссылки, но это отдельная история (ссылки - это указатель, "обернутый" в обычный идентификатор), по ним задайте отдельный вопрос.

    если можно напрямую данной переменной присвоить новое значение.

    Как раз таки "напрямую" вы не присвоите, т.к. у вас не может быть в одной области видимости ВСЕХ переменных, имеющихся в программе. Хотя бы потому, что у вас могут быть динамические переменные, и единственный способ работы с ними - работать через указатель.

    Если вы никогда не работали с динамической памятью, вы можете спросить, какой смысл в "ручных" переменных, если для хранения их адреса нужна парная переменная-указатель? А вся фишка в том, что адрес динамически созданной переменной также можно хранить в динамически созданном указателе. Тут-то и открывается вся бесконечная свобода построения динамических структур данных. Если вы не слышали про связный список, то самое время почитать хорошую книгу с примерами. В одном ответе этого не расскажешь, это основы программирования.
    Ответ написан
    Комментировать
  • Стоит ли идти на работу помощником программиста (удаленщика-фрилансера)?

    opium
    @opium
    Просто люблю качественно работать
    Ну не заплатили за месяц это ни о чем, минимальный риск, ну а если он гей и вы попадете на гейскую груповуху это да, надо сто пудов отказываться
    Ответ написан
    5 комментариев
  • На каком языке лучше писать анти чит для игры на unity?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    На логическом.
    Если нет смысла взламывать игру, ее не будут взламывать. Придумайте чтобы взламывать было неинтересно и банальная защита от дурака.
    Ответ написан
    1 комментарий
  • Как работают ObscuredTypes у Anticheat?

    ayazer
    @ayazer
    Sr. Software Engineer
    как-то так

    public struct WrappedInt
        {
            private readonly int _value;
    
            public WrappedInt(int val)
            {
                _value = val;
            }
    
            public static implicit operator WrappedInt(int val)
            {
                return new WrappedInt(val);
            }
    
           ... 
        }
    
    ....
    
    WrappedInt wrapped = 1;
    Ответ написан
    Комментировать
  • Существуют ли аналоги приложения Timera?

    @Bebson Автор вопроса
    Нашёл!!!
    Overlay Camera - то, что хотел!
    С подачи приглашённого эксперта, искал по словам Before and After, Now & Then, rephoto, overlay. Причём, сначала искал в apple, потом в гугле.
    Нарыл несколько других, похожих, но без возможности использовать свои фотографии:
    ReFotografie
    Рефото Ajapaik
    Hier et Aujourd'hui

    Там фото берутся из сетевых баз, с привязкой к картам.
    вопрос решён!
    Ответ написан
    Комментировать
  • Онлайн-дизайнер схем баз данных MySQL

    andycaramba
    @andycaramba
    Web Developer (JavaScript, PHP, Anything else)
    Посмотрите на WWW SQL Designer
    Сам иногда использую для простых схем. Вполне удобно. Скрипт можно развернуть у себя. Правда нет никаких аккаунтов на сервере, но позволяет сохранять в Local Storage.
    Ответ написан
    Комментировать
  • Какой движок выбрать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Странный вопрос. Если вы хорошо знаете Unity и EU4, то как бы можете не спрашивать, а отвечать на подобные вопросы. Ладно, будем считать, что вы и правда хорошо в них разбираетесь.

    • Unity имеет преимущество в том, что ниже порог входа. Вам это походу уже типа не нужно.
    • Unity имеет больше всяких приятных штук монетизации и аналитики (хотя и ограничения есть). Вам это походу типа не нужно.
    • UE4 имеет больше свободы, если вам нужно что-то очень-очень специфическое. Для всего остального в Unity есть готовые решения, за что его и выбирают (чтобы не писать велосипед).
    • Внезапно в Unity вы можете подключить DLL, написанною, соответственно, на C/C++. Это может подкосить кроссплатформенность, но основные платформы должны остаться. Плюс крайний вариант сделать несколько версий.

    Я бы поставил всё же на Unity. Хотя бы потому, что в UE4 может случиться затык, который съест время. В Unity шанс меньше, т.к. он рассчитан практически на детей (в том плане, что даже школьники могут быстро освоить, в отличие от EU4).
    Ответ написан
    Комментировать
  • Какой движок выбрать?

    Zoominger
    @Zoominger
    System Integrator
    Я хочу сделать спейс-симулятор, по типу universe sandbox 2 с элементами No Man's Sky.

    Как минимум буду делать Милки Вей галактику

    поступление уже через год.

    добавлю что-нибудь ещё, если время будет.

    Не будет.

    P.S. Время на выполнение до конца февраля, следовательно я смогу доучить с++ и ue4 до конца, а Шарп тем более.

    Вот тут я вообще расхохотался. Кресты учат годами, и я говорю не о 1-3 годах.

    Сам вопрос. Стоит ли бросать юнити и делать на ue4. Почему?

    Нет, не стоит, его вы хотя бы знаете. Пилите на нём, сколько сможете.
    Ответ написан
    2 комментария
  • List c# нужно найти не одинаковые элементы, как это сделать?

    @lil_Toady
    Думаю подойдет Except:
    var diff = current.Except(expected);

    Это выдаст элементы из current, которых нет в expected.

    Можно так же и в обе стороны, чтобы получить элементы которые не пересекаются из обоих списоков:
    var diff = current.Except(expected).Union(expected.Except(current));


    Если для сравнения элементов нужна какая-то особая логика, то нужно будет так же внедрить IEqualityComparer и передавать аргументом в Except.
    Ответ написан
    1 комментарий
  • Перебор массива на совпадения!?

    Если я правильно понял вопрос, то через словарь это делается вот так:
    using System;
    using System.Collections.Generic;
    
    namespace GetRepetitions
    {
        class Program
        {
            static void Main(string[] args)
            {
                var scoreCombo = new int[] { 1, 2, 1, 1, 1 };
                var repetitions = GetRepetitionsCount(scoreCombo);   
                
                foreach (var kv in repetitions)           
                    Console.WriteLine($"Num: {kv.Key}, Rep. Count: {kv.Value}");            
            }
    
            static Dictionary<int, int> GetRepetitionsCount(int[] arr)
            {
                var repetitions = new Dictionary<int, int>();
                foreach (var num in arr)
                    if (repetitions.ContainsKey(num))
                        repetitions[num]++;
                    else
                        repetitions.Add(num, 0);
                return repetitions;
            }
        }
    }
    Ответ написан
    Комментировать
  • Перебор массива на совпадения!?

    С помощью LINQ можно сгруппировать элементы массива по их значению и отобрать те, количество которых больше 1.

    using System;
    using System.Linq;
    
    public class Test
    {
    	public static void Main()
    	{
            int[] ScoreCombo = new int[5] { 1, 2, 1, 1, 1 };
            foreach(var repeat in ScoreCombo.GroupBy(i => i).Where(g => g.Count() > 1))
                Console.WriteLine("Repeat: " + repeat.Key + " (" + repeat.Count() + ")");
    	}
    }
    Ответ написан
    Комментировать
  • Как работает оператор continue?

    GavriKos
    @GavriKos
    continue завершает текущую итерацию цикла.
    Т.е. если i%2 !=0 - то все дальнейшие действия в цикле игнорируются, и он перейдет на след. итерацию.
    Код с аналогичным действием, но без continue:

    for(int i = 0; i<100; i++)
                {
                    if (i % 2 == 0) //инвертированное условие!
                            {
                                Console.WriteLine(i);
                            }
                }
    Ответ написан
    1 комментарий
  • Как определить что игрок двигается в сторону объекта?

    Zoominger
    @Zoominger
    System Integrator
    1. Определить положение курсора и положение игрока в момент времени X и найти длину вектора по этим точкам;
    2. Определить положение курсора и игрока в момент X+n и тоже найти длину вектора;
    3. Сравнить длины векторов. Если второе меньше - движется к курсору, если больше - уходит;
    4. Плюнуть в лицо тем, кто говорит, что программисту не нужна математика.
    Ответ написан
    5 комментариев
  • Нахождение среднего числа в массиве Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    average = sum(my_list) / len(my_list)

    или

    from statistics import mean
    average = round(mean(my_list))

    P.S. Изучение лучше начинать с чтения учебника.
    Ответ написан
    4 комментария
  • Как реализовать ascii графику без использование движков на c#?

    mopsicus
    @mopsicus
    А зачем Unity крякать, если она полностью доступна бесплатно?
    Ответ написан
    6 комментариев
  • 2D персонаж в Unity?

    kombain32
    @kombain32
    QA, C# developer
    Для того чтобы "персонаж двигался и вверх в Unity" и вообще Вам лично начать как-то правильно двигаться в разработке игр и программ вообще, Вам нужно научиться правильно задавать вопросы, понимать цель вопроса, давать правильные входные данные вероятным помощникам(например гуглу или людям в тостере). Поясню за данный вопрос:
    1. Что есть персонаж?
    2. Что у Вас там за платформа и вообще что у Вас там на сцене, не понятно что Вам там мешает двигаться и куда самое главное. Физика какая-то есть у Вас (rigidbody)?
    3. Давайте скриншоты всего, что может помочь нам вместе разобраться: скриншоты сцены, инспекторов объектов на этой сцене, которые у Вас "персонажи", а также скрипты которые управляют движением.

    p.s. правильная формализация и постановка вопроса это 50% успеха.
    Ответ написан
    Комментировать
  • Как сделать смену цветов объекта в юнити?

    GavriKos
    @GavriKos Куратор тега Unity
    Запрограммировать. Простите, но это можно сделать потратив ЧАС на несколько роликов о юнити.
    Ответ написан
    2 комментария
  • Что означает .Net для Unity разработчика?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    1 - .Net существует не только для Unity. точнее изначально существовал сам по себе. гулить историю/архитектуру Unity (что такое Mono, IL2Cpp и много интересных вещей, не все из которых реально необходимы что бы начать кодить)
    знание .Net для Unity разработчика
    может означать, что
    просто знание .Net
    недостаточно

    2 - в различных версиях, Unity поддерживал не только C#, бывали Js, и даже Boo. в этом контексте
    знание .Net для Unity разработчика
    может означать, что
    надо уметь кодить на C# в Unity, а не на Js или Boo


    3 - .. или и то и другое вместе
    Ответ написан
    4 комментария
  • Создание графической оболочки для ОС?

    Aquarius-Michael
    @Aquarius-Michael
    Программист и железячник
    Мне кажется, что вам нужно понять, как работает сам пользовательский интерфейс. Тут должны быть базовые шаблоны, классы и вызовы. Всё-таки окна и любой элемент пользовательского интерфейса это тоже всего рода отдельные приложения, активно взаимодействующие с ядром другого приложения. Попробуйте изучить все поведения элементов из Visual Studio. Там они очень хорошо описаны и сделать хотя бы базовый набор исходя из полученного изучения. Например, окно имеет определённый набор кода, чтобы отрисовывать на экране дисплея, где могут быть вызовы на события, изменения свойств и так далее. И ещё вам надо в первую очередь поработать с кадровым буфером (framebuffer). Без него никак нельзя. Все графические механизмы проходят перерисовку через этот буфер. В общем, для начала вам надо поработать с кадровым буфером. И выводить через него на экран монитора.
    То, что вы делаете, это очень даже хорошо. Важно не останавливаться и сохранять интерес к этому делу. Шаг за шагов вы можете достичь большего. Москва же не сразу строилась.
    Ответ написан
    Комментировать