8. Массивы и словари

До сих пор мы пользовались простыми переменными, которые могли содержать в себе одно значение.
Но рано или поздно даже в средней игре вы столкнётесь с такой проблемой, как огромное количество практически одинаковых переменных.
Представьте, что вам нужно создать поле в 50 квадратов, а за тем проверить позицию игрока.
Пусть каждый квадрат будет иметь 2 значения:

  • 1. Можно продвигаться вперёд.
  • 2. Двигаться вперёд невозможно.

Взгляните на следующий пример.
int board0=2;
int board1=2;
int board2=2;
int board3=2;
int board4=1;
int board5=2;
int board6=2;
int board7=2;
int board8=2;
int board9=1;
int board10=2;
int board11=1;
int board12=2;
int board13=2;
int board14=1;
...
Давайте остановимся.
Теперь вы согласны, что код невероятно похож и утомителен в написании?
А если бы уровень был бы в 300 квадратов… Вообразите радость выписывать 300 таких же переменных.
К счастью, имеется достаточно легкое решение .

Массивы

Массив, подобно любой другой переменной, содержит значения, но, в отличие от неё, может содержать несколько значений, обратиться к которым можно по индексу.
Массив имеет своё имя.
Массив может быть такого размера, который вам нужен.
Взгляните на пример.
int[] board(50);

for(int x=0; x<50; x++)
{
board[x]=2;
}
Здесь мы снова встречаем много нового.
Давайте, как всегда, разбирать всё по строкам.
Первая строка сообщает компилятору о том, что нужно создать массив из значений типа int.
В круглых скобках указано количество элементов массива — 50.
Квадратные скобки после int сообщают компилятору, что эта переменная является массивом.
Массиву дано имя, для того чтобы потом обращаться к нему, а между квадратными скобками указывать индекс элемента, с которым будем работать.
В следующей строке мы начинаем цикл, внутри которого объявляем переменную x, а в теле цикла в качестве индекса элемента указываем этот x.
Здесь же каждому следующему элементу мы присваиваем значение 2.
Цикл будет перебирать массив до тех пор, пока x не станет равным 49.
Почему 49?
Элементы массива всегда начинают индексироваться с нуля.
Поэтому если ваш массив содержит 50 элементов, то первый будет иметь индекс 0, а последний 49.
Если же цикл выйдет из указанного диапазона, то возникнет ошибка выполнения.
Поэтому рекомендуется проверять игру после каждого нового добавления массива.
В последней строке мы сообщаем об окончании цикла.
После того как цикл полностью выполнен и значение 2 назначено всем элементам, мы можем вызывать каждый отдельный элемент по его индексу и назначать ему любое другое значение.
Вы можете использовать как одномерные, так и многомерные массивы, например, для создания x y z сетки.
Например, если вы хотите создать шахматную доску, то вы бы писали следующее:
int[][] chessboard;
Многомерный массив, проще говоря, это массив в массиве.
Для доступа к элементам в многомерном массиве вы используете тот же метод, что был указан выше, только теперь вы указываете не один, а 2 индекса.
Индекс элемента в первом измерении и индекс элемента во втором.
Например доступ к квадрату в левом верхнем углу вы пишете вот так:
chessboard[0][0]=5;
А доступ к нижнему левому углу вы записываете вот так:
chessboard[0][7]=5;
То же самое происходит и с массивами с тремя измерениями.
BGT максимально поддерживает четырёхмерные массивы.

Словари

Словари представляют собой еще один способ объявления переменных.
Словарь используется для хранения пары ключ-значение.
С помощью ключа мы можем посмотреть значение хранящееся здесь же.
Значение может быть любого типа.
Словарь может быть полезен тогда, когда вам необходимо хранить произвольное количество переменных с разными типами.
При указании нового значения, необходимо использовать уникальный строковый ключ, с помощью которого в дальнейшем можно ссылаться на это значение.
Вы можете удалить созданное значение в любой момент времени, не влияя на другие.
Другими словами, словарём называется хэш-карта.
Когда добавляется новая пара ключ-данные, генерируется хэш из добавленного ключа, благодаря чему операция поиска соответствующих данных происходит намного быстрей, чем линейный перебор всех ключей и поиск нужных данных.
Взгляните на следующий пример:
dictionary game_board; // Объявляем наш словарь.

void main()
{
int value; // Объявляем переменную для получения значений из словаря.
// Вносим значения в словарь.
game_board.set("1", 2); // Ключу с именем 1 соответствует значение 2.
game_board.set("2", 4); // Ключу с именем 2 соответствует значение 4.
game_board.get("1", value); // В переменную value получаем значение, которое находится в паре с ключём с именем 1.
alert("Пример словаря", "текущее значение="+value);
game_board.get("2", value); // В переменную value получаем значение, которое находится в паре с ключём с именем 2.
alert("Пример словаря", "текущее значение="+value);
game_board.delete_all(); // Удаляем все значения из словаря.
}
Если удалить или проверить запись, которой не существует, то это не вызовет каких-либо синтаксических ошибок или ошибок времени выполнения, но переменная, которую вы попытаетесь использовать, чтобы получить значение, не изменится.
Также вы можете использовать методы delete и delete_all для удаления как по одной записи из словаря, так и всех сразу.
Обратите внимание, что словарь являются значительно медленнее, чем массив и обычная переменная, так что используйте его с осторожностью.

Назад | Содержание | Вперёд

Поделитесь с друзьями

WordPress Lessons