Для удобства хранения данных используются массивы (списки) и ассоциативные массивы (объекты). Важно использовать их по назначению: в списках хранятся похожие однотипные элементы, а в объектах — элементы, из которых состоит сам объект (например, объект человек состоит из элементов: имя, возраст, пол, профессия и т.д.).
В играх часто требуется проверить, попал ли снаряд в цель. Для этого сравнивают координаты снаряда и множества целей.
Если у элемента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()
Функции, условия и циклы являются основой современных языков программирования. Теперь мы готовы к написанию практически любых игр (в упрощенном виде).
В играх часто требуется проверить, попал ли снаряд в цель. Для этого сравнивают координаты снаряда и множества целей.
Если у элемента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()
Функции, условия и циклы являются основой современных языков программирования. Теперь мы готовы к написанию практически любых игр (в упрощенном виде).
1)массив odnoklassniki:
ОтветитьУдалитьodnoklassniki = [
{name: 'Misha', ball: 5 },
{name: 'Tosha', ball: 3 },
{name: 'Gosha', ball: 4 },
{name: 'Masha', ball: 5 },
{name: 'Sasha', ball: 4 } это же ассоциативный массив??? по тексту создается впечатление что нет, т.к. как-будто ассоциативные массивы начинаем учить только со следующей строчки...
2) Насколько я знаю в 2015 году в ECMASCRIPT 6 ввели классы - которые в ООП и принято называть обьектами... я в джаваскрипте сейчас вообще ниже плинтуса поэтому не претендую - но может самое врмя "НЕ НАЧИНАТЬ" называть ассоциативные массивы = мапы, обьектами ???
Вообще этот урок слишком сложен. Мне кажется, ассоциативные массивы надо убрать из учебника.
УдалитьНасчет "объектов": в js ООП-объекты являются ассоциативными массивами. Ошибки не будет.
Кхм... дайте нам максимум неделю - прежде чем убирать... попробуем с сыном все-таки пройти... Напишу отзыв как и насколько он понял идею ассоциативного массива...
Удалить+
ОтветитьУдалитьС БОООЛЬШИМ трудом ребенку далось... А то почему - вот этот массив odnoklassniki = [
ОтветитьУдалить{name: 'Misha', ball: 5 },
{name: 'Tosha', ball: 3 },
{name: 'Gosha', ball: 4 },
{name: 'Masha', ball: 5 },
{name: 'Sasha', ball: 4 }
]
В консоле Ф12 Хрома отобразился как массив из пяти обьектов - я вообще сказал что потом буду обьяснять...Надо как-то тут разжевать посильней... Ассоциации ... Аллегории ... примеров побольше... Я сам пока к джаваскриптеру на работе не подошел кое-чего не понимал... ( сам я тестер и пишу на джаве автотесты)...
правда сыну всего 11 лет и сейчас в школе вместо бейсика учат scratch...
ОтветитьУдалитьА если не практиковаться, эта тема очень быстро забывается - уж слишком абстрактные вещи. Вашему сыну очень повезло - главное, чтобы не появилось отторжение. В 11 лет настоящий язык программирования - это правда сложно.
Удалить