Хотел бы узнать, как в консоле реализовать генерацию, движение и стрельбу противников.
Вот видео, которое показывает эту реализацию: https://www.youtube.com/watch?v=90EiQsBGoBY&t=71s
Смотрите, в консоли есть два недостатка, которые, в прочем, ни кого не останавливали, когда текстовый дисплей считался роскошью, а графический - фантастикой. Да позднее тоже. Даже перерисовывали шрифты, чтобы по экрану бегали не буковки, а человечки, или еще какая нечисть. Квадратные спрайты платформеров, родом как раз оттуда, единственное что их отличает - плавность смещений, символ можно передвинуть только целиком в соседнюю позицию, а картинку можно сдвинуть на половину клеточки имитируя плавное перемещение, хотя за кадром все те же клетки. Сейчас конечно все намного сложнее и проще одновременно.
Первый недостаток, скорее шутка, но тем не менее - отсутствие готовых библиотек для консольной графики в современных средствах программирования, хотя тот же Turbo Pascal обладал библиотеками даже для рисования оконных интерфейсов в консоли. При этом доступные в .NET возможности консоли довольно бедны, но раз вы задали такой вопрос, то, я надеюсь, не боитесь трудностей.
Второй недостаток уже серьезный - скорость вывода консоли. Если вы планируете как обычно полностью перерисовывать весь экран каждые 50-100 мс, то получите дикое мерцание экрана, и никакая буферизация вас не спасет, так как ее просто нет. Хотя на старых машинах можно было писать напрямую в текстовый буфер экрана, сейчас такой возможности нет, во всяком случае на .NET
Что вам понадобится:
Найти символы, которых нет на клавиатуре, но которыми удобно рисовать то что вы хотите увидеть в консоли, и научиться их вставлять в код тем или иным способом.
Научиться обновлять только необходимые части текстового окна, т.е. если нужно заменить один символ - нужно вывести ровно один новый символ, точно в нужное место, если нужно передвинуть символ - выводим два символа, один в новом месте и один в старом. Подобные манипуляции производятся с помощью методов Console.SetCursorPosition (Int32, Int32) и Console.Write (Char)
Научиться не сдвигать изображение консоли вверх. Для этого понадобится выяснить реальные размеры текстового окна (по умолчанию - 80х25) и не допускать вывода \n
ни при каких обстоятельствах, только хардкор, только ручное позиционирование, конечно это касается только самой нижней строки, но очень легко забыть где стоит текстовый курсор, особенно если он отключен, нам же не нужно мигание курсора на экране, игра все таки.
Научиться получать ввод от пользователя без эхо-ответа, т.е. чтобы после нажатия на клавишу в консоль не выводился соответствующий символ. Для этого понадобится метод Console.ReadKey (true).
Научиться работать с цветом, если конечно нужно. У консоли нельзя задать цвет вывода отдельного символа, но уже выведенные символы сохраняют свой цвет, пока не будут перекрыты при очередном выводе. Таким образом для вывода символов разными цветами, нужно своевременно переключать цвета консоли и не забывать возвращать их в исходное состояние, иначе весь последующий вывод будет тем цветом, на который вы переключились в последний раз.
Ну и самое сложное, это организация основных циклов вашей программы. Тут нужно учитывать все, и это все придется учитывать руками. Когда отрисовывать изменения на экране, когда смотреть что нажал или ввел пользователь, когда обсчитывать действия врагов и пользователя и т.д. и т.п. Консоль не предоставляет событий ввода, поэтому следить за всем этим придется самостоятельно.
Практический совет: начните осваивать консольную графику с чего-то попроще, например со "змейки". Алгоритм игры простой, но вы сможете отработать тонкости работы с консольным выводом до того, как упретесь в реальные проблемы, в конце концов добавьте в змейку противника и научите стрелять =).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу мини-игру на Console C#Для более красивого отображения хочется убрать полосы прокрутки снизу и сбоку консоли
Есть класс (1), в котором содержатся несколько приватных полей (назовем их цена, количество, цвет)Для них уже сделаны геттеры