Всем Хай! Сегодня мы будем разбирать тему расширения массива.
Давайте представим, что у нас есть инвентарь. И этот инвентарь не бесконечный. В нём всего 3 места. Если вы играли в «Resident Evil», то вы понимаете то, о чём я говорю. Все эти три места заняты вещами, патронами, аптечками. Без разницы. Чтобы мы могли расширить этот инвентарь нужно найти, допустим, подсумок. И тогда у нас появится ещё одна свободная ячейка. Это классический одномерный массив.
Как добавить эту ячейку рассмотрим на коротеньком коде.
int[] invent = { 5, 10, 8 };
int[] inventPlus = new int[invent.Length + 1];
for (int i = 0; i < invent.Length; i++)
{
inventPlus[i] = invent[i];
}
inventPlus[invent.Length] = 20;
invent = inventPlus;
for (int i = 0; i < invent.Length; i++)
{
Console.WriteLine(invent[i]);
}
Как видим первой строчкой кода мы создали одномерный массив на 3 элемента и сразу забили все его ячейки.
int[] invent = { 5, 10, 8 }
- 5 аптечек
- 10 пистолетных патронов
- 8 метательных ножей
Чтобы увеличить наш инвентарь, мы должны создать ещё один массив по размерам, который больше предыдущего на один элемент.
int[] inventPlus = new int[invent.Length + 1]
Теперь мы переносим всю информацию из старого массива в новый.
inventPlus[i] = invent[i]
Естественно в цикле.
Теперь у нас есть массив «inventPlus» с размером на 4 элемента и с информацией из массива «invent». И у нас появилось место, чтобы засунуть 20 найденных патронов для дробовика. И мы в последнюю ячейку массива под индексом 3 засовываем наши патроны.
inventPlus[invent.Length] = 20
Напишите в комментариях, почему у нас патроны для дробовика попадут в ячейку под индексом 3. Проверим вашу внимательность.
Но у нас в игре инвентарь называется «invent», а патроны мы положили в другой массив «inventPlus». Не проблема. Не помню, говорил я или нет. Но название массивов это просто ссылка на место в памяти, где лежит информация о массиве. Поэтому мы просто указываем новую ссылку для нашего массива «invent».
invent= inventPlus
Мы заставляем массив «invent» ссылаться на память, на которую ссылается массив «inventPlus».
В конце мы просто выводим все элементы массива в консоли.
Console.WriteLine(invent[i])
Усовершенствование кода.
Зная эту информацию можно реализовать ввод данных через консоль в постоянно расширяющийся массив и потом делать с этими данными всё что угодно.
Код будет выглядеть вот так.
bool exi = true;
string stop;
int[] invent = { 5, 10, 8 };
Console.WriteLine("Массив");
for (int i = 0; i < invent.Length; i++)
{
Console.Write(invent[i] + " ");
}
while (exi)
{
Console.WriteLine("\nВведите новый элемент в массив");
int[] inventPlus = new int[invent.Length + 1];
for (int i = 0; i < invent.Length; i++)
{
inventPlus[i] = invent[i];
}
inventPlus[invent.Length] = Convert.ToInt32(Console.ReadLine());
invent = inventPlus;
Console.WriteLine("Для выхода введите - exit\nДля продолжения нажмите - Enter");
stop = Console.ReadLine();
if (stop == "exit")
{
exi = false;
}
}
Console.WriteLine("Вывести все элементы в массиве - 1");
switch (Console.ReadLine())
{
case "1":
for (int i = 0; i < invent.Length; i++)
{
Console.Write(invent[i] + " ");
}
break;
}
Из новых элементов:
- Я добавил ввод данных в массив через консоль.
inventPlus[invent.Length] = Convert.ToInt32(Console.ReadLine())
- Выход из цикла по запросу.
stop = Console.ReadLine();
if (stop == "exit")
{
exi = false;
}
- И вывод всех элементов массива в консоли через «switch». Что позволяет в будущем, для работы с массивом, добавлять новые команды.
switch (Console.ReadLine())
{
case "1":
for (int i = 0; i < invent.Length; i++)
{
Console.Write(invent[i] + " ");
}
break;
}
Все эти новые элементы я реализовывал много раз и рассказывал, как это делать в прошлых статьях. Поэтому заострять внимание на этом я не буду.
Видео работы программы.
В принципе по этой теме всё. Если возникли вопросы, то пишите их в комментариях. Чем смогу помогу. : ) Ставьте лайки, если всё понятно.
В следующей статье мы будем рисовать карту и героя который будет собирать деньги на ней. Так что опять почти работа с графикой в консоли. Будет интересно, поэтому подписывайтесь, чтобы не пропустить. Пока!
#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп