Для удобства хранения данных используются
массивы (списки) и
ассоциативные массивы (объекты). Важно использовать их по назначению: в списках хранятся похожие однотипные элементы, а в объектах — элементы, из которых состоит сам объект (например, объект человек состоит из элементов: имя, возраст, пол, профессия и т.д.).
В играх часто требуется проверить, попал ли снаряд в цель. Для этого сравнивают координаты снаряда и множества целей.
Если у элемента1 координаты совпадают с координатами снаряда — элемент1 уничтожен;
Если у элемента2 координаты совпадают с координатами снаряда — элемент2 уничтожен;
Если у элемента3 координаты совпадают с координатами снаряда — элемент3 уничтожен;
...и так много раз. Представляете, как сложно это сделать, когда элементов сотни, тысячи?
Когда однотипных элементов игры много, и с ними должны происходить одновременные действия, надо использовать обычный
массив (список). Допустим у нас есть простой массив — список животных
spisokZooparka:
spisokZooparka = [ 'lev', 'zebra', 'udav', 'akula', 'pauk' ]
Для того, чтобы узнать первый элемент списка пишем
spisokZooparka[0]
А если номер хранится в переменной (например,
x = 2 ) пишем так:
spisokZooparka[x]
Если мы изменим номер в переменной (например,
x = 54 ) и запустим команду
spisokZooparka[x] результат будет другой.
Автоматический перебор элементов массива делается с помощью цикла:
for ( ключ in массив){ что сделать за один цикл }
Например, для списка животных:
for (x in spisokZooparka){
console.log(x);
}
Ключ (
x) — это переменная, которая в первый цикл равна 0, во второй цикл — 1, и так далее.
Массив (
spisokZooparka) — это переменная, в которой хранится массив. Вместо переменной можно прямо вписать и любой массив (но так обычно не делают):
for (x in ['kit', 'osminog']){
console.log(x);
}
Когда компьютер видит такую конструкцию, он берет указанный
массив и выполняет код в фигурных скобках столько раз, сколько в массиве элементов. При этом
ключ каждый раз меняется на следующий.
Для массива из двух элементов код сработает так:
console.log(0); // первый цикл
console.log(1); // второй цикл
Допустим, нам надо заменить удава на омара (зоопарк приобрел новое животное, а старое продал):
for (x in spisokZooparka){
if (spisokZooparka[x] == 'udav'){
// если элемент — это удав
spisokZooparka[x] = 'omar';
// записали в этот элемент новую информацию
}
}
В этом коде поочередно перебираются ключи. Когда ключ
x становится равен 2, и
spisokZooparka[x] становится равен
'udav' мы записываем в
spisokZooparka[2] значение
'omar'
Сделайте самостоятельно цикл, в котором будет проверяться массив
odnoklassniki:
odnoklassniki = [
{name: 'Misha', ball: 5 },
{name: 'Tosha', ball: 3 },
{name: 'Gosha', ball: 4 },
{name: 'Masha', ball: 5 },
{name: 'Sasha', ball: 4 }
]
И для элементов с пятью баллами (
odnoklassniki[x].ball == 5) выведите сообщение с именем человека.
Перебор элементов
ассоциативного массива (объекта) делают точно также, только ключи в цикле становятся не номерами элементов, а текстовыми ключами. Сделайте самостоятельно цикл для перебора элементов объекта:
sobaka = {name: 'Reks', vozrast: 5, poroda: 'pudel' }
— и выведите поочередно все данные из ключей командой
console.log()
Функции, условия и циклы являются основой современных языков программирования. Теперь мы готовы к написанию практически любых игр (в упрощенном виде).