Найти в Дзене

Сделал бродилку в консоли на C#. Разбор кодa

Всем Хай! Сегодня будет сложный разбор. И сложный он будет потому, что будут затронуты моменты, который мы до этого не изучали, но я постараюсь их Вам объяснить. Мне самому их сразу все вывалили. И я до сих пор не запомнил, как их записывать, но с практикой, думаю, запомню. Поехали. Код бродилки будет лежать по ссылке на Яндекс Диске ниже. Скачать документ с кодом. Реализовывать бродилку мы будем в 3 этапа. Первый этап. Когда вы откроете документ с кодом, вам в глаза бросится двумерный массив из символов. Это и есть карта, по которой будет перемещаться наш персонаж. Можете сами нарисовать что-то своё. И первая строчка кода просто отключает мигающий курсор в консоли. Чтобы не отвлекал. Console.CursorVisible = false Дальше мы ставим курсор в то место, где будет выводиться карта. Console.SetCursorPosition(0, 0) Затем мы рисуем, при помощи созданного массива из символов, карту. Дальше мы сразу создаём две переменные и присваиваем им значения «int userX = 10, userY = 5», которые показывают,
Оглавление
Бродилка в консоли
Бродилка в консоли

Всем Хай! Сегодня будет сложный разбор. И сложный он будет потому, что будут затронуты моменты, который мы до этого не изучали, но я постараюсь их Вам объяснить. Мне самому их сразу все вывалили. И я до сих пор не запомнил, как их записывать, но с практикой, думаю, запомню. Поехали.

Код бродилки будет лежать по ссылке на Яндекс Диске ниже.

Скачать документ с кодом.

Реализовывать бродилку мы будем в 3 этапа.

  1. Ввод ключевых элементов в код.
  2. Вывод нужных элементов в консоли.
  3. Реализация двух механик. Передвижение и собирание.

Первый этап.

Когда вы откроете документ с кодом, вам в глаза бросится двумерный массив из символов. Это и есть карта, по которой будет перемещаться наш персонаж. Можете сами нарисовать что-то своё.

И первая строчка кода просто отключает мигающий курсор в консоли. Чтобы не отвлекал.

Console.CursorVisible = false

Дальше мы ставим курсор в то место, где будет выводиться карта.

Console.SetCursorPosition(0, 0)

Затем мы рисуем, при помощи созданного массива из символов, карту.

Дальше мы сразу создаём две переменные и присваиваем им значения «int userX = 10, userY = 5», которые показывают, где наш герой будет на карте при старте. Обычные координаты X и Y.

Сразу создаём ещё один одномерный символьный массив, размером в один символ.

char[] wallet = new char[1]

Как вы поняли, это будет нашим кошельком, который со временем будет увеличиваться. Вспоминаем прошлую статью.

Всё, первый этап закончен, теперь будем всё это выводить в консоли.

Второй этап.

Так как данные у нас постоянно будут меняться, то программа должна работать в цикле. Мы ведь не хотим, когда сделаем один шаг, чтобы программа закрывалась. Создаём бесконечный цикл «while (true)». В нём и будет происходить вся магия.

Для вывода двумерного массива в консоли создаём цикл в цикле по классике.

Теперь можно вывести сам кошелёк в консоли. Для этого мы ставим невидимый курсор на нужную нам позицию и выводим слово «Кошелёк» и пустой массив для этого кошелька.

Console.SetCursorPosition(0, 12);
Console.Write("Кшелёк:");
for (int i = 0; i < wallet.Length; i++)
{
Console.Write(wallet[i] + " ");
}

Теперь можем приступить к нашему герою. Для этого мы опять ставим наш курсор по записанным нами ранее координатам и рисуем нашего героя на карте.

Console.SetCursorPosition(userX,userY);
Console.Write('@');

Осталось заставить это всё работать.

Третий этап.

Движение персонажа.

У нас появляется новый тип данных, который считывает нажатие клавиши на клавиатуре.

ConsoleKeyInfo moveKey = Console.ReadKey()

Действия, которые должны происходить при нажатии этих клавиш мы можем описать в «switch», как при создании ежедневника. Нажал одно, вышло то. Но чтобы считывались нажатия кнопок, в круглых скобках мы записываем не только название переменной, но и добавляем, что это кнопка.

switch (moveKey.Key)

Теперь в каждом кейсе, в отдельности, мы описываем, что будет происходить, когда мы нажмём ту или иную кнопку. Я разберу только первый кейс, ведь остальные разбираются аналогично.

case ConsoleKey.UpArrow:
if (map[userY - 1, userX] != ' # ')
{
userY--;
}
break;

Как видим в этом кусочке описываются действия, если мы нажмём клавишу вверх. У нас начинает проверяться условие. Если по этим координатам не стоит символ «# » то от переменной «userY» отнимается единица. И персонаж у нас двигается вверх. Вы можете подумать, «Зачем мы отняли 1 из переменной «userY» в условии?». Дело в том, что если мы этого не сделаем, то наш персонаж войдёт в это символ. А нам нужно чтобы он остановился перед ним. Поэтому мы от координат отнимаем 1.

userY - 1

Аналогично с остальными тремя кнопками. Только переменные координат меняются. И наш персонаж начинает двигаться и упираться в стены.

Сбор денег.

Теперь разберём реализацию сбора денег на карте. За это отвечает этот маленький фрагмент кода.

if (map[userY, userX] == '$')
{
map[userY, userX] = 'o';
char[] tempWallet = new char[wallet.Length + 1];
for (int i = 0; i < wallet.Length; i++)
{
tempWallet[i] = wallet[i];
}
tempWallet[tempWallet.Length - 1] = '$';
wallet = tempWallet;
}

Если координаты нашего персонажа равны координатам символа денег в двумерном массиве, то мы меняем этот массив на 0 и выполняем условие код в фигурных скобках.

if (map[userY, userX] == '$')

А код вам должен быть известен из прошлой статьи. Там мы изучали расширения массива.

Мы ведь изначально создали кошелёк с одной ячейкой, а благодаря этому коду, каждый раз, когда мы собираем денежку, то мы увеличиваем наш кошелёк на одну ячейку. И так бесконечно. А выводить на экран наши собранные деньги будет этот кусочек кода.

for (int i = 0; i < wallet.Length; i++)
{
Console.Write(wallet[i] + " ");
}

Мы его написали, когда создавали наш одномерный массив кошелька. Помните?

И осталась маленькая, но очень важная деталь. Чтобы был эффект движения, нам нужно чтобы предыдущее положение персонажа стиралось. Для этого в конце цикла мы затираем старые данные простой строчкой.

Console.Clear()

Поэтому при нажатии на клавишу будет видно на долю секунды пропадание всей выведенной информации на экране. По традиции видео работы кода будет ниже по ссылке.

Видео сбора денег в консоли.

Надеюсь, понятно всё объяснил. Я не преподаватель. Я сам обучаюсь вместе с вами. Поэтому допускаю, что моё объяснение не понятно. Если что пишите вопросы в комментариях. Разберёмся. Отметьтесь лайком, если статья была полезна. Ну а мы заканчиваем тему массивов и со следующей статьи приступаем к следующему блоку обучения. Если хотите узнать что будет дальше, то подписывайтесь на канал, чтобы не пропустить новую статью. Ну а я с вами прощаюсь до послезавтра. Пока!

#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп