Используйте менеджер зависимостей, внедрения зависимостей. Пишите скрипты, в которых не может возникнуть подобных ошибок. Настраивайте зависимости в редакторе (скрипты) или в инспекторе.
А при чём тут C#? Это обычная математическая задачка. Если X<0, то Y должна лежать под прямой, иначе над прямой.
Можете использовать какую-нибудь библиотеку, можете пофантазировать с Rectangle.Contains.
1) C++ появился раньше => игровые движки на нём тоже => крупные игры тоже => крупные студии привыкли к нему
2) C++ работает немного быстрее. Если вдруг вы не любите оптимизацию, то ваш говнокод на c++ может иногда работать быстрее.
3) На C++ есть база и движки, которые появились раньше и более проработаны.
4) На C# проще писать и удобнее. Для большинства игр подходит C#.
5) C# намного безопаснее и позволяет меньше ошибаться и писать меньше кода.
6) C# игры меньше весят (код).
7) На C# (Unity 3D) такой низкий порог входа, что даже школьники пишут на нём игры и выкладывают в Steam.
В чём же они похожи? В них одинаково ставятся скобочки и точки с запятыми.
Словари передаются по ссылке. Но если очень хочется, их можно передать по значению вручную.
Асинхронность async/await допускает использование словарей без исключений. (Вы ведь просто исполняете код в другом порядке.)
Возможно, вы перепутали асинхронность с многопоточностью, где словари желательно не изменять из разных потоков.
Классика - это привязка по мак+материнке+диску. Можно ещё добавить ip. Обязательна онлайн-активация по ключу (чтобы не было желания подменять id железок). Только не забывайте указать о такой привязке в лицензионном соглашении (как Windows делает, когда запрещает переустанавливать ОС).
p.s.
Конечно же, любую привязку к компьютеру можно обмануть. В таких ситуациях обычно всё самое крутое и полезное выносят на сервер - создают тонкий клиент, аля teamviewer по уникальному для пользователя vpn соединению, которое можно сменить не чаще чем раз в месяц.
Может выкинуть слово "консольная" и ". Net" и пойти в гугл. Вы удивитесь, как много мануалов по созданию игр.
Как разложить все по полочкам? Прочитайте документацию к любой игровой платформе, например Unity 3D.
Ну и самое главное! Для разработчиков нет понятия игры. Для них есть квест, аркады, рпг, ммо... И пока вы не определитесь с этим умным словом, вы не сможете написать игру.
Это сахар, замораживающий текущую позицию выполнения в методе, пока выполняется асинхронный метод. Он заменяет создание потока, запуск потока, вызов коллбека по завершению потока. Так же он позволяет не выделять нижестоящий код в коолбек-метод.