• Как происходит передача хода от игрока к игроку в компьютерной настольной игре?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Делается это двумя шагами:

    1. Данные - некий указатель на то, чей сейчас ход. Можно сделать, например, булевой переменной (прим. крестики-нолики : ход крестика false, нолика true), числом (прим. ммо игра: id игрока), или перечислением (прим. варкрафт: RedPlayer, BluePlayer, TealPlayer, etc). Можно и другими (символ, строка-имя, IP или что-то ещё).

    2. Условие - каждый ход игра проверяет, какой игрок ходит.
    Как это работает - каждый игрок может ходить, но игра ходом это не считает (ничего не меняется). Например, просто тапы по экрану, на которые игра не будет реагировать, если этот игрок не соответствует игроку, чей сейчас ход.

    Представьте шахматы. Если текущий игрок белый, то чёрный, конечно, может пользоваться мышкой/тачскрином, но ничего происходить не будет. И напротив, аналогичные действия белого оппонента игра будет принимать.
    Ответ написан
    Комментировать
  • Можно ли в WebStorm настроить группировку импортов по такой схеме?

    Grapeoff
    @Grapeoff Автор вопроса
    В чём концепция...?
    Нашёл подходящий ESLint плагин: https://github.com/lydell/eslint-plugin-simple-imp...
    Ответ написан
    Комментировать
  • Какие советы по созданию резюме вы можете дать начинающим и не очень начинающим специалистам?

    paran0id
    @paran0id
    Умный, но ленивый
    Исходя из моего опыта по обе стороны баррикад:

    • Будь готов ответить на вопросы по каждой технологии, указанной в резюме. Не можешь ответить - не указывай.
    • Не бравируй излишне, но и не скромничай ни в коем случае. Это и зарплатных ожиданий касается.
    • "Знание linux на уровне администратора" и "ставил опенофис на убунту" - это не одно и то же.
    • Есть смысл расписать подробно одно-два последних места работы.
    • То, что было больше пяти лет назад, не интересно никому.
    • Не расписывай свои слабости, лучше подтяни их.
    • Помни, что искать резюме будут роботы по ключевым словам и параметрам, а принимать решения будут люди.
    Ответ написан
    Комментировать
  • Можно ли использовать TCP протокол для игрового сервера?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Можно ли использовать TCP протокол для игрового сервера?

    Да, можно.
    Насчёт скорости - она зависит от того как идёт маршрутизация до клиента и обратно
    Ответ написан
    Комментировать
  • Каким должно быть регулярное выражение для email по заданным условиям?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Можешь выбросить все эти свои собственно выдуманные правил для email, потому что существует RFC 822,который определяет как в действительности должны выглядеть email-адреса.
    Нормальные программисты никогда не проверяют email по regexp
    https://en.wikipedia.org/wiki/Email_address
    Valid email addresses
    simple@example.com
    "user@name"@example.com
    very.common@example.com
    disposable.style.email.with+symbol@example.com
    other.email-with-hyphen@example.com
    fully-qualified-domain@example.com
    user.name+tag+sorting@example.com (may go to user.name@example.com inbox depending on mail server)
    x@example.com (one-letter local-part)
    example-indeed@strange-example.com
    test/test@test.com (slashes are a printable character, and allowed)
    admin@mailserver1 (local domain name with no TLD, although ICANN highly discourages dotless email addresses[10])
    example@s.example (see the List of Internet top-level domains)
    " "@example.org (space between the quotes)
    "john..doe"@example.org (quoted double dot)
    mailhost!username@example.org (bangified host route used for uucp mailers)
    user%example.com@example.org (% escaped mail route to user@example.com via example.org)
    user-@example.org (local part ending with non-alphanumeric character from the list of allowed printable characters)
    postmaster@[123.123.123.123] (IP addresses are allowed instead of domains when in square brackets, but strongly discouraged)
    postmaster@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334] (IPv6 uses a different syntax)

    Invalid email addresses
    Abc.example.com (no @ character)
    A@b@c@example.com (only one @ is allowed outside quotation marks)
    a"b(c)d,e:f;gi[j\k]l@example.com (none of the special characters in this local-part are allowed outside quotation marks)
    just"not"right@example.com (quoted strings must be dot separated or the only element making up the local-part)
    this is"not\allowed@example.com (spaces, quotes, and backslashes may only exist when within quoted strings and preceded by a backslash)
    this\ still\"not\\allowed@example.com (even if escaped (preceded by a backslash), spaces, quotes, and backslashes must still be contained by quotes)
    1234567890123456789012345678901234567890123456789012345678901234+x@example.com (local-part is longer than 64 characters)
    i_like_underscore@but_its_not_allowed_in_this_part.example.com (Underscore is not allowed in domain part)
    QA[icon]CHOCOLATE[icon]@test.com (icon characters)

    Твои правила ломаются больше чем в половине приведённых примеров

    Если нужен реальных регэксп для имейла, то вот ответ:
    https://stackoverflow.com/questions/201323/how-can...
    // derivative of work with the following copyright and license:
    // Copyright (c) 2004 Casey West.  All rights reserved.
    // This module is free software; you can redistribute it and/or
    // modify it under the same terms as Perl itself.
    
    // see http://search.cpan.org/~cwest/Email-Address-1.80/
    
    private static string gibberish = @"
    (?-xism:(?:(?-xism:(?-xism:(?-xism:(?-xism:(?-xism:(?-xism:\
    s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
    \x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
    |(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+
    |\s+)*[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+(?-xism:(?-xism:\
    s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
    \x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
    |(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+
    |\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(
    ?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?
    :\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x
    0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*<DQ>(?-xism:(?-xism:[
    ^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D])))+<DQ>(?-xism:(?-xi
    sm:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xis
    m:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\
    ]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\
    s*)+|\s+)*))+)?(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?
    -xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:
    \s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[
    ^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*<(?-xism:(?-xi
    sm:(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^(
    )\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(
    ?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))
    |)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<
    >\[\]:;@\,.<DQ>\s]+(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]
    +)*)(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))
    |(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:
    (?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s
    *\)\s*))+)*\s*\)\s*)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?
    :\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x
    0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xi
    sm:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*
    <DQ>(?-xism:(?-xism:[^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D]
    )))+<DQ>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\
    ]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-x
    ism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+
    )*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))\@(?-xism:(?-xism:(?-xism:(
    ?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?
    -xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^
    ()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s
    *\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+(
    ?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+)*)(?-xism:(?-xism:
    \s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[
    ^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+)
    )|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)
    +|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:
    (?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((
    ?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\
    x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*\[(?:\s*(?-xism:(?-x
    ism:[^\[\]\\])|(?-xism:\\(?-xism:[^\x0A\x0D])))+)*\s*\](?-xi
    sm:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:
    \\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(
    ?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+
    )*\s*\)\s*)+|\s+)*)))>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-
    xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\
    s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^
    \x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))|(?-xism:(?-x
    ism:(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^
    ()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*
    (?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D])
    )|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()
    <>\[\]:;@\,.<DQ>\s]+(?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s
    ]+)*)(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+)
    )|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism
    :(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\
    s*\)\s*))+)*\s*\)\s*)+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((
    ?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\
    x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-x
    ism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)
    *<DQ>(?-xism:(?-xism:[^\\<DQ>])|(?-xism:\\(?-xism:[^\x0A\x0D
    ])))+<DQ>(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\
    \]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-
    xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)
    +)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*))\@(?-xism:(?-xism:(?-xism:
    (?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(
    ?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[
    ^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\
    s*\)\s*)+|\s+)*(?-xism:[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+
    (?:\.[^\x00-\x1F\x7F()<>\[\]:;@\,.<DQ>\s]+)*)(?-xism:(?-xism
    :\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:
    [^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+
    ))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*
    )+|\s+)*)|(?-xism:(?-xism:(?-xism:\s*\((?:\s*(?-xism:(?-xism
    :(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\(
    (?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A
    \x0D]))|)+)*\s*\)\s*))+)*\s*\)\s*)+|\s+)*\[(?:\s*(?-xism:(?-
    xism:[^\[\]\\])|(?-xism:\\(?-xism:[^\x0A\x0D])))+)*\s*\](?-x
    ism:(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism
    :\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:\s*(?-xism:(?-xism:
    (?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|)+)*\s*\)\s*))
    +)*\s*\)\s*)+|\s+)*))))(?-xism:\s*\((?:\s*(?-xism:(?-xism:(?
    >[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0D]))|(?-xism:\s*\((?:
    \s*(?-xism:(?-xism:(?>[^()\\]+))|(?-xism:\\(?-xism:[^\x0A\x0
    D]))|)+)*\s*\)\s*))+)*\s*\)\s*)*)"
      .Replace("<DQ>", "\"")
      .Replace("\t", "")
      .Replace(" ", "")
      .Replace("\r", "")
      .Replace("\n", "");
    
    private static Regex mailbox =
      new Regex(gibberish, RegexOptions.ExplicitCapture);
    Ответ написан
    4 комментария
  • Как убрать зависание WinForms во время выполнения цикла?

    Ternick
    @Ternick
    Вам нужно использовать потоки.
    Циклы, исполнение других сложных функций внутри потока gui вызывает зависание и падение программы из-за блокировки основного потока приложения, в результате чего программа не может обрабатывать другие события.
    Примеры:
    https://docs.microsoft.com/en-us/dotnet/api/system...
    Ответ написан
    4 комментария
  • Как происходит передача хода от игрока к игроку в компьютерной настольной игре?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Видимо параграф структуры, данные и алгоритмы вы пропустили.
    Я не знаю какого ответа вы ожидаете, в абстрактной игре это будет: сменить индекс текущего игрока и начать ход заново.
    Ответ написан
    Комментировать
  • Стоит ли делать для своей игры лаунчер?

    @Drno
    Лаунчер удобен когда неск игр или там есть полезные функции. на стабильность это никак не влияет, чисто удобство юзеров

    PS мнение юзера))
    Ответ написан
    Комментировать
  • Вопрос перевода с SQL на команды SQLAlchemy?

    @AVKor
    Ответ написан
    Комментировать
  • Почему много HTTP запросов - это плохо?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе когда надо достать из холодильника 5 бутылок пива, что проще - открыть холодильник, взять 5 бутылок пива и закрыть холодильник, или открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник?
    Ответ написан
  • Как сфокусироваться на чтении?

    Надо читать книгу по таймеру а не до конца главы.
    Ответ написан
    Комментировать
  • Можно с помощью arduino обнаружить объекты?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Для начала определитесь какую именно плату вы подразумеваете под arduino, и отталкивайтесь уже от ее технических возможностей работы с видеопотоком.
    Ответ написан
    4 комментария
  • Можно с помощью arduino обнаружить объекты?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Для этих целей Arduino не подойдёт.
    Надо использовать что-то высокопроизводительное типа NVIDIA Jetson
    Ответ написан
    1 комментарий
  • Можно с помощью arduino обнаружить объекты?

    gbg
    @gbg Куратор тега Arduino
    Любые ответы на любые вопросы
    Слишком мало вычислительных ресурсов. Впихнуть невпихуемое конечно можно, но нужно обладать достаточной экспертизой в этом вопросе.
    Ответ написан
    3 комментария
  • Package-lock.json - какие бывают соглашения на проектах, best practice?

    Lynn
    @Lynn
    nginx, js, css
    Устанавливать зависимости нужно командой npm ci, тогда package-lock не будет меняться. А если npm ci выдаёт ошибку значит кто-то закоммитил несовместимые package и package-lock и это стоит поправить отдельным коммитом.

    В нормальной работе package-lock меняется только при изменениях в зависимостях
    Ответ написан
    2 комментария
  • Как языки, исполняемые на ВМ, пишут в консоль?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    stdout это просто дескриптор, который открывает консоль.

    Для каждой консольной программы открывается три дескриптора с номерами 0, 1, 2 (stdin, stdout, stderr), куда они могут писать.

    /dev/fd/1
    Нет, fd это просто файловый дескриптор/1
    правильный путь будет /proc/ID_процесса/fd/1
    то есть у каждого процесса stdout свой.

    Ну и еще. Неважно какой язык. Это про архитектуру операционки, а не язык.
    Ответ написан
    5 комментариев
  • Как добавить gnd и 5v пини для Ардуино?

    @evgeniy_lm
    В принципе беспечная макетка годиться только для поиграться, шильд для уно в таком случае вещь избыточная и не дешёвая. Проще и быстрее сделать банальный разветвитель, разрезать попалам соединители и спаять несколько вместе, естественно не забываем место спайки изолировать термоусадкой. Лично я такую фигню те покупаю, а делаю сам используя такой набор, старые тупые кусачки и провода которые есть в наличии
    Если сильно хочется шилд можно придумать свой собственный на базе такой платы
    Ответ написан
    Комментировать
  • WinRAR - какой официальный сайт и почему различаются хеш-суммы установщиков?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Могу предположить, что rarlab - сайт Рошаля, а win-rar - это сайт конторы. rarlab появился раньше и оснований его девать куда-то видимо нет :)
    Ответ написан
    Комментировать
  • Как правильно хранить секреты C# на линуксе?

    byte916
    @byte916 Автор вопроса
    В общем, оказалось это просто
    В файле сервиса просто прописать
    Environment=KEY=VALUE
    При этом, вложенные поля отделяются двойным подчёркиванием
    К примеру, ConnectionString превращается из
    {
      "ConnectionStrings": {
        "DefaultConnection": "SomeString"
      }
    }

    в
    Environment=ConnectionStrings__DefaultConnection='SomeString'


    Либо, использовать файл с переменными EnvironmentFile
    Ответ написан
    2 комментария